中文分词、去停用词、发现新词

NLP涵盖的内容较多,分词是基础,特别是对中文来说。

中文分词

目前使用过snownlp、jieba,简单对比下,jieba的默认模识更好用,snownlp分的过细了。 不过相对jieba分词,snownlp 的主要用途应该在于情感评分,在处理电商评论的评分时效果还可以。

# snownlp 分词
for item in df_rate:
    s = SnowNLP(item)
    print(s.words)

#jieba分词
for item in df_rate:
    print("  ".join(jieba.cut(item)))

结果对比

snownlp
['给', '个', '全', '五', '分', '好评', ',', '一直', '在', '这里', '买', '这个', '奶粉', '。']
['奶粉', '宝贝', '吃', '的', '挺', '好']
['一直', '这个', '牌子', ',', '宝贝', '爱', '喝', ',', '好评']
['比', '实体', '店', '便宜', '两', '块', '钱', '!', '但是', '味道', '好', '像', '不', '太', '一样', '!!']

jieba
给 个 全 五分 好评 , 一直 在 这里 买 这个 奶粉 。
奶粉 宝贝 吃 的 挺 好
一直 这个 牌子 , 宝贝 爱喝 , 好评
比 实体店 便宜 两块钱 ! 但是 味道 好像 不太 一样 ! !

jieba分词的优势比较明显,“词”保留的很好。

去停用词

关键在于停用词表的维护。有了停用词表,实际使用时,在分词之后,若分词结果中包含停用词则直接剔掉。

目前网上停用词表较多,哈工大停用词表、百度停用词表等均较常见。

但针对具体业务,可以按业务需要,专门整理对业务无帮助或无意义的词。甚至停用“句”——如针对电商的“此用户没有发表评论。”

发现新词

jieba分词本身是带有发现新词算法的,有机会再深究。

另外,jieba也支持导入自定义词库。

  • 暴力拆分
    其实就是统计重复片段的出现频次。
    之前用sas做过一次搜索语的暴力拆分,按照两字词、三字词、四字词等去提取高频片段,效果有,特别是出现频次高的,但这个程度不好把握,还会出现截取的现象,比如“陕西省”,其中的“西省”也会出现在两字词高频片段中。

  • 凝固度
    凝固度:一个片段出现的频率比左右两部分分别出现的频率的乘积高出多少倍。
    凝固度的思想是:如果片段实际出现的概率比被随机组合出来的概率高出很多倍,就说明这样的组合应该不是意外产生的,而是有一些关联的。这个关联很可能就是因为这个片段是一个不可分割的整体,也就是单词。

  • 自由度
    凝固度仍有可能出现非完整词的情况(陕西省被拆出 ‘西省’).
    自由度用来描述一个片段相邻字的多样、不固定性,若自由度较低,该词很可能是一个完整词的片段(即相邻字比较固定,很可能加上相邻字才是完整词),反之自由度高,则本身是词的概率较高。

凝固度、自由度参考自 用 Python 分析《红楼梦》

你可能感兴趣的:(中文分词、去停用词、发现新词)