• 常用Python中文分词工具的使用方法


    诸神缄默不语-个人CSDN博文目录

    本文将介绍jieba、HanLP、LAC、THULAC、NLPIR、spacy等多种常用的Python中文分词工具的简单使用方法。

    1. jieba

    官方GitHub项目:fxsjy/jieba: 结巴中文分词

    安装方式:pip install jieba

    精确模式jieba.cut(text)返回一个迭代器,每个元素是一个词语。(lcut()直接返回list)

    import jieba
    print(' '.join(jieba.cut('行动才是果实,言辞不过是枝叶。')))
    
    • 1
    • 2

    输出:

    Building prefix dict from the default dictionary ...
    Loading model from cache /tmp/jieba.cache
    Loading model cost 0.455 seconds.
    Prefix dict has been built successfully.
    行动 才 是 果实 , 言辞 不过 是 枝叶 。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    cut()函数的参数:

    • HMM:发现新词功能,自动计算的词频(下文自定义词典部分)可能无效。
    • use_paddle:paddle模式:使用后无法自定义词典,据我猜测应该跟LAC包一样,所以不如直接用LAC包。

    使用jieba.enable_parallel()可以开启并行分词模式(按行分隔文本),不支持Windows。入参是并行进程数,如无入参默认为CPU个数。
    jieba.disable_parallel() 关闭并行分词模式

    ①添加自定义词典:jieba.load_userdict(file_name) file_name 为文件类对象或自定义词典的路径。
    词典格式和 https://github.com/fxsjy/jieba/blob/master/jieba/dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。
    词频省略时使用自动计算的能保证分出该词的词频。
    ②调整词典:add_word(word, freq=None, tag=None)del_word(word) 可在程序中动态修改词典。
    使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。

    使用自定义词典的示例:https://github.com/fxsjy/jieba/blob/master/test/test_userdict.py

    使用jieba.posseg替换jieba,还能返回词性标注。
    使用jieba.tokenize()还能返回词语在原文中的起止位置,入参只接受Unicode。

    如果只有用户文件夹的权限而没有/tmp的权限,则会报警告信息,可以改变分词器(默认为jieb.dt)的tmp_dircache_file属性来解决这一问题。

    2. HanLP

    官方GitHub项目:hankcs/HanLP: 中文分词 词性标注 命名实体识别 依存句法分析 成分句法分析 语义依存分析 语义角色标注 指代消解 风格转换 语义相似度 新词发现 关键词短语提取 自动摘要 文本分类聚类 拼音简繁转换 自然语言处理
    官网:HanLP在线演示 多语种自然语言处理

    需要申请密钥,因此还没用过,待补。

    3. LAC

    官方GitHub项目:baidu/lac: 百度NLP:分词,词性标注,命名实体识别,词重要性

    论文引用:

    @article{jiao2018LAC,
    	title={Chinese Lexical Analysis with Deep Bi-GRU-CRF Network},
    	author={Jiao, Zhenyu and Sun, Shuqi and Sun, Ke},
    	journal={arXiv preprint arXiv:1807.01882},
    	year={2018},
    	url={https://arxiv.org/abs/1807.01882}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    安装方式 :pip install lacpip install lac -i https://mirror.baidu.com/pypi/simple

    extracted_sentences="随着企业持续产生的商品销量,其数据对于自身营销规划、市场分析、物流规划都有重要意义。但是销量预测的影响因素繁多,传统的基于统计的计量模型,比如时间序列模型等由于对现实的假设情况过多,导致预测结果较差。因此需要更加优秀的智能AI算法,以提高预测的准确性,从而助力企业降低库存成本、缩短交货周期、提高企业抗风险能力。"
    
    from LAC import LAC
    lac=LAC(mode='seg')  #默认值mode='lac'会附带词性标注功能,对应的标签见后文
    seg_result=lac.run(extracted_sentences)  #以Unicode字符串为入参
    print(seg_result)
    seg_result=lac.run(extracted_sentences.split(','))  #以字符串列表为入参,平均速率会更快
    print(seg_result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    输出:

    W0625 20:03:29.850801 32781 init.cc:157] AVX is available, Please re-compile on local machine
    W0625 20:03:29.868482 32781 analysis_predictor.cc:518]  - GLOG's LOG(INFO) is disabled.
    W0625 20:03:29.868522 32781 init.cc:157] AVX is available, Please re-compile on local machine
    --- Running analysis [ir_graph_build_pass]
    --- Running analysis [ir_graph_clean_pass]
    --- Running analysis [ir_analysis_pass]
    --- Running IR pass [simplify_with_basic_ops_pass]
    --- Running IR pass [attention_lstm_fuse_pass]
    --- Running IR pass [seqconv_eltadd_relu_fuse_pass]
    --- Running IR pass [seqpool_cvm_concat_fuse_pass]
    --- Running IR pass [fc_lstm_fuse_pass]
    --- Running IR pass [mul_lstm_fuse_pass]
    --- Running IR pass [fc_gru_fuse_pass]
    --- Running IR pass [mul_gru_fuse_pass]
    --- Running IR pass [seq_concat_fc_fuse_pass]
    --- Running IR pass [fc_fuse_pass]
    --- Running IR pass [repeated_fc_relu_fuse_pass]
    --- Running IR pass [squared_mat_sub_fuse_pass]
    --- Running IR pass [conv_bn_fuse_pass]
    --- Running IR pass [conv_eltwiseadd_bn_fuse_pass]
    --- Running IR pass [is_test_pass]
    --- Running IR pass [runtime_context_cache_pass]
    --- Running analysis [ir_params_sync_among_devices_pass]
    --- Running analysis [adjust_cudnn_workspace_size_pass]
    --- Running analysis [inference_op_replace_pass]
    --- Running analysis [ir_graph_to_program_pass]
    ['随着', '企业', '持续', '产生', '的', '商品', '销量', ',', '其', '数据', '对于', '自身', '营销', '规划', '、', '市场分析', '、', '物流', '规划', '都', '有', '重要', '意义', '。', '但是', '销量', '预测', '的', '影响', '因素', '繁多', ',', '传统', '的', '基于', '统计', '的', '计量', '模型', ',', '比如', '时间', '序列', '模型', '等', '由于', '对', '现实', '的', '假设', '情况', '过多', ',', '导致', '预测', '结果', '较差', '。', '因此', '需要', '更加', '优秀', '的', '智能', 'AI', '算法', ',', '以', '提高', '预测', '的', '准确性', ',', '从而', '助力', '企业', '降低', '库存', '成本', '、', '缩短', '交货', '周期', '、', '提高', '企业', '抗', '风险', '能力', '。']
    [['随着', '企业', '持续', '产生', '的', '商品', '销量'], ['其', '数据', '对于', '自身', '营销', '规划', '、', '市场分析', '、', '物流', '规划', '都', '有', '重要', '意义', '。', '但是', '销量', '预测', '的', '影响', '因素', '繁多'], ['传统', '的', '基于', '统计', '的', '计量', '模型'], ['比如', '时间', '序列', '模型', '等', '由于', '对', '现实', '的', '假设', '情况', '过多'], ['导致', '预测', '结果', '较差', '。', '因此', '需要', '更加', '优秀', '的', '智能', 'AI', '算法'], ['以', '提高', '预测', '的', '准确性'], ['从而', '助力', '企业', '降低', '库存', '成本', '、', '缩短', '交货', '周期', '、', '提高', '企业', '抗', '风险', '能力', '。']]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    词性标注功能的标签:
    在这里插入图片描述

    使用自定义词典:item将不会被分割。
    词典文件每行表示一个定制化的item,由一个单词或多个连续的单词组成,每个单词后使用’/‘表示标签,如果没有’/'标签则会使用模型默认的标签。每个item单词数越多,干预效果会越精准。
    词典文件示例:

    春天/SEASON
    花/n 开/v
    秋天的风
    落 阳
    
    • 1
    • 2
    • 3
    • 4

    run()之前就使用代码:

    # 装载干预词典, sep参数表示词典文件采用的分隔符,为None时默认使用空格或制表符'\t'
    lac.load_customization('custom.txt', sep=None)
    
    • 1
    • 2

    4. THULAC

    官网:THULAC:一个高效的中文词法分析工具包
    在线演示网址:THULAC:一个高效的中文词法分析工具包

    我看到说模型下载需要申请,因此还没使用过,待补。

    5. NLPIR

    官方GitHub项目:NLPIR-team/NLPIR
    官网:NLPIR自然语言处理与信息检索共享平台 – NLPIR Natural Language Processing & Information Retrieval Sharing Platform 自然语言处理、大数据实验室、智能语义平台 汉语分词、中文语义分析、中文信息处理、语义分析系统、中文知识图谱、大数据分析工具
    NLPIR汉语分词系统官网:NLPIR-ICTCLAS汉语分词系统-首页

    看了一下这个还需要下载软件,感觉用起来不方便,如果以后真的需要了再补吧。

    6. spacy

    spacy模型官网:Trained Models & Pipelines · spaCy Models Documentation

    extracted_sentences="随着企业持续产生的商品销量,其数据对于自身营销规划、市场分析、物流规划都有重要意义。但是销量预测的影响因素繁多,传统的基于统计的计量模型,比如时间序列模型等由于对现实的假设情况过多,导致预测结果较差。因此需要更加优秀的智能AI算法,以提高预测的准确性,从而助力企业降低库存成本、缩短交货周期、提高企业抗风险能力。"
    
    import zh_core_web_sm
    nlp = zh_core_web_sm.load()
    doc = nlp(extracted_sentences)
    print([(w.text, w.pos_) for w in doc])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    输出:[('随着', 'ADP'), ('企业', 'NOUN'), ('持续', 'ADV'), ('产生', 'VERB'), ('的', 'PART'), ('商品', 'NOUN'), ('销量', 'NOUN'), (',', 'PUNCT'), ('其', 'PRON'), ('数据', 'NOUN'), ('对于', 'ADP'), ('自身', 'PRON'), ('营销', 'NOUN'), ('规划', 'NOUN'), ('、', 'PUNCT'), ('市场', 'NOUN'), ('分析', 'NOUN'), ('、', 'PUNCT'), ('物流', 'NOUN'), ('规划', 'NOUN'), ('都', 'ADV'), ('有', 'VERB'), ('重要', 'ADJ'), ('意义', 'NOUN'), ('。', 'PUNCT'), ('但是', 'ADV'), ('销量', 'VERB'), ('预测', 'NOUN'), ('的', 'PART'), ('影响', 'NOUN'), ('因素', 'NOUN'), ('繁多', 'VERB'), (',', 'PUNCT'), ('传统', 'ADJ'), ('的', 'PART'), ('基于', 'ADP'), ('统计', 'NOUN'), ('的', 'PART'), ('计量', 'NOUN'), ('模型', 'NOUN'), (',', 'PUNCT'), ('比如', 'ADV'), ('时间', 'NOUN'), ('序列', 'NOUN'), ('模型', 'NOUN'), ('等', 'PART'), ('由于', 'ADP'), ('对', 'ADP'), ('现实', 'NOUN'), ('的', 'PART'), ('假设', 'NOUN'), ('情况', 'NOUN'), ('过', 'ADV'), ('多', 'VERB'), (',', 'PUNCT'), ('导致', 'VERB'), ('预测', 'NOUN'), ('结果', 'NOUN'), ('较', 'ADV'), ('差', 'VERB'), ('。', 'PUNCT'), ('因此', 'ADV'), ('需要', 'VERB'), ('更加', 'ADV'), ('优秀', 'VERB'), ('的', 'PART'), ('智能', 'NOUN'), ('AI算法', 'NOUN'), (',', 'PUNCT'), ('以', 'PART'), ('提高', 'VERB'), ('预测', 'NOUN'), ('的', 'PART'), ('准确性', 'NOUN'), (',', 'PUNCT'), ('从而', 'ADV'), ('助力', 'NOUN'), ('企业', 'NOUN'), ('降低', 'VERB'), ('库存', 'NOUN'), ('成本', 'NOUN'), ('、', 'PUNCT'), ('缩短', 'VERB'), ('交货', 'VERB'), ('周期', 'NOUN'), ('、', 'PUNCT'), ('提高', 'VERB'), ('企业', 'NOUN'), ('抗', 'NOUN'), ('风险', 'NOUN'), ('能力', 'NOUN'), ('。', 'PUNCT')]

    词性标注的标签可参考:Universal POS tags

    7. Stanford Word Segmenter

    官网:The Stanford Natural Language Processing Group

    这个也需要下载软件,还需要Java1.8+才能运行,对我来说有些麻烦。待补。

  • 相关阅读:
    网络通信过程的解析
    jmeter JDBC Request参数化
    第51节——Flux 架构
    HTML期末作业课程设计期末大作业——电影网页制作
    Flink 源码解读系列 DataStream 时间服务管理器 TimeServiceManager 设计与实现
    jenkins插件迁移
    Java IO包之序列化与ObjectInputStream、ObjectOutputStream的简介说明
    ElasticSearch在Java中的基本使用方式
    【Azure 存储服务】访问Azure Blob File遇见400-Condition Headers not support错误的解决之路
    面试软件测试工程师时可能会遇到的几个常见问题
  • 原文地址:https://blog.csdn.net/PolarisRisingWar/article/details/125388765