中文分词是自然语言处理(NLP)中最基础也最关键的预处理步骤。与英文不同,中文文本由连续的汉字组成,词与词之间没有天然的分隔符。比如"我爱自然语言处理"这句话,需要被正确地分割为"我/爱/自然语言处理"才能被计算机理解。
词是语言中承载语义的最小单位。准确的分词直接影响后续所有NLP任务的效果:
举个例子,在句子"南京市长江大桥"中,不同的分词方式会导致完全不同的理解:
中文分词面临几个独特挑战:
jieba是目前Python生态中最流行的中文分词工具,其设计目标是"做最好的Python中文分词组件"。它采用基于前缀词典和隐马尔可夫模型(HMM)的混合分词算法,在准确率和效率之间取得了良好平衡。
安装jieba非常简单:
bash复制pip install jieba
基本分词功能只需要一行代码:
python复制import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("/".join(seg_list))
输出结果为:"我/来到/北京/清华大学"
jieba提供三种不同的分词策略,适用于不同场景:
python复制seg_list = jieba.cut("小米公司教育是一家上市公司", cut_all=False)
特点:
python复制seg_list = jieba.cut("小米公司教育是一家上市公司", cut_all=True)
特点:
python复制seg_list = jieba.cut_for_search("小米公司教育是一家上市公司")
特点:
jieba也支持繁体中文分词:
python复制content = "煩惱即是菩提,我暫且不提"
seg_list = jieba.lcut(content)
注意:
在实际项目中,我们经常需要处理特定领域的术语。jieba允许通过自定义词典提升分词准确率。
词典格式示例(userdict.txt):
code复制黑马程序员 5 n
传智教育 6 n
人工智能 7 nz
加载自定义词典:
python复制jieba.load_userdict("userdict.txt")
使用技巧:
除了加载外部词典,还可以在运行时动态调整:
python复制jieba.add_word("石墨烯") # 添加新词
jieba.del_word("石墨烯") # 删除词
jieba.suggest_freq(("中","将"), True) # 调整词频
jieba还提供基于TF-IDF算法的关键词提取功能:
python复制import jieba.analyse
tags = jieba.analyse.extract_tags(content, topK=5)
python复制jieba.enable_parallel(4) # 使用4个进程
python复制seg_list = [word for word in seg_list if re.match("^[\u4e00-\u9fa5]+$", word)]
虽然jieba是最流行的选择,但还有其他中文分词工具值得了解:
选择建议:
在实际项目中,我通常会先用jieba快速验证想法,在确定方向后再根据需求评估是否需要切换到其他工具。jieba的简单易用让它成为原型开发阶段的理想选择。