当前位置:   article > 正文

nlp中文本预处理技术

nlp中文本预处理技术

自然语言处理NLP(Natural Language Processing),就是使用计算机对语言文字进行处理的相关技术。本文主要是总结一下中、英文的常用的文本预处技术。
文本分析的流程如下:在这里插入图片描述

一、中文文本分析流程

1,中文文本处理的特点
  • 中文没有单词的分割符号,因此需要复杂的分词模型进行分析。
  • 中文的编码不是utf8,而是unicode。这样会导致在分词的时候,和英文相比,我们要处理编码的问题。
  • 中文纠错的处理比英文更难。
2,数据收集
  • 下载网上公开的数据集:包括比赛数据集、研究型数据集等。
  • 对于一些特殊领域的数据集:需要自己爬取。
3,数据清洗
  • html标签:对于爬取的数据中有很多无用html标签。
  • 特殊符号: 比如数字、表情等,简单的任务可以直接去掉。如果需要复杂的分析,可以进行转换成‘##’,或者其他处理。
  • 标点符号:没有用可以去掉
  • 中文纠错:中文纠错是一个大的问题,比英文难。根据语料分析,进行badcase分析,查看错误语料的结果的影响,没有必要可以不用做;如果错误语料对问题的影响大,可以用开源的工具进行纠错,也可以自己训练,目前的算法大都是采用统计办法进行纠错。
4,中文编码问题

由于Python2不支持unicode的处理,因此我们使用Python2做中文文本预处理时需要遵循的原则是,存储数据都用utf8,读出来进行中文相关处理时,使用GBK之类的中文编码。

5,中文分词:

目前流行的中文工具包:

  • jieba:做最好的 Python 中文分词组件https://github.com/fxsjy/jieba
  • 清华大学THULAC:一个高效的中文词法分析工具包
  • 中科院计算所NLPIR
  • 哈工大LTP
  • FoolNLTK可能不是最快的开源中文分词,但很可能是最准的开源中文分词

备注:特定领域的分词可以加入自己词库进行分词,如果分词误差比较大,可以重新训练自己的分词模型。

import jieba
s = '沙瑞金赞叹易学习的胸怀,是金山的百姓有福,可是这件事对李达康的触动很大。' \
    '易学习又回忆起他们三人分开的前一晚,大家一起喝酒话别,易学习被降职到道口县当县长,' \
    '王大路下海经商,李达康连连赔礼道歉,觉得对不起大家,他最对不起的是王大路,就和易学' \
    '习一起给王大路凑了5万块钱,王大路自己东挪西撮了5万块,开始下海经商。没想到后来王大路' \
    '竟然做得风生水起。沙瑞金觉得他们三人,在困难时期还能以沫相助,很不容易。'
jieba.suggest_freq('沙瑞金', True) # 加入词库
jieba.suggest_freq('易学习', True)
jieba.suggest_freq('王大路', True)
jieba.suggest_freq('京州', True)
document_cut = jieba.cut(s)
result = ' '.join(document_cut)
print(result)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
6,停用词处理:

常用的中文停用下载链接(1208个):http://files.cnblogs.com/files/pinard/stop_words.zip

7,后续步骤
  • 特征提取:向量化。Bag of Words词袋模型(bow,tf-idf)、N-gram特征、Word2vec等
  • 建模:分析任务并建模

二、英文文本分析流程

1,英文文本特点
  • 不需要分词:词之间有分隔符,可以直接用split分割。
  • 不需要编码转换:英文大部分英文文本都是uft-8的编码。
  • 需要处理拼写问题:英文纠错
  • 词干提取(stemming)和词形还原(lemmatization):英文有单数,复数和各种时态,导致一个词会有不同的形式。比如“countries”和"country",“wolf"和"wolves”,我们期望是有一个词。如果进行转换,不仅可以减少词库的大小,提高计算的速度;还可以提高语义的理解。
2,数据收集:和中文的指导一样
  • 下载网上公开的数据集:包括比赛数据集、研究型数据集等。
  • 对于一些特殊领域的数据集:需要自己爬取。
3,数据清洗:和中文的指导类似
  • html标签:对于爬取的数据中有很多无用html标签。
  • 特殊符号: 比如数字、表情等,简单的任务可以直接去掉。如果需要复杂的分析,可以进行转换成‘##’,或者其他处理。
  • 标点符号:没有用可以去掉
  • 英文纠错:英文纠错相比中文纠错简单很多,同时很多情况下都需要进行纠错处理。常用的英文纠错工具包:pyenchant
from enchant.checker import SpellChecker
chkr = SpellChecker("en_US")
chkr.set_text("Many peope likee to watch In the Name of People.")
for err in chkr:
    print "ERROR:", err.word
  • 1
  • 2
  • 3
  • 4
  • 5
4,词干提取(stemming)和词形还原(lemmatization)

词干提取(stemming)和词型还原(lemmatization)都是要找到词的原始形式。词干提取(stemming)会更加激进一点,它在寻找词干的时候可以会得到不是词的词干。比如"imaging"的词干可能得到的是"imag", 并不是一个词。而词形还原则保守一些,它一般只对能够还原成一个正确的词的词进行处理。一般使用nltk工具包进行处理。

import nltk
nltk.download() # 下载语料包
  • 1
  • 2
  • 词干提取:词干提取的方法有PorterStemmer,LancasterStemmer和SnowballStemmer。
from nltk.stem import SnowballStemmer
stemmer = SnowballStemmer("english") # Choose a language
stemmer.stem("countries") # Stem a word
  • 1
  • 2
  • 3
  • 词型还原,则一般可以使用WordNetLemmatizer类,即wordnet词形还原方法
from nltk.stem import WordNetLemmatizer
wnl = WordNetLemmatizer()
print(wnl.lemmatize('countries'))
  • 1
  • 2
  • 3
5,转化为小写

这么做的原因和词干提取的原因一样,减少词库,加快计算。

6,引入停用词

常用的英文停用下载链接:http://www.matthewjockers.net/wp-content/uploads/2013/04/uwm-workshop.zip

7,后续步骤:和中文一样
  • 特征提取:向量化。Bag of Words词袋模型(bow,tf-idf)、N-gram特征、Word2vec等
  • 建模:分析任务并建模

参考文献:

NLP入门-- 文本预处理Pre-processinghttps://zhuanlan.zhihu.com/p/53277723
Useful Text Preprocessing on the datasets:https://www.kaggle.com/l3nnys/useful-text-preprocessing-on-the-datasets

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/356724
推荐阅读
相关标签
  

闽ICP备14008679号