SnowNLP是一个python写的类库,能够便当的处置中文文本内容。如

中文分词

词性标注

情感剖析

文本分类

提取文本关键词

文本类似度计算

装置:pip install snownlp

完成snownlp装置后,查看模块的目录构造,如图所示

这里写图片描绘

normal:文字转换成拼音

seg:中文分词

sentiment:情感剖析

sim:文本类似度

summary:提取文本摘要

tag:词性标注

__init__.py:整个模块的函数办法

想理解snownlp,能够翻开 __init__.py 查看snownlp提供的办法函数

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from . import normal
from . import seg
from . import tag
from . import sentiment
from .sim import bm25
from .summary import textrank
from .summary import words_merge
class SnowNLP(object):
def __init__(self, doc):
self.doc = doc
self.bm25 = bm25.BM25(doc)
@property
def words(self):
return seg.seg(self.doc)
@property
def sentences(self):
return normal.get_sentences(self.doc)
@property
def han(self):
return normal.zh2hans(self.doc)
@property
def pinyin(self):
return normal.get_pinyin(self.doc)
@property
def sentiments(self):
return sentiment.classify(self.doc)
@property
def tags(self):
words = self.words
tags = tag.tag(words)
return zip(words, tags)
@property
def tf(self):
return self.bm25.f
@property
def idf(self):
return self.bm25.idf
def sim(self, doc):
return self.bm25.simall(doc)
def summary(self, limit=5):
doc = []
sents = self.sentences
for sent in sents:
words = seg.seg(sent)
words = normal.filter_stop(words)
doc.append(words)
rank = textrank.TextRank(doc)
rank.solve()
ret = []
for index in rank.top_index(limit):
ret.append(sents[index])
return ret
def keywords(self, limit=5, merge=False):
doc = []
sents = self.sentences
for sent in sents:
words = seg.seg(sent)
words = normal.filter_stop(words)
doc.append(words)
rank = textrank.KeywordTextRank(doc)
rank.solve()
ret = []
for w in rank.top_index(limit):
ret.append(w)
if merge:
wm = words_merge.SimpleMerge(self.doc, ret)
return wm.merge()
return ret
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
整个snownlp模块就提供这些办法函数给我们运用,详细的运用方式以官方文档为例
from snownlp import SnowNLP
s = SnowNLP(u'这个东西真心很赞')
# 分词
s.words # [u'这个', u'东西', u'真心',
# u'很', u'赞']
# 词语标注
s.tags # [(u'这个', u'r'), (u'东西', u'n'),
# (u'真心', u'd'), (u'很', u'd'),
# (u'赞', u'Vg')]
# 情感剖析
s.sentiments # 0.9769663402895832 positive的概率
# 转换拼音
s.pinyin # [u'zhe', u'ge', u'dong', u'xi',
# u'zhen', u'xin', u'hen', u'zan']
s = SnowNLP(u'「繁體字」「繁體中文」的叫法在臺灣亦很常見。')
# 转换简体
s.han # u'「繁体字」「繁体中文」的叫法
# 在台湾亦很常见。'
text = u'''
自然言语处置是计算机科学范畴与人工智能范畴中的一个重要方向。
它研讨能完成人与计算机之间用自然言语停止有效通讯的各种理论和办法。
自然言语处置是一门融言语学、计算机科学、数学于一体的科学。
因而,这一范畴的研讨将触及自然言语,即人们日常运用的言语,
所以它与言语学的研讨有着亲密的联络,但又有重要的区别。
自然言语处置并不是普通地研讨自然言语,
而在于研制能有效地完成自然言语通讯的计算机系统,
特别是其中的软件系统。因此它是计算机科学的一局部。
'''
s = SnowNLP(text)
# 提取关键字
s.keywords(3) # [u'言语', u'自然', u'计算机']
# 提取摘要
s.summary(3) # [u'因此它是计算机科学的一局部',
# u'自然言语处置是一门融言语学、计算机科学、
# 数学于一体的科学',
# u'自然言语处置是计算机科学范畴与人工智能
# 范畴中的一个重要方向']
# 文本分句处置
temp_list = s.sentences
s = SnowNLP([['这篇', '文章'],
['那篇', '论文'],
['这个']])
# TF-IDF算法
s.tf
s.idf
# 文本类似度。从s对象中找出与sim(['文章'])类似的文本
s.sim(['文章'])# [0.3756070762985226, 0, 0]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
关于锻炼
锻炼是更好地完善现有的语料库,如今提供锻炼的包括分词,词性标注,情感剖析。以分词为例 分词在snownlp/seg目录下
# 分词锻炼
from snownlp import seg
seg.train('data.txt')
seg.save('seg.marshal')
# 词性标注锻炼
# from snownlp import tag
# tag.train('199801.txt')
# tag.save('tag.marshal')
# 情感剖析锻炼
# from snownlp import sentiment
# sentiment.train('neg.txt', 'pos.txt')
# sentiment.save('sentiment.marshal')
1
2
3
4
5
6
7
8
9
10
11
12

这样锻炼好的文件就存储为seg.marshal了,之后修正snownlp/seg/init.py里的data_path指向刚锻炼好的文件即可