import jieba
text = "大部分情况下,词汇是我们对句子和文章理解的基础,因此需要一个工具去把完整的文本中分解成粒度更细的词。"
cut_result = jieba.cut(text, cut_all=True) # 全模式
print(cut_result)
print("\n全模式 : " + "/ ".join(cut_result))
cut_result = jieba.cut(text, cut_all=False) # 精确模式
print("\n精确模式 : " + "/ ".join(cut_result))
# 搜索引擎模式
seg_result = jieba.cut_for_search(text)
print("\n搜索引擎模式 : " + "/ ".join(seg_result))
全模式 : 大部/ 大部分/ 部分/ 情况/ 下/ ,/ 词汇/ 是/ 我们/ 对/ 句子/ 和文/ 文章/ 理解/ 的/ 基础/ ,/ 因此/ 需要/ 一个/ 工具/ 去/ 把/ 完整/ 的/ 文本/ 中分/ 分解/ 分解成/ 粒度/ 更/ 细/ 的/ 词/ 。
精确模式 : 大部分/ 情况/ 下/ ,/ 词汇/ 是/ 我们/ 对/ 句子/ 和/ 文章/ 理解/ 的/ 基础/ ,/ 因此/ 需要/ 一个/ 工具/ 去/ 把/ 完整/ 的/ 文本/ 中/ 分解成/ 粒度/ 更细/ 的/ 词/ 。
搜索引擎模式 : 大部/ 部分/ 大部分/ 情况/ 下/ ,/ 词汇/ 是/ 我们/ 对/ 句子/ 和/ 文章/ 理解/ 的/ 基础/ ,/ 因此/ 需要/ 一个/ 工具/ 去/ 把/ 完整/ 的/ 文本/ 中/ 分解/ 分解成/ 粒度/ 更细/ 的/ 词/ 。
str = "大家好, 我很喜欢自然语言处理"
lcut_result = jieba.lcut(str, cut_all=True) # 全模式
print(" 全模式 : ", lcut_result)
seg_lcut_result = jieba.lcut_for_search(str)
print(" 搜索模式 : ", seg_lcut_result)
全模式 : ['大家', '好', ',', ' ', '', '我', '很', '喜欢', '自然', '自然语言', '语言', '处理']
搜索模式 : ['大家', '好', ',', ' ', '我', '很', '喜欢', '自然', '语言', '自然语言', '处理']
print("调节词频前 : ", '/ '.join(jieba.cut("如果放到旧字典中将出错", HMM=False)))
# 调节 '中', '将' 两个词的频率, 保证这两个词可以分出来
print(jieba.suggest_freq(segment=('中', '将'), tune=True))
print("调节词频后 : ", '/ '.join(jieba.cut("如果放到旧字典中将出错", HMM=False)))
调节词频前 : 如果/ 放到/ 旧/ 字典/ 中将/ 出错
494
调节词频后 : 如果/ 放到/ 旧/ 字典/ 中/ 将/ 出错
import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
import jieba.analyse as analyse
sentence = open('./data/NBA.txt', encoding='utf-8').read() # 读取文本
extract_res = analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=()) # 返回值为 List
print(" ".join(extract_res))
韦少 杜兰特 全明星 全明星赛 MVP 威少 正赛 科尔 投篮 勇士 球员 斯布鲁克 更衣柜 NBA 三连庄 张卫平 西部 指导 雷霆 明星队
# errors='ignore' 忽略读取错误的部分
words = open(u'./data/西游记.txt', errors='ignore').read()
extract_word = analyse.extract_tags(words, topK=10, withWeight=True, allowPOS=())
extract_word
[('行者', 0.149712969050074),
('八戒', 0.0684507752483343),
('师父', 0.06131446245667119),
('三藏', 0.05297033399354041),
('唐僧', 0.034778995818127),
('大圣', 0.0324254151715385),
('沙僧', 0.03158386691903323),
('妖精', 0.02770001861295469),
('菩萨', 0.02576378770669382),
('和尚', 0.024268051645726228)]
[('行者', 0.149712969050074),
('八戒', 0.0684507752483343),
('师父', 0.06131446245667119),
('三藏', 0.05297033399354041),
('唐僧', 0.034778995818127),
('大圣', 0.0324254151715385),
('沙僧', 0.03158386691903323),
('妖精', 0.02770001861295469),
('菩萨', 0.02576378770669382),
('和尚', 0.024268051645726228)]
TF-IDF 算法介绍 :
关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径
用法: jieba.analyse.set_idf_path(file_name) # file_name为自定义语料库的路径
关键词提取所使用停止词(Stop Words)文本语料库可以切换成自定义语料库的路径
关键词一并返回关键词权重值示例
用法示例见 这里
import jieba.analyse as analyse
lines = open('./data/NBA.txt', encoding='utf-8').read()
# 使用TextRank算法对关键词抽取
# allowPOS 仅包括指定词性的词,默认值为空,即不筛选
word_tr = analyse.textrank(sentence=lines, topK=10, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))
print(' '.join(word_tr))
res = analyse.textrank(sentence=lines, topK=10, withWeight=False, allowPOS=('ns', 'n'))
print(' '.join(res))
全明星赛 勇士 正赛 指导 对方 投篮 球员 没有 出现 时间
勇士 正赛 全明星赛 指导 投篮 玩命 时间 对方 现场 结果
words_my = open('./data/西游记.txt', errors='ignore').read()
print(analyse.textrank(words_my, topK=10, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')))
print(analyse.textrank(words_my, topK=10, withWeight=True, allowPOS=('ns', 'n')))
['行者', '师父', '八戒', '三藏', '大圣', '不知', '菩萨', '妖精', '只见', '长老']
['行者', '师父', '八戒', '三藏', '大圣', '菩萨', '妖精', '国王', '长老', '徒弟']
['行者', '师父', '八戒', '三藏', '大圣', '不知', '菩萨', '妖精', '只见', '长老']
[('行者', 1.0), ('师父', 0.4068394703674021), ('八戒', 0.3983011869139073), ('三藏', 0.3907378862237123), ('大圣', 0.24021798730344252), ('菩萨', 0.20177693035598557), ('妖精', 0.18936895377629598), ('国王', 0.15925294307325125), ('长老', 0.15196050918328696), ('徒弟', 0.10709412067136634)]
import jieba.posseg as posseg
cut_result = posseg.cut('我很喜欢自然语言处理') # 返回类型为 : generator
for word, flag in cut_result:
print(" %s , %s" % (word, flag))
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\WANGTI~1\AppData\Local\Temp\jieba.cache
Loading model cost 0.628 seconds.
Prefix dict has been built successfully.
我 , r
很 , d
喜欢 , v
自然语言 , l
处理 , v
原理:将目标文本按行分隔后,把各行文本分配到多个 Python 进程并行分词,然后归并结果,从而获得分词速度的可观提升 基于 python 自带的 multiprocessing 模块,目前暂不支持 Windows
用法:
注意: 并行分词仅支持默认分词器 jieba.dt 和 jieba.posseg.dt。
print("默认模式的 tokenize")
result_genera = jieba.tokenize(u'自然语言处理在很多领域都有应用') # 返回值类型的是一个迭代器(generator)
for tk in result_genera:
print("%s\t\t start: %d \t\t end: %d" % (tk[0], tk[1], tk[2]))
print("=" * 40)
result_genera_search = jieba.tokenize(u'自然语言处理在很多领域都有应用', mode='search') # 返回值类型的是一个迭代器(generator)
for tk in result_genera_search:
print("%s\t\t start: %d \t\t end: %d" % (tk[0], tk[1], tk[2]))
默认模式的 tokenize
自然语言 start: 0 end: 4
处理 start: 4 end: 6
在 start: 6 end: 7
很多 start: 7 end: 9
领域 start: 9 end: 11
都 start: 11 end: 12
有 start: 12 end: 13
应用 start: 13 end: 15
========================================
自然 start: 0 end: 2
语言 start: 2 end: 4
自然语言 start: 0 end: 4
处理 start: 4 end: 6
在 start: 6 end: 7
很多 start: 7 end: 9
领域 start: 9 end: 11
都 start: 11 end: 12
有 start: 12 end: 13
应用 start: 13 end: 15
使用示例:python -m jieba news.txt > cut_result.txt
命令行选项(翻译):
结巴命令行界面。