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

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中文文本分词是自然语言处理的一个重要环节,可以将一段连续的中文文本切分成一个个有意义的词语,为后续的文本处理提供基础。下面是使用jieba分词工具进行中文文本分词的操作步骤: 1. 安装jieba分词工具 可以使用pip命令进行安装:`pip install jieba` 2. 导入jieba分词工具 在Python代码导入jieba分词工具:`import jieba` 3. 加载停用词 停用词是指在文本分析不需要进行处理的词语,如“的”、“是”等常用词语,可以在分词前进行过滤。可以先将停用词保存在一个文件,然后在代码读取并进行加载。 4. 加载自定义词典 jieba分词工具提供了用户自定义词典的功能,可以通过加载自定义词典来增加分词的准确性。可以将自定义词典保存在一个文件,然后在代码读取并进行加载。 5. 对文本进行分词 使用jieba分词工具的`jieba.cut()`函数对文本进行分词,函数返回一个生成器对象,可以通过遍历生成器对象获取分词结果。可以使用不同的分词模式进行分词,如精确模式、全模式、搜索引擎模式等。 6. 进行词性标注 jieba分词工具还提供了词性标注的功能,可以对分词结果进行词性标注,如名词、动词、形容词等。 7. 进行去重、去停用词等处理 对于分词结果,可以进行去重、去停用词等处理,以获取更加准确的分词结果。 以上是使用jieba分词工具进行中文文本分词的基本操作步骤,需要根据具体的任务需求进行相应的参数设置和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值