一、基本分词函数
- 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个二类)
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 | 单位符号,全角:¥ $ £ ° ℃ 半角:$ |