jieba(结巴)分词是一款基于 Python 的中文分词工具,以其高性能和简单易用的特点而著称。该工具在自然语言处理、信息检索以及文本挖掘等领域得到广泛应用,成为中文文本处理领域的关键工具。在接下来的学习中,我们将探讨如何使用 jieba 执行以下任务:
- 中文分词: 对中文文本进行有效切分,提取有意义的词语。
- 词性标注: 为分词结果赋予词性标签,进一步丰富语言信息。
- 关键字抽取: 利用 jieba 提取文本中的关键词,以揭示文本的主旨或重点。
GitHub:https://github.com/fxsjy/jieba
1. 中文分词
中文分词是将连续的中文文本切分成一个个有意义的词语的过程。由于汉字在中文中不像空格在英文中那样直接分隔词语,所以中文文本在处理和理解时,需要通过分词来确定每个词的边界。
jieba 支持三种不同的分词模式:精确模式、全模式和搜索引擎模式。
- 精确模式(精准模式):
- 特点: 精确模式是最常用的模式,它会尽量将句子切分成最小粒度的词语。
- 优点: 对于一般文本分析任务,如情感分析、关键词提取等,精确模式通常能够提供较为准确的分词结果。
- 全模式(全切分模式):
- 特点: 全模式会将句子中所有可能的词语都切分出来,可能会导致一些冗余和不准确的分词结果。
- 优点: 适合于信息检索等领域,目的是能够尽可能多地涵盖文本中的关键词,提高召回率。我们也可以通过后期的排序来提高检索结果的准确性。
- 搜索引擎模式:
- 特点: 搜索引擎模式在精确模式的基础上,对长词再次切分,以提高歧义识别的准确性。
- 优点: 适用于搜索引擎等对准确性要求较高的应用场景,能够较好地处理一些歧义较大的词汇。
import jieba import logging jieba.setLogLevel(logging.CRITICAL) # 1. 中文分词 def test01(): sentence = "结巴分词好用不好用全靠用户。" # 1. 精确模式: 试图将句子最精确地切开,适合文本分析 result1 = jieba.lcut(sentence, cut_all=False) print('精确模式:', result1) # 2. 全模式: 把句子中所有的可以成词的词语都扫描出来 result2 = jieba.lcut(sentence, cut_all=True) print('全模式:', result2) # 3. 搜索引擎模式: 在精确模式上, 对长词再次进行划分, 提高召回率 result3 = jieba.lcut_for_search(sentence) print('搜索引擎模式:', result3) # 2. 自定义词典 def test02(): sentence = "结巴分词好用不好用全靠用户。" # 第一种方式 # jieba.add_word('不好用', freq=1) # 向词典中增加某个词 # jieba.del_word('结巴') # 从词典中删除某个词,相当于把该词的词频设置为0 # 第二种方式 jieba.load_userdict('custom.txt') # 1. 精确模式: 试图将句子最精确地切开,适合文本分析 result1 = jieba.lcut(sentence, cut_all=False) print('精确模式:', result1) # 2. 全模式: 把句子中所有的可以成词的词语都扫描出来 result2 = jieba.lcut(sentence, cut_all=True) print('全模式:', result2) # 3. 搜索引擎模式: 在精确模式上, 对长词再次进行划分, 提高召回率 result3 = jieba.lcut_for_search(sentence) print('搜索引擎模式:', result3) if __name__ == '__main__': test01() print('-' * 70) test02()
程序输出结果:
# 未使用自定义字典 精确模式: ['结巴', '分词', '好用', '不好', '用', '全靠', '用户', '。'] 全模式: ['结巴', '分词', '好', '用', '不好', '用', '全', '靠', '用户', '。'] 搜索引擎模式: ['结巴', '分词', '好用', '不好', '用', '全靠', '用户', '。'] # 使用自定义字典 精确模式: ['结巴', '分词', '好用', '不好用', '全靠', '用户', '。'] 全模式: ['结巴', '分词', '好', '用', '不好', '不好用', '全', '靠', '用户', '。'] 搜索引擎模式: ['结巴', '分词', '好用', '不好', '不好用', '全靠', '用户', '。']
2. 词性标注
词性标注(Part-of-Speech Tagging,简称POS Tagging)是自然语言处理中的一项任务,它的目标是为文本中的每个词汇标注其词性或词类。词性是指词语在语法和语义上的类别,例如名词、动词、形容词、副词等。标注的词性信息有助于对句子的语法结构和语义信息进行更深入的分析。
例如:词性标注有助于在情感分析任务中识别情感词,从而更好地理解文本中的情感倾向。
import jieba import logging jieba.setLogLevel(logging.CRITICAL) import jieba.posseg as psg def test01(): sentence = '结巴分词好用不好用全靠用户。' print(psg.lcut(sentence)) def test02(): # 第一种方式 # jieba.add_word('不好用', tag='ccc') # 自定义字典 jieba.load_userdict('custom.txt') sentence = '结巴分词好用不好用全靠用户。' print(psg.lcut(sentence)) if __name__ == '__main__': test01() print('-' * 60) test02()
程序输出结果:
[pair('结巴', 'n'), pair('分词', 'n'), pair('好', 'a'), pair('用', 'p'), pair('不好', 'd'), pair('用', 'p'), pair('全靠', 'n'), pair('用户', 'n'), pair('。', 'x')] ------------------------------------------------------------ [pair('结巴', 'n'), pair('分词', 'n'), pair('好', 'a'), pair('用', 'p'), pair('不好用', 'ccc'), pair('全', 'a'), pair('靠', 'v'), pair('用户', 'n'), pair('。', 'x')]
3. 关键词抽取
关键字抽取是从给定文本中提取出最具代表性、最重要的词语或短语的过程。这些被提取出来的词语或短语被认为是文本的关键信息,能够反映文本的主题、内容或重要特征。
jieba 工具提供了两种算法来提取关键词,一种是基于统计方法的 TF-IDF 算法,一种是基于图方法的 TextRank 算法的。
import jieba import logging jieba.setLogLevel(logging.CRITICAL) import jieba.analyse as analyse def test(): text = "分析师指出,由于橡胶现货需求强劲,但供应却因主产国降雨天气而紧俏。" # 使用 TF-IDF 算法 keywords = analyse.tfidf(text, topK=5) print(keywords) # 使用 TextRank 算法 keywords = analyse.textrank(text, topK=5) print(keywords) if __name__ == '__main__': test()
程序运行结果:
['紧俏', '降雨', '主产', '橡胶', '现货'] ['橡胶', '需求', '现货', '指出', '降雨']