赞
踩
法1:Anaconda Prompt下输入 conda install jieba
法2:Terminal下输入 pip3 install jieba
cut(sentence, cut_all=False, HMM=True)
返回生成器,遍历生成器即可获得分词的结果
lcut(sentence)
返回分词列表
jieba.cut:
接受三个输参数:需要分词的字符串;cut_all
参数来控制是否采用全模式(默认精确模式);HMM
参数用来控制是否使用 HMM
模型。
jieba.cut_for_search
:接受两个参数:需要分词的字符串;使用使用 HMM
模型,该方法适合用于搜索引擎的构建倒排索引的分词,粒度比较细。
注意:
待分词的字符串可以是 unicode 、 UTF8 、GBK
字符串 。
jieba.cut
和 jieba.cut_for_search
返回的结构都是一个可迭代的 generator
,用for
循环来获取分词后的词语(unicode)。
jieba.lcut
和 jieba.lcut_for_search
直接返回list。
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式
print(", ".join(seg_list))
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print(", ".join(seg_list))
打印结果
Full Mode: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
Default Mode: 我/ 来到/ 北京/ 清华大学
他, 来到, 了, 网易, 杭研, 大厦
小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, ,, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造
jieba.posseg
import jieba.posseg as jp
sentence = '我爱Python数据分析'
posseg = jp.cut(sentence)
for i in posseg:
print(i.__dict__)
# print(i.word, i.flag)
打印结果
{‘word’: ‘我’, ‘flag’: ‘r’}
{‘word’: ‘爱’, ‘flag’: ‘v’}
{‘word’: ‘Python’, ‘flag’: ‘eng’}
{‘word’: ‘数据分析’, ‘flag’: ‘l’}
标注 | 解释 | 标注 | 解释 | 标注 | 解释 |
---|---|---|---|---|---|
a | 形容词 | mq | 数量词 | tg | 时语素 |
ad | 副形词 | n | 名词 | u | 助词 |
ag | 形语素 | ng | 例:义 乳 亭 | ud | 例:得 |
an | 名形词 | nr | 人名 | ug | 例:过 |
b | 区别词 | nrfg | 也是人名 | uj | 例:的 |
c | 连词 | nrt | 也是人名 | ul | 例:了 |
d | 副词 | ns | 地名 | uv | 例:地 |
df | 例:不要 | nt | 机构团体 | uz | 例:着 |
dg | 副语素 | nz | 其他专名 | v | 动词 |
e | 叹词 | o | 拟声词 | vd | 副动词 |
f | 方位词 | p | 介词 | vg | 动语素 |
g | 语素 | q | 量词 | vi | 例:沉溺于 等同于 |
h | 前接成分 | r | 代词 | vn | 名动词 |
i | 成语 | rg | 例:兹 | vq | 例:去浄 去过 唸过 |
j | 简称略语 | rr | 人称代词 | x | 非语素字 |
k | 后接成分 | rz | 例:这位 | y | 语气词 |
l | 习用语 | s | 处所词 | z | 状态词 |
m | 数词 | t | 时间词 | zg | 例:且 丗 丟 |
jieba.tokenize(sentence)
import jieba
sentence = '订单数据分析'
generator = jieba.tokenize(sentence)
for position in generator:
print(position)
打印结果
(‘订单’, 0, 2)
(‘数据分析’, 2, 6)
import jieba, os, pandas as pd
# 词典所在位置
print(jieba.__file__)
jieba_dict = os.path.dirname(jieba.__file__) + r'\dict.txt'
# 读取字典
df = pd.read_table(jieba_dict, sep=' ', header=None)[[0, 2]]
print(df.head())
# 转字典
dt = dict(df.values)
print(dt.get('暨南大学'))
往词典添词 add_word(word, freq=None, tag=None)
往词典删词,等价于add_word(word, freq=0)
del_word(word)
使用add_word
和 del_word
可以动态修改词典。
jieba
词库里没有的词。jieba.load_userdict(file_name)
file_name 文件对象或路径**词语、词频(可省略)、词性(可省略)**
,用空格隔开,顺序不能颠倒。file_name 若为路径或二进制打开,文件必须为UTF-8编码。# userdict.text文件
云计算 5
李小福 2 nr
import jieba
jieba.load_userdict("userdict.txt") # 加载字典
jieba.add_word('八一双鹿') # 加载单词
demo = '李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿'
words = jieba.cut(demo)
print('/'.join(words))
suggest_freq(segment, tune=False)
import jieba
sentence = '上穷碧落下黄泉,两处茫茫皆不见'
print('修正前:', ' | '.join(jieba.cut(sentence)))
jieba.suggest_freq(('落', '下'), True)
print('修正后:', ' | '.join(jieba.cut(sentence)))
打印结果
修正前: 上穷 | 碧 | 落下 | 黄泉 | , | 两处 | 茫茫 | 皆 | 不见
修正后: 上穷 | 碧落 | 下 | 黄泉 | , | 两处 | 茫茫 | 皆 | 不见
import jieba
sentence = '中心小学放假'
DAG = jieba.get_DAG(sentence)
print(DAG)
route = {}
jieba.calc(sentence, DAG, route)
print(route)
DAG
{0: [0, 1, 3], 1: [1], 2: [2, 3], 3: [3], 4: [4, 5], 5: [5]}
最大概率路径
{6: (0, 0), 5: (-9.4, 5), 4: (-12.6, 5), 3: (-20.8, 3), 2: (-22.5, 3), 1: (-30.8, 1), 0: (-29.5, 3)}
示例:使Blade Master这类中间有空格的词被识别
import jieba, re
sentence = 'Blade Master疾风刺杀Archmage'
jieba.add_word('Blade Master') # 添词
print('修改前:', jieba.lcut(sentence))
jieba.re_han_default = re.compile('(.+)', re.U) # 修改格式
print('修改后:', jieba.lcut(sentence))
打印结果
修改前: [‘Blade’, ’ ', ‘Master’, ‘疾风’, ‘刺杀’, ‘Archmage’]
修改后: [‘Blade Master’, ‘疾风’, ‘刺杀’, ‘Archmage’]
TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency),IDF意思是逆文本频率指数(Inverse Document Frequency)。
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence:
待提取的文本
topK:
为返回几个TF-IDF权重的关键词
withWeight
:是否一并返回关键词权重
allowPOS
:仅包括指定词性的词
jieba.analyse.TFIDF(idf_path=None)
新建TF-IDF
实例,为IDF频率文件
import jieba.analyse as ja, jieba
text = '柳梦璃施法破解了狐仙的法术'
jieba.add_word('柳梦璃', tag='nr')
keywords1 = ja.extract_tags(text, allowPOS=('n', 'nr', 'ns', 'nt', 'nz'))
print('基于TF-IDF:', keywords1)
keywords2 = ja.textrank(text, allowPOS=('n', 'nr', 'ns', 'nt', 'nz'))
print('基于TextRank:', keywords2)
打印结果
基于TF-IDF: [‘柳梦璃’, ‘狐仙’, ‘法术’]
基于TextRank: [‘狐仙’, ‘柳梦璃’, ‘法术’]
运行环境:linux系统
开启并行分词模式,参数n为并发数:jieba.enable_parallel(n)
关闭并行分词模式:jieba.disable_parallel()
原理:将目标文件按行分隔后,把各行文本分配到多个Python
进程,然后归并结果,从而获得分词速度提升
基于 Python
自带的 multiprocessing
模块
jieba.enable_parallel(4)
开启并行分词模式,参数为并行进程数
jieba.disable_parallel()
关闭并行分词模式
**注意:**并行分词仅支持默认分词器 jieba.dt
和 jieba.posseg.dt
。
import time
import jieba
jieba.enable_parallel(1) # 创建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))
import jieba
text = '柳梦璃解梦C法'
print(jieba.lcut(text, HMM=False)) # ['柳', '梦', '璃', '解梦', 'C', '法']
print(jieba.lcut(text)) # ['柳梦璃', '解梦', 'C', '法']
jieba.finalseg.emit_P['B']['C'] = -1e-9 # begin
print(jieba.lcut(text)) # ['柳梦璃', '解梦', 'C', '法']
jieba.finalseg.emit_P['M']['梦'] = -100 # middle
print(jieba.lcut(text)) # ['柳', '梦璃', '解梦', 'C', '法']
jieba.finalseg.emit_P['S']['梦'] = -.1 # single
print(jieba.lcut(text)) # ['柳', '梦', '璃', '解梦', 'C', '法']
jieba.finalseg.emit_P['E']['梦'] = -.01 # end
print(jieba.lcut(text)) # ['柳梦', '璃', '解梦', 'C', '法']
jieba.del_word('柳梦') # Force_Split_Words
print(jieba.lcut(text)) # ['柳', '梦', '璃', '解梦', 'C', '法']
[‘柳’, ‘梦’, ‘璃’, ‘解梦’, ‘C’, ‘法’]
[‘柳梦璃’, ‘解梦’, ‘C’, ‘法’]
[‘柳梦璃’, ‘解梦’, ‘C’, ‘法’]
[‘柳’, ‘梦璃’, ‘解梦’, ‘C’, ‘法’]
[‘柳’, ‘梦’, ‘璃’, ‘解梦’, ‘C’, ‘法’]
[‘柳梦’, ‘璃’, ‘解梦’, ‘C’, ‘法’]
[‘柳’, ‘梦’, ‘璃’, ‘解梦’, ‘C’, ‘法’]
# 默认模式
result = jieba.tokenize(u'永和服装饰品有限公司')
for tk in result:
print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
# 搜索模式
result = jieba.tokenize(u'永和服装饰品有限公司', mode='search')
for tk in result:
print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
jieba 加载采用延迟加载,import jieba 和 jieba.Tokenizer() 不会立即触发词典的加载,一旦有必要才开始加载词典构建前缀字典。如果你想手工初始 jieba,也可以手动初始化。
import jieba
jieba.initialize() # 手动初始化(可选)
python -m jieba news.txt > cut_result.txt
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。