0.当前最火热的项目之一就是机器学习了,而机器学习中有一座大山,就是NLP(自然语言处理)自然语言处理处理的是非结构化的数据,而且是字符串
,我们知道计算机擅长处理的是数字,最好是0 1,十六进制什么的,实在不行10进制也凑合用,所以,要进行NLP第一关就是数据预处理。在此我只讲解过
程和简要代码,具体代码可以去https://github.com/Ericgoodboy/NLP查看,这个库持续更新,有兴趣的给个星星。话不多说开整。
1.处理标点符号,这个标点其实很搞的,有一个库叫zhon里面有中文的符号,但中文符号太多了,那个库好像处理不太干净,可以尝试用正则的方式判定
中文字符的范围,因为中文字符的unicode范围是一定的。可以尝试如下正则:
deleteChar = re.compile(u"[^a-zA-Z0-9u4e00-u9fa5]")
2.分词。英文直接用空格符等分词就行了,但中文比较复杂,在中文分词上,结巴分词做的还是挺好的,用了隐马尔可夫,很方便。用起来也很简单。代码如下:
import jieba jieba.cut(sentence)
3.统计词频,因为我们不可能吧所有的词都用上。因为有些词的频率真的很小。对模型的影响很小,还会被当做噪声。所以我们只统计频率比较大的词代码也很简单
如下:
resDic = {} for line in data: for word in line: if word in resDic: resDic[word]+=1 else: resDic[word]=1
4.给每一个单词一个id,并将原来的句子替换成id的表现形式,方法很简单,就不贴代码了直接去github里面有详细代码,在文件/src/preprocess/dataprocess.py中
-1.做完以上4步,预处理算是完成了,但这种数据还是不能放到神经网络中训练,还要选择相应的模型,如one-hot,或者word2vec之类的,将每一个词转化为id才算可以用的数据