语言模型之英文数据预处理

来源:互联网 发布:ftp 带端口 编辑:程序博客网 时间:2024/06/13 07:04

在做语言模型的时候需要对文本做一些预处理,将文本分成一行一句的形式,并标上开始符和结束符。
1.句子切分
可以按照句号,问号,感叹号,进行切分。
然后从未到头扫描一遍,将不是以大写字母开头的拼接到上一句上(对于类似于S. R这类的人名无法处理)

   text=re.sub('\. ',' SSS ',text)    text=re.sub('! ',' SSS ',text)    text=re.sub('\? ',' SSS ',text)    sentencelist=text.split('SSS')    sentencelist=[sentence.strip() for sentence in sentencelist]    numofsentence=len(sentencelist)    for num in range(1,numofsentence-1):        if (sentencelist[-num]!='' and sentencelist[-num][0]>='A' and sentencelist[-num][0]<='Z'):            continue        else:            sentencelist[-num-1]= sentencelist[-num-1]+sentencelist[-num]            sentencelist[-num]=''

2.把所有的数字替换成一个特殊的字符,例如 N 。

  1. 1中有一个问题,就是会把引号里面的文本句子给切分。
    可以在进行第一步之前,先把引号中的内容替换掉,切分完之后再替换回来。这个就有点麻烦,因为还可能出现引号套引号的状况。

  2. 标点去不去掉对语言模型有什么影响呢?不清楚,可以试一下。我做的拼写纠错的任务里面,标点不去,效果会好些。

原来nltk已经实现了分句,分词,参见http://blog.csdn.net/baidu_27438681/article/details/60468848
nltk 也没有解决 引号 之内的句号如何处理的问题。
是否并不重要?

原创粉丝点击