文章目录

  • Python 中 jieba 模块详解
  • 引言
  • 安装 jieba
  • 分词模式
  • 使用分词
  • 搜索引擎模式
  • 自定义词典
  • 添加自定义词典
  • 调整词典
  • 关键词提取
  • TF-IDF 关键词抽取
  • TextRank 关键词抽取
  • 词性标注
  • 获取词语位置
  • 关键词提取
  • TF-IDF 关键词抽取
  • 示例代码:
  • TextRank 关键词抽取
  • 示例代码:
  • 性能对比
  • 示例性能对比代码:
  • 常见问题解答
  • 分词不准确
  • 编码问题
  • 如何处理歧义词
  • 总结
  • 参考文献

  • Python 中 jieba 模块详解

    引言

    在中文自然语言处理(NLP)中,分词是基本而关键的步骤。由于中文没有空格,分词可以帮助我们更好地理解和处理文本。jieba 是一个流行的中文分词工具,功能强大且易于使用。

    安装 jieba

    首先,确保安装了 jieba 模块,可以使用以下命令:

    pip install jieba
    

    分词模式

    jieba 模块支持三种分词模式:

  • 精确模式:将句子精确切分,适合文本分析。
  • 全模式:扫描出句子中所有可能的词语,速度快,但无法消歧。
  • 搜索引擎模式:在精确模式基础上,对长词再切分,以提高召回率。
  • 使用分词

    import jieba
    
    text = "我来到北京清华大学"
    
    # 全模式
    full_mode = jieba.cut(text, cut_all=True)
    print("全模式: " + "/ ".join(full_mode))
    
    # 精确模式
    exact_mode = jieba.cut(text, cut_all=False)
    print("精确模式: " + "/ ".join(exact_mode))
    
    # 默认模式(精确模式)
    default_mode = jieba.cut("他来到了网易杭研大厦")
    print("默认模式: " + "/ ".join(default_mode))
    

    搜索引擎模式

    使用 cut_for_search 方法,适合构建搜索引擎的倒排索引。

    search_mode = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")
    print(", ".join(search_mode))
    

    自定义词典

    添加自定义词典

    jieba 允许用户添加自定义词典,以提高分词准确性。

    jieba.load_userdict("userdict.txt")
    

    用户字典的格式为:

    词语 词频(可省略) 词性(可省略)
    

    调整词典

  • 添加词:使用 add_word(word, freq=None, tag=None) 方法添加词。
  • 删除词:使用 del_word(word) 方法删除词。
  • 调节词频:使用 suggest_freq(segment, tune=True) 方法调整词频,使特定词能(或不能)被分出来。
  • 关键词提取

    TF-IDF 关键词抽取

    可以使用 extract_tags 方法基于 TF-IDF 算法提取关键词。

    import jieba.analyse
    
    text = "我爱自然语言处理,中文分词很有趣,中文处理需要很多工具。"
    keywords = jieba.analyse.extract_tags(text, topK=5)
    print("关键词:", keywords)
    

    TextRank 关键词抽取

    textrank 方法提供基于 TextRank 算法的关键词抽取。

    keywords = jieba.analyse.textrank(text, topK=5)
    print("关键词:", keywords)
    

    词性标注

    jieba 还支持词性标注功能,使用 posseg 模块可以标注每个词的词性。

    import jieba.posseg as pseg
    
    words = pseg.cut("我爱北京天安门")
    for word, flag in words:
        print(f'{word}, {flag}')
    

    获取词语位置

    使用 tokenize 方法可以获取词语在原文中的起止位置。

    result = jieba.tokenize("永和服装饰品有限公司")
    for tk in result:
        print(f"word {tk[0]}\t\t start: {tk[1]}\t\t end: {tk[2]}")
    

    关键词提取

    TF-IDF 关键词抽取

    TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于信息检索和文本挖掘的常用加权技术。它通过计算一个词在文档中出现的频率(TF)与该词在所有文档中出现的稀有度(IDF)相结合,来评估一个词的重要性。

  • Term Frequency (TF):某个词在文档中出现的次数与该文档总词数的比值。
  • Inverse Document Frequency (IDF):表示词的重要性,计算公式为:[ IDF(w) = \log(\frac{N}{n(w)}) ]
  • ( N ):文档总数
  • ( n(w) ):包含词 ( w ) 的文档数
  • 示例代码:

    import jieba.analyse
    
    text = "我爱自然语言处理,中文分词很有趣,中文处理需要很多工具。"
    keywords = jieba.analyse.extract_tags(text, topK=5, withWeight=True)
    for word, weight in keywords:
        print(f"关键词: {word}, 权重: {weight}")
    

    TextRank 关键词抽取

    TextRank 是一种无监督的图模型算法,常用于关键词提取和摘要生成。它基于词与词之间的关联,通过构建词图并计算节点之间的相似度来识别重要词汇。

    示例代码:

    text = "此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。"
    keywords = jieba.analyse.textrank(text, topK=5, withWeight=True)
    for word, weight in keywords:
        print(f"关键词: {word}, 权重: {weight}")
    

    性能对比

    在实际应用中,jieba 的不同分词模式对性能和准确率有显著影响。以下是对不同模式的对比分析:

    模式 速度 准确率 应用场景
    精确模式 中等 文本分析、内容提取
    全模式 关键词提取、快速初步分析
    搜索引擎模式 较慢 中等 搜索引擎的倒排索引

    示例性能对比代码:

    import time
    
    text = "我来到北京清华大学"
    
    # 精确模式
    start = time.time()
    jieba.cut(text, cut_all=False)
    print("精确模式耗时: ", time.time() - start)
    
    # 全模式
    start = time.time()
    jieba.cut(text, cut_all=True)
    print("全模式耗时: ", time.time() - start)
    
    # 搜索引擎模式
    start = time.time()
    jieba.cut_for_search(text)
    print("搜索引擎模式耗时: ", time.time() - start)
    

    常见问题解答

    分词不准确

    问题:某些词被错误分割,尤其是专业术语或人名。

    解决方案:使用 add_word() 方法添加特定词汇或加载自定义词典,以提高分词的准确性。

    编码问题

    问题:在使用 GBK 编码的文本时,出现乱码或分词错误。

    解决方案:尽量使用 UTF-8 编码的字符串,避免直接输入 GBK 字符串。

    如何处理歧义词

    问题:某些词具有多种含义,分词结果不理想。

    解决方案:使用 suggest_freq() 方法调整词频,指导分词器优先识别特定词义。

    总结

    jieba 是一个灵活且功能丰富的中文分词工具。通过不同的分词模式和自定义词典,用户可以针对特定需求进行优化。无论是文本分析还是关键词提取,jieba 都能为你提供强大的支持。

    参考文献

  • jieba GitHub 仓库
  • jieba 官方文档
  • 作者:XMYX-0

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python 中 jieba 模块详解

    发表回复