新人文章,如有不对,请诸位多多指点.
一般在处理文本前(分类,推荐模型等情况下),需要对原始语料进行一些基础的处理,中/英文此处略有不同.
注: 英文参照了52nlp
英文:
- 单词最小化(lower)
- 分词(直接按照空格进行分词,split(" "))
- tokenize化(在完成2后,很多标点符号和单词没有分开,此处使用nltk.work_tokenize进行处理)
- 去掉停用词,以及标点符号(nltk提供了一份停用词表,包含english,french,german等几份阿拉伯语系停用词表)
from nltk.corpus import stopwords
english_stopwords = stopwords.words(‘english’)
len(english_stopwords) #=>127
#标点
english_punctuations = [',', '.', ':', ';', '?', '(', ')', '[', ']', '&', '!', '*', '@', '#', '$', '%']
- 单词词干化(*非必须)
from nltk.stem.lancaster import LancasterStemmer
st = LancasterStemmer()
st.stem('stemmed') #=>'stem'
st.stem('stemming') #=>'stem'
- 去掉在整个语料库中出现次数为1的低频词(*非必须)
中文
- 分词(结巴分词等等)
- 去停用词(标点)
#简单的话可以使用如下:
stop_words_zh = {",", "?", "、", "。", "“", "”", "《", "》", "!", ",", ":", ";", "?",
"的","了","在","是","我","有","和","就","不","人","都","一","一个","上","也","很","到","说","要","去","你","会","着","没有","看","好","自己","这"}
网上比较全的共包含1208个词(加标点),我上传了,可以这里下载: http://pan.baidu.com/s/1mgIbuAG
其中中文停用词中包含了英文的标点,赞一个.
- 去低频词(*非必须)
----------------------------END----------------------
我们可以看到中文的步骤比较少,因为中文文本没有英文的最小化,以及词干化.而中文分词也顺带解决了英文中的tokenize问题.
对于文本中的几种处理,如单词最小化,去停用词,词干化,去低频词等操作,毫无疑问是为了更方便的进行后续的算法处理,对于文本归类,相关推荐都是有必要的.不过,深层语义的话,这些显然是丢掉了很多信息,而暂方面暂时我还未涉及.留作后补.
相对于英文分词的效果,中文分词效果总是差强人意.对于此处,将另起一偏文章,专门说说分词.
另:建立了一个NLP的QQ群,希望有兴趣的朋友加入,进入时请写一句自己对NLP的认识以通过.群号: 451175756