about 1 results (0.00 seconds)

自然语言处理库之SnowNLP - 一个处理中文文本的库

by LauCyun Nov 27,2017 22:02:56 42,294 views

SnowNLP是一个python写的类库,可以方便的处理中文文本内容。简单介绍下snowNLP,可以分词,标注,还可以进行情绪分析。

SnowNLP地址:https://github.com/isnowfy/snownlp

SnowNLP介绍

SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。注意本程序都是处理的unicode编码,所以使用时请自行decode成unicode。

示例

1 分词

from snownlp import SnowNLP

text = "我家门前有两棵树,一棵是枣树,另一棵也是枣树。"
s = SnowNLP(text)
print(s.words)

执行结果:

['我家', '门前', '有', '两', '棵', '树', ',', '一', '棵是', '枣树', ',', '另', '一', '棵也是', '枣树', '。']

2 词性标注

from snownlp import SnowNLP

text = "我家门前有两棵树,一棵是枣树,另一棵也是枣树。"
s = SnowNLP(text)
print(s.words)

for x in s.tags:
    print(x)

执行结果:

('我家', 'n')
('门前', 's')
('有', 'v')
('两', 'm')
('棵', 'q')
('树', 'n')
(',', 'w')
('一', 'm')
('棵是', 'q')
('枣树', 'n')
(',', 'w')
('另', 'r')
('一', 'm')
('棵也是', 'q')
('枣树', 'n')
('。', 'w')
In [3]:

3 情感分析

返回值为正面情绪的概率,越接近1表示正面情绪,越接近0表示负面情绪。

from snownlp import SnowNLP

text1 = '今天天气不冷'
s1 = SnowNLP(text1)
print(s1.sentiments)

text2 = '今天天气好冷'
s2 = SnowNLP(text2)
print(s2.sentiments)

text3 = '今天天气太冷'
s2 = SnowNLP(text3)
print(s2.sentiments)

text3 = '今天天气实在太冷'
s2 = SnowNLP(text3)
print(s2.sentiments)

执行结果:

0.10022930161186983
0.26601455924786455
0.09063365302865867
0.037848066119285484

4 转换成拼音

from snownlp import SnowNLP

text = "垚鱻骉猋麤犇羴槑赑"
s = SnowNLP(text)
print(s.pinyin)

text = "我家门前有两棵树,一棵是枣树,另一棵也是枣树。"
s = SnowNLP(text)
print(s.pinyin)

执行结果:

['垚', '鱻', '骉', '猋', '麤', '犇', '羴', '槑', '赑']
['wo', 'jia', 'men', 'qian', 'you', 'liang', 'ke', 'shu', ',', 'yi', 'ke', 'shi', 'zao', 'shu', ',', 'ling', 'yi', 'ke', 'ye', 'shi', 'zao', 'shu', '。']

复杂的字转换失败~

5 繁体转简体

from snownlp import SnowNLP

text = u'''
滾滾長江東逝水,浪花淘盡英雄。
是非成敗轉頭空:青山依舊在,幾度夕陽紅。
白髮漁樵江渚上,慣看秋月春風。
一壺濁酒喜相逢:古今多少事,都付笑談中。
'''
s = SnowNLP(text)
print(s.han)

执行结果:

滚滚长江东逝水,浪花淘尽英雄。是非成败转头空:青山依旧在,几度夕阳红。白发渔樵江渚上,惯看秋月春风。一壶浊酒喜相逢:古今多少事,都付笑谈中。

6 提取文本关键词

from snownlp import SnowNLP

text = u'''
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。
它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
自然语言处理是一门融语言学、计算机科学、数学于一体的科学。
因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,
所以它与语言学的研究有着密切的联系,但又有重要的区别。
自然语言处理并不是一般地研究自然语言,
而在于研制能有效地实现自然语言通信的计算机系统,
特别是其中的软件系统。因而它是计算机科学的一部分。
'''
s = SnowNLP(text)
print(s.keywords(10))

执行结果:

['语言', '自然', '计算机', '领域', '研究', '科学', '通信', '系统', '智能', '人工']

7 提取文本摘要

from snownlp import SnowNLP

text = u'''
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。
它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
自然语言处理是一门融语言学、计算机科学、数学于一体的科学。
因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,
所以它与语言学的研究有着密切的联系,但又有重要的区别。
自然语言处理并不是一般地研究自然语言,
而在于研制能有效地实现自然语言通信的计算机系统,
特别是其中的软件系统。因而它是计算机科学的一部分。
'''
s = SnowNLP(text)
print(s.summary(10))

执行结果:

['因而它是计算机科学的一部分', '自然语言处理是计算机科学领域与人工智能领域中的一个重要方向', '自然语言处理是一门融语言学、计算机科学、数学于一体的科学', '所以它与语言学的研究有着密切的联系', '这一领域的研究将涉及自然语言', '它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法', '因此', '但又有重要的区别', '特别是其中的软件系统', '而在于研制能有效地实现自然语言通信的计算机系统']

8 信息量衡量

TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

TF词频越大越重要,但是文中“的”,“你”等无意义词频很大,却信息量几乎为0,这种情况导致单纯看词频评价词语重要性是不准确的,因此加入了idf。

IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t越重要

TF-IDF综合起来,才能准确的综合的评价一词对文本的重要性。

from snownlp import SnowNLP

text = [
    [u'性格', u'温柔'],
    [u'善良', u'温柔', u'美丽', u'善良'],
    [u'好人'],
    [u'善良', u'善良'],
    [u'美丽', u'性格', u'温柔']
]
s = SnowNLP(text)
print(s.tf)
print(s.idf)

执行结果:

[{'性格': 1, '温柔': 1}, {'善良': 2, '温柔': 1, '美丽': 1}, {'好人': 1}, {'善良': 2}, {'美丽': 1, '性格': 1, '温柔': 1}]
{'性格': 0.33647223662121295, '温柔': -0.33647223662121295, '善良': 0.33647223662121295, '美丽': 0.33647223662121295, '好人': 1.0986122886681098}

9 文本相似

from snownlp import SnowNLP

text = [
    [u'性格', u'温柔'],
    [u'善良', u'温柔', u'美丽', u'善良'],
    [u'好人'],
    [u'善良', u'善良'],
    [u'美丽', u'性格', u'温柔']
]
s = SnowNLP(text)
print(s.sim([u'温柔']))
print(s.sim([u'好人']))

执行结果:

[0, 0.39584969014260346, 0, 0.5078826213150384, 0]
[0, 0, 1.4896437812448946, 0, 0]

 

SnowNLP基本介绍完了,其实不难发现SnowNLP的效果并不是很好!

...

Tags Read More..