NLP数据预处理

  0.当前最火热的项目之一就是机器学习了,而机器学习中有一座大山,就是NLP(自然语言处理)自然语言处理处理的是非结构化的数据,而且是字符串

,我们知道计算机擅长处理的是数字,最好是0 1,十六进制什么的,实在不行10进制也凑合用,所以,要进行NLP第一关就是数据预处理。在此我只讲解过

程和简要代码,具体代码可以去https://github.com/Ericgoodboy/NLP查看,这个库持续更新,有兴趣的给个星星。话不多说开整。

  1.处理标点符号,这个标点其实很搞的,有一个库叫zhon里面有中文的符号,但中文符号太多了,那个库好像处理不太干净,可以尝试用正则的方式判定

中文字符的范围,因为中文字符的unicode范围是一定的。可以尝试如下正则:

deleteChar = re.compile(u"[^a-zA-Z0-9\u4e00-\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才算可以用的数据

猜你喜欢

转载自www.cnblogs.com/mayeye/p/10799322.html