Python | 教程 jieba中文分词

2021年9月2日 339点热度 0人点赞 0条评论
图片

“社会科学中的机器学习”第479篇推送

导言

jieba 分词是目前最简明的中文分词组件,支持三种分词模式:精确模式、全模式和搜索引擎模式,支持简繁体分词,支持自定义词典。

安装软件包

Windows 下使用命令安装:
pip install jieba
PyCharm 中安装:
打开 settings,搜索 Project Interpreter,在右边的窗口选择 +号,点击后在搜索框搜索jieba,点击安装即可

三种分词模式

使用 jieba.lcut 以及 jieba.lcut_for_search 直接返回 list。也可使用 jieba.cutjieba.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.cutjieba.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

添加自定义词典:官方案例

虽然 jieba 有新词识别能力,但自行添加新词可以保证更高的正确率。开发者可以指定自定义词典,以便包含 jieba 词库里没有的词,词典格式如下:
词语 词频(可省略) 词性(可省略)
例如:
创新办 3 i
云计算 5
凱特琳 nz
使用 jieba.load_userdict(file_name) 即可载入词典。
sample_text = "周大福是创新办主任也是云计算方面的专家"        # 示例文本
print("【未加载词典】:" + '/ '.join(jieba.cut(sample_text)))        # 未加载词典
【未加载词典】:周大福/ 是/ 创新/ 办/ 主任/ 也/ 是/ 云/ 计算/ 方面/ 的/ 专家
jieba.load_userdict("userdict.txt")        # 载入词典
print("【加载词典后】:" + '/ '.join(jieba.cut(sample_text)))    # 加载词典
【加载词典后】:周大福/ 是/ 创新办/ 主任/ 也/ 是/ 云计算/ 方面/ 的/ 专家

调整词典

使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。
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))
使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。
# 调节词频前
print("【调节词频前】:" + '/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
#【调节词频前】:如果/放到/post/中将/出错/。

# 调节词频
jieba.suggest_freq(('中''将'), True)  
#494

# 调节词频后
print("【调节词频后】:" + '/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
#【调节词频后】:如果/放到/post/中/将/出错/。

关键词提取

jieba 提供了两种关键词提取方法,分别基于 TF-IDF 算法和 TextRank 算法。

基于 TF-IDF 算法的关键词提取

Term Frequency-Inverse Document Frequency, 词频-逆文件频率的评价方法可概括为“一个词语在一篇文章中出现次数越多,同时在所有文档中出现次数越少,则该词越能够代表该文章”
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))
共有 4 个参数:
sentence:为待提取的文本
topK:为返回几个 TF/IDF 权重最大的关键词,默认值为 20
withWeight:是否一并返回关键词权重值,默认值为 False
allowPOS:仅包括指定词性的词,默认值为空

基于TextRank 算法的关键词提取

TextRank 是另一种关键词提取算法,基于大名鼎鼎的 PageRank,其原理可参见论文Text Rank: Bringing Order into Texts
通过 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))
注:操作平台为Python 3.7.9
文章来源:https://www.cnblogs.com/Hyacinth-Yuan/p/8243476.html,更多请点击“阅读原文”
广受欢迎的微信公众号“社会科学中的机器学习”每周推送R、PythonArcGIS及Stata等软件在社会科学各领域中的运用实例及教程。欢迎媒体及学界与我们展开内容合作,联系邮箱ilikemachinelearning@outlook.com。查看以前推送:点“社会科学中的机器学习”并选择“查看历史消息”。搜寻帐号: iLikeMachineLearning或扫描二维码如下:
图片
72690Python | 教程 jieba中文分词

这个人很懒,什么都没留下

文章评论