“社会科学中的机器学习”第479篇推送
导言
jieba
分词是目前最简明的中文分词组件,支持三种分词模式:精确模式、全模式和搜索引擎模式,支持简繁体分词,支持自定义词典。安装软件包
pip install jieba
settings
,搜索 Project Interpreter
,在右边的窗口选择 +
号,点击后在搜索框搜索jieba
,点击安装即可三种分词模式
jieba.lcut
以及 jieba.lcut_for_search
直接返回 list。也可使用 jieba.cut
和 jieba.cut_for_search
方法进行分词,两者所返回的结构都是一个可迭代的 generator,可使用 for 循环来获得分词后得到的每一个词语(unicode)。精确模式
import jieba
seg_str = "38度的杭州白堤上挤满了人"
print("/".join(jieba.lcut(seg_str))) # 返回一个list类型的结果
seg_list = jieba.cut(seg_str, cut_all=False) #返回一个generator类型的结果
print("/ ".join(seg_list))
38/度/的/杭州/白堤/上/挤满/了/人
38/ 度/ 的/ 杭州/ 白堤/ 上/ 挤满/ 了/ 人
全模式
print("/".join(jieba.lcut("上海复旦大学终于开学了", cut_all=True))) # 全模式使用 'cut_all=True' 指定
seg_list = jieba.cut("上海复旦大学终于开学了", cut_all=True)
print("/ ".join(seg_list))
上海/上海复旦大学/复旦/复旦大学/大学/终于/开学/了
上海/ 上海复旦大学/ 复旦/ 复旦大学/ 大学/ 终于/ 开学/ 了
搜索引擎模式
print("/".join(jieba.lcut_for_search(seg_str))) # 搜索引擎模式
seg_list = jieba.cut_for_search("他毕业于上海交通大学机电系,后来在一机部上海电器科学研究所工作")
print("【搜索引擎模式】:" + "/ ".join(seg_list))
seg_list = jieba.cut("他毕业于上海交通大学机电系,后来在一机部上海电器科学研究所工作")
print("【精确模式】:" + "/ ".join(seg_list))
【搜索引擎模式】:他/ 毕业/ 于/ 上海/ 交通/ 大学/ 上海交通大学/ 机电/ 系/ ,/ 后来/ 在/ 一机部/ 上海/ 电器/ 科学/ 研究/ 研究所/ 工作
【搜索引擎模式】:他/ 毕业/ 于/ 上海交通大学/ 机电/ 系/ ,/ 后来/ 在/ 一机部/ 上海/ 电器/ 科学/ 研究所/ 工作
jieba.lcut
以及 jieba.lcut_for_search
直接返回 list。也可使用 jieba.cut
和 jieba.cut_for_search
方法进行分词,两者所返回的结构都是一个可迭代的 generator,可使用 for 循环来获得分词后得到的每一个词语(unicode)。参数解释
jieba.lcut
进行分词, 接受 3 个参数:-
需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串),尽量不要使用 GBK 字符串,可能无法预料地错误解码成 UTF-8 -
cut_all 参数:是否使用全模式,默认值为 False
-
HMM 参数:是否使用隐式马尔科夫模型(Hidden Markov Model),默认值为 True
jieba.lcut_for_search
进行分词,接受 2 个参数:-
需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串) -
HMM 参数:用来控制是否使用 HMM 模型,默认值为 True
添加自定义词典:官方案例
云计算 5
凱特琳 nz
sample_text = "周大福是创新办主任也是云计算方面的专家" # 示例文本
print("【未加载词典】:" + '/ '.join(jieba.cut(sample_text))) # 未加载词典
jieba.load_userdict("userdict.txt") # 载入词典
print("【加载词典后】:" + '/ '.join(jieba.cut(sample_text))) # 加载词典
调整词典
jieba.add_word('石墨烯') #增加自定义词语
jieba.add_word('凱特琳', freq=42, tag='nz') #设置词频和词性
jieba.del_word('自定义词') #删除自定义词语
test_sent = (
"李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿\n"
"例如我输入一个带“韩玉赏鉴”的标题,在自定义词库中也增加了此词为N类\n"
"「台中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
)
words = jieba.cut(test_sent)
print('/'.join(words))
# 调节词频前
print("【调节词频前】:" + '/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
#【调节词频前】:如果/放到/post/中将/出错/。
# 调节词频
jieba.suggest_freq(('中', '将'), True)
#494
# 调节词频后
print("【调节词频后】:" + '/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
#【调节词频后】:如果/放到/post/中/将/出错/。
关键词提取
基于 TF-IDF 算法的关键词提取
s = "此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。"
for x, w in jieba.analyse.extract_tags(s, topK=20, withWeight=True):
print('%s %s' % (x, w))
topK:为返回几个 TF/IDF 权重最大的关键词,默认值为 20
withWeight:是否一并返回关键词权重值,默认值为 False
allowPOS:仅包括指定词性的词,默认值为空
基于TextRank 算法的关键词提取
jieba.analyse.textrank
方法可以使用基于 TextRank 算法的关键词提取,其与 'jieba.analyse.extract_tags' 有一样的参数,但前者默认过滤词性(allowPOS=('ns', 'n', 'vn', 'v')
)。for x, w in `jieba.analyse.textrank(s, withWeight=True):
print('%s %s' % (x, w))
文章评论