参考文章:https://www.jianshu.com/p/b87e01374a65
二、中文自然处理的主要步骤
(1)语料清洗
1.人工去重、对齐、删除和标注
2.基于规则提取内容、正则表达式匹配
3.根据词性和命名实体提取
英文文本处理不同点:
(1)基于空格分词
(2)进行拼写检查、词干提取、词型还原
都是为了找到词的原始形式
- 词干提取:更加激,可能找到不是词的词干
- 词型还原:保守,一般能找到词的词干
#nltk中提供多种方法,一般wordnet比较好,不会把单词过分精简
from nltk.stem import WordNetLemmatizer
a = WordNetLemmatizer()
data['word'] = data['word'].apply(lambda x:a.WordNetLemmatizer(x))
1 去掉非文本部分
利用正则表达式或者直接替换,去除不提供任何其他信息的标签:html标签、标点符号等
#正则表达式
import re
p = re.complie('正则表达式')
word = re.sub(p,' ',word)
#直接替换
data['word'] = data['word'].str.replace('[^\w\s]','')
(2)中文分词—难点在于歧义和新词
1.基于字符串匹配的分词方法
2.基于理解的分词方法
3.基于统计的分词方法
4.基于规则的分词方法
#英文文本:基于空格分词
data['word'] = data['word'].apply(lambda x:" ".join(x for x in x.split()))
#中文分词:调用工具
import jieba
data['word'] = data['word'].apply(lambda x: list(jieba.cut(x)))
常用的中文分词有中科院计算所NLPIR、哈工大LTP、清华大学THULAC、斯坦福分词器、Hanlp分词器和jieba分词
1、jieba 的分词算法
1.基于统计词典,构造前缀词典,基于前缀词典对句子进行切分,得到所有切分可能,根据切分位置,构造一个有向无环图(DAG);
2.基于DAG图,采用动态规划计算最大概率路径(最有可能的分词结果),根据最大概率路径分词;
3.对于新词(词库中没有的词),采用有汉字成词能力的 HMM 模型进行切分。
2、结巴分词应用
import jieba
#默认模式:精确分词
word = jieba.cut(word,cut_all=False)
#全模式:所有可能是词语的都扫描出来,优点是速度快,缺点是不能解决歧义
word = jieba.cut(word,cut_all=True)
#搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率
word = jieba.cut_search(word)
#输入格式
print(" ".join(word))
#分词后返回list格式
word = jieba.lcut(word)
word = jieba.lcut_search(word)
#获取中文词性
import jieba.posseg as psg
[(x.word