一、基本分词函数
- jieba.lcut 方法接受三个输入参数: ①需要分词的字符串;②cut_all参数用来控制是否采用全模式;③HMM 参数用来控制是否使用 HMM 模型。
- jieba.lcut_for_search 方法接受两个参数 :①需要分词的字符串;②是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
注意:
- 待分词的字符串可以是 unicode 、 UTF8 、GBK字符串 。
- jieba.cut 和 jieba.cut_for_search 返回的结构都是一个可迭代的 generator ,用for循环来获取分词后的词语(unicode)。
- jieba.lcut 和 jieba.lcut_for_search 直接返回list。
import jieba
word_str = "好好学习,天天向上。"
words1 = jieba.lcut(word_str)
words2 = jieba.lcut(word_str, cut_all=True)
words3 = jieba.lcut_for_search(word_str)
二、jieba 分词简单应用
需求:使用 jieba 分词对一个文本进行分词,统计次数出现最多的词语
import jieba
txt = open("***.txt", "r", encoding='utf-8').read()
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1:
continue
else:
counts[word] = counts.get(word, 0) + 1
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
for i in range(3):
word, count = items[i]
print("{0:<5}{1:>5}".format(word, count))
三、添加自定义词典
载入词典
- 指定自己自定义的词典,来补充jieba词库里没有的词。
- 用法:jieba.load_userdict(file_name) ,file_name是文件对象或路径
- 词典格式,一个词占一行;一行分为三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不能颠倒。file_name 若为路径或二进制打开,文件必须为UTF-8编码。
云计算 5
李小福 2 nr
import jieba
jieba.load_userdict("userdict.txt")
jieba.add_word('八一双鹿')
demo = '李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿'
words = jieba.cut(demo)
print('/'.join(words))
使用add_word 和 del_word 可以动态修改词典。
四、关键词提取
基于 TF-IDF 算法的关键词抽取
import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
- sentence 为待提取的文本
- topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
- withWeight 为是否一并返回关键词权重值,默认值为 False
- allowPOS 仅包括指定词性的词,默认值为空,即不筛选
关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径
jieba.analyse.set_idf_path(file_name)
关键词提取所使用停止词(Stop Words)文本语料库可以切换成自定义语料库的路径
jieba.analyse.set_stop_words(file_name)
基于 TextRank 算法的关键词抽取
jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))
直接使用,接口相同,注意默认过滤词性。
jieba.analyse.TextRank()
新建自定义 TextRank 实例
- 基本思想:
- 将待抽取关键词的文本进行分词
- 以固定窗口大小(默认为5,通过span属性调整),词之间的共现关系,构建图
- 计算图中节点的PageRank,注意是无向带权图
五、并行分词
原理: 将目标文件按行分隔后,把各行文本分配到多个Python进程,然后归并结果,从而获得分词速度提升,基于 Python 自带的 multiprocessing 模块
jieba.enable_parallel(4) 开启并行分词模式,参数为并行进程数
jieba.disable_parallel() 关闭并行分词模式
注意: 并行分词仅支持默认分词器 jieba.dt 和 jieba.posseg.dt。
import time
import jieba
jieba.enable_parallel(1)
content = open('./1.txt',"rb").read()
t1 = time.time()
words = "/ ".join(jieba.cut(content))
t2 = time.time()
log_f = open("1.log","wb")
log_f.write(words.encode('utf-8'))
print('speed %s bytes/second' % (len(content)/t2-t1))
六、词性标注
- jieba.posseg.POSTokenizer(tokenizer=None) 新建自定义分词器,tokenizer参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。
- 标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法。
- 具体的词性对照表参见计算所汉语词性标记集
>>> import jieba.posseg as pseg
>>> words = pseg.cut("我爱北京天安门")
>>> for word, flag in words:
... print('%s %s' % (word, flag))
...
我 r
爱 v
北京 ns
天安门 ns
七、返回词所在位置
import jieba
test_sent = u"永和服装饰品有限公司"
result = jieba.tokenize(test_sent)
for tk in result:
print(tk)
('永和', 0, 2)
('服装', 2, 4)
('饰品', 4, 6)
('有限公司', 6, 10)
八、计算所汉语词性标记集
1、名词 (1个一类,7个二类,5个三类)
符号 |
词性 |
n |
名词 |
nr |
人名 |
nr1 |
汉语姓氏 |
nr2 |
汉语名字 |
nrj |
日语人名 |
nrf |
音译人名 |
ns |
地名 |
nsf |
音译地名 |
nt |
机构团体名 |
nz |
其它专名 |
nl |
名词性惯用语 |
ng |
名词性语素 |
2、时间词(1个一类,1个二类)
3、处所词(1个一类)
4、方位词(1个一类)
5、动词(1个一类,9个二类)
符号 |
词性 |
v |
动词 |
vd |
副动词 |
vn |
名动词 |
vshi |
动词“是” |
vyou |
动词“有” |
vf |
趋向动词 |
vx |
形式动词 |
vi |
不及物动词(内动词) |
vl |
动词性惯用语 |
vg |
动词性语素 |
6、形容词(1个一类,4个二类)
符号 |
词性 |
a |
形容词 |
ad |
副形词 |
an |
名形词 |
ag |
形容词性语素 |
al |
形容词性惯用语 |
7、区别词(1个一类,2个二类)
8、状态词(1个一类)
9、代词(1个一类,4个二类,6个三类)
符号 |
词性 |
r |
代词 |
rr |
人称代词 |
rz |
指示代词 |
rzt |
时间指示代词 |
rzs |
处所指示代词 |
rzv |
谓词性指示代词 |
ry |
疑问代词 |
ryt |
时间疑问代词 |
rys |
处所疑问代词 |
ryv |
谓词性疑问代词 |
rg |
代词性语素 |
10、数词(1个一类,1个二类)
11、量词(1个一类,2个二类)
12、副词(1个一类)
13、介词(1个一类,2个二类)
符号 |
词性 |
p |
介词 |
pba |
介词“把” |
pbei |
介词“被” |
14、连词(1个一类,1个二类)
15、助词(1个一类,15个二类)
符号 |
词性 |
u |
助词 |
uzhe |
着 |
ule |
了 喽 |
uguo |
过 |
ude1 |
的 底 |
ude2 |
地 |
ude3 |
得 |
usuo |
所 |
udeng |
等 等等 云云 |
uyy |
一样 一般 似的 般 |
udh |
的话 |
uls |
来讲 来说 而言 说来 |
uzhi |
之 |
ulian |
连 (“连小学生都会”) |
16、叹词(1个一类)
17、语气词(1个一类)
18、拟声词(1个一类)
19、前缀(1个一类)
20、后缀(1个一类)
21、字符串(1个一类,2个二类)
符号 |
词性 |
x |
字符串 |
xe |
Email字符串 |
xs |
微博会话分隔符 |
xm |
表情符合 |
xu |
网址URL |
22、标点符号(1个一类,16个二类)
符号 |
词性 |
w |
标点符号 |
wkz |
左括号,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { < |
wky |
右括号,全角:) 〕 ] } 》 】〗 〉 半角: ) ] { > |
wyz |
左引号,全角:“ ‘ 『 |
wyy |
右引号,全角:” ’ 』 |
wj |
句号,全角:。 |
ww |
问号,全角:? 半角:? |
wt |
叹号,全角:! 半角:! |
wd |
逗号,全角:, 半角:, |
wf |
分号,全角:; 半角: ; |
wn |
顿号,全角:、 |
wm |
冒号,全角:: 半角: : |
ws |
省略号,全角:…… … |
wp |
破折号,全角:―― -- ――- 半角:— ---- |
wb |
百分号千分号,全角:% ‰ 半角:% |
wh |
单位符号,全角:¥ $ £ ° ℃ 半角:$ |