nlp中文本预处理技术

Posted yealxxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

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

4,词干提取(stemming)和词形还原(lemmatization)

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

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

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-processing:https://zhuanlan.zhihu.com/p/53277723
Useful Text Preprocessing on the datasets:https://www.kaggle.com/l3nnys/useful-text-preprocessing-on-the-datasets

以上是关于nlp中文本预处理技术的主要内容,如果未能解决你的问题,请参考以下文章

Stemmers vs Lemmatizers

火炉炼AI机器学习036-NLP词形还原

465词干提取与词形还原

如何预处理文本以进行嵌入?

如何进行词干提取或词形还原?

NER----pythonNLP工具包