1. 什么是 jieba? #
jieba 是 Python 里最常用的中文分词工具,支持分词、关键词提取、词性标注和自定义词典等功能。它把看起来连在一起的中文句子“切开”,让程序可以更好地理解文本内容,是中文 NLP 的入门工具。
2. 如何安装? #
不同环境下推荐使用 pip 安装,若使用 Anaconda 也可以用 conda。Windows 和 macOS 命令如下:
# 说明:Windows PowerShell 中安装 jieba
python -m pip install jieba# 说明:macOS 终端或 Linux shell 中安装 jieba
python3 -m pip install jieba如果你使用 conda,可以执行:
# 说明:通过 conda 安装 jieba
conda install -c conda-forge jieba3. 分词模式快速体验 #
jieba 提供精确、全模式与搜索引擎三种切分策略,用法类似:
3.1 精确模式(默认) #
# 说明:导入 jieba 库以进行中文分词
import jieba
def main() -> None:
# 说明:准备待分词的示例文本
text = "我爱自然语言处理技术"
# 说明:使用精确模式切词(cut_all=False)
result = jieba.cut(text, cut_all=False)
print("精确模式:", "/".join(result))
if __name__ == "__main__":
# 说明:运行主函数
main()3.2 全模式 #
# 说明:导入 jieba 以使用全模式分词
import jieba
def main() -> None:
# 说明:准备示例文本
text = "我爱自然语言处理技术"
# 说明:开启 cut_all=True 列出所有可能词语
result = jieba.cut(text, cut_all=True)
print("全模式:", "/".join(result))
if __name__ == "__main__":
# 说明:运行示例
main()3.3 搜索引擎模式 #
# 说明:导入 jieba 体验搜索引擎模式
import jieba
def main() -> None:
# 说明:准备示例文本
text = "我爱自然语言处理技术"
# 说明:搜索引擎模式对长词二次切分
result = jieba.cut_for_search(text)
print("搜索引擎模式:", "/".join(result))
if __name__ == "__main__":
# 说明:执行示例
main()4. 自定义词典技巧 #
用于添加行业词、名字等,避免被误切。
4.1 临时添加词语 #
# 说明:导入 jieba 以演示临时添加词语
import jieba
def main() -> None:
# 说明:待分词的原始文本
text = "李小福是创新办主任也是云计算方面的专家"
print("默认分词:", "/".join(jieba.cut(text)))
# 说明:临时新增行业词语
jieba.add_word("李小福")
jieba.add_word("创新办")
jieba.add_word("云计算")
print("添加词典后:", "/".join(jieba.cut(text)))
if __name__ == "__main__":
# 说明:执行示例
main()4.2 加载词典文件 #
准备 user_dict.txt(格式:词语 词频 词性),然后:
# 说明:导入 jieba 并加载自定义词典
import jieba
def main() -> None:
# 说明:加载用户词典文件
jieba.load_userdict("user_dict.txt")
# 说明:进行分词以验证效果
text = "李小福蓝瘦香菇创新办主任"
print("使用词典文件:", "/".join(jieba.cut(text)))
if __name__ == "__main__":
# 说明:执行主函数
main()4.3 调整词频 #
# 说明:导入 jieba 调整词频
import jieba
def main() -> None:
# 说明:原始文本示例
text = "如果放到post中将出错"
# 说明:调节词频让“中将”被拆开
jieba.suggest_freq(("中", "将"), tune=True)
print("调整词频后:", "/".join(jieba.cut(text)))
if __name__ == "__main__":
# 说明:执行示例
main()5. 关键词提取 #
两种算法:TF-IDF 与 TextRank。
# 说明:导入 jieba.analyse 模块以提取关键词
import jieba.analyse
def main() -> None:
# 说明:准备待分析的示例文本
text = (
"自然语言处理是人工智能和语言学领域的重要分支,"
"研究如何让计算机理解和生成人类语言。"
)
# 说明:使用 TF-IDF 算法获取关键词及权重
tfidf_keywords = jieba.analyse.extract_tags(text, topK=5, withWeight=True)
# 说明:使用 TextRank 算法获取关键词及权重
textrank_keywords = jieba.analyse.textrank(text, topK=5, withWeight=True)
# 说明:输出 TF-IDF 结果
print("TF-IDF:")
for word, weight in tfidf_keywords:
print(f"{word}: {weight:.4f}")
# 说明:输出 TextRank 结果
print("\nTextRank:")
for word, weight in textrank_keywords:
print(f"{word}: {weight:.4f}")
if __name__ == "__main__":
# 说明:运行关键词提取示例
main()6. 词性标注与列表返回 #
词性标注能看出词语的语法角色;lcut/lcut_for_search 则直接返回列表。
# 说明:使用 jieba.posseg 进行词性标注
import jieba.posseg as pseg
def main() -> None:
# 说明:准备一个待标注的句子
text = "我爱自然语言处理技术"
# 说明:遍历分词结果并输出词性
for word, flag in pseg.cut(text):
print(f"{word}: {flag}")
if __name__ == "__main__":
# 说明:执行词性标注示例
main()# 说明:演示 lcut 返回列表形式
import jieba
def main() -> None:
# 说明:准备示例文本
text = "我爱自然语言处理技术"
# 说明:输出精确模式的列表形式
print("精确模式列表:", jieba.lcut(text))
# 说明:输出全模式的列表形式
print("全模式列表:", jieba.lcut(text, cut_all=True))
if __name__ == "__main__":
# 说明:运行列表示例
main()7. 实战案例 #
通过场景化示例串联各功能。
7.1 文本分析(统计 + 关键词) #
# 说明:统计词频并提取关键词
import jieba
import jieba.analyse
from collections import Counter
def text_analysis(text: str):
# 说明:使用精确模式切词
words = jieba.lcut(text)
# 说明:过滤掉长度为 1 的词语
filtered = [w for w in words if len(w) > 1]
# 说明:统计词频
freq = Counter(filtered)
# 说明:提取 topK 关键词
keywords = jieba.analyse.extract_tags(text, topK=5)
return freq, keywords
if __name__ == "__main__":
# 说明:准备示例文本
sample = "自然语言处理结合了计算机科学和语言学,目标是让计算机理解人类语言"
# 说明:执行文本分析
word_freq, keywords = text_analysis(sample)
# 说明:输出分析结果
print("词频:", word_freq.most_common(3))
print("关键词:", keywords)7.2 搜索引擎分词 #
# 说明:搜索查询通常使用 cut_for_search
import jieba
def search_engine_tokenize(query: str):
# 说明:返回搜索模式的分词结果列表
return list(jieba.cut_for_search(query))
if __name__ == "__main__":
# 说明:示例搜索语句
query = "北京大学的学生学习人工智能"
# 说明:打印搜索模式分词结果
print("搜索分词:", search_engine_tokenize(query))7.3 情感分析预处理 #
# 说明:分词并去除常见停用词,用于情感分析
import jieba
# 说明:定义一组常见停用词
STOP_WORDS = {"的", "了", "在", "是", "我", "有", "和", "就", "不", "也", "很", "这"}
def preprocess_for_sentiment(text: str):
# 说明:对文本进行分词
words = jieba.lcut(text)
# 说明:过滤掉停用词与长度为 1 的词
return [w for w in words if len(w) > 1 and w not in STOP_WORDS]
if __name__ == "__main__":
# 说明:示例影评文本
review = "这部电影真的很好看,演员表演很出色,剧情也很精彩!"
# 说明:输出预处理结果
print("预处理结果:", preprocess_for_sentiment(review))8. 进阶技巧 #
适合处理大文本或特定领域。
8.1 并行分词 #
# 说明:启用并行分词以加速大文本处理
import jieba
if __name__ == "__main__":
# 说明:开启 4 个进程进行分词
jieba.enable_parallel(4)
# 说明:准备需要处理的大文本
large_text = "..." # 替换为真实内容
# 说明:执行分词以触发并行
_ = list(jieba.cut(large_text))
# 说明:任务结束后关闭并行模式
jieba.disable_parallel()8.2 词典管理 #
# 说明:查看与设置 jieba 使用的词典
import jieba
if __name__ == "__main__":
# 说明:打印当前主词典路径
print("当前词典路径:", jieba.get_dict_file())
# 说明:切换到自定义词典
jieba.set_dictionary("path/to/your/dict.txt")9. 常见问题 #
9.1 内存占用大怎么办? #
# 说明:使用生成器逐行处理大文件,避免一次性加载
import jieba
def process_large_file(file_path: str):
# 说明:逐行读取文件
with open(file_path, "r", encoding="utf-8") as f:
for line in f:
# 说明:对每行执行分词并返回
yield list(jieba.cut(line.strip()))9.2 行业词汇无法正确切分? #
# 说明:加载领域词典并调整词频
import jieba
if __name__ == "__main__":
# 说明:加载医疗领域词典
jieba.load_userdict("medical_terms.txt")
# 说明:加载法律领域词典
jieba.load_userdict("legal_terms.txt")
# 说明:提升特定词语的权重
jieba.suggest_freq("冠状动脉", tune=True)
jieba.suggest_freq("民事诉讼", tune=True)10. 总结 #
| 功能 | 使用方法 | 适用场景 |
| | | |
| 精确分词 | jieba.cut(text) | 一般文本分析 |
| 全模式分词 | jieba.cut(text, cut_all=True) | 收集所有候选词 |
| 搜索分词 | jieba.cut_for_search(text) | 搜索引擎、倒排索引 |
| 关键词提取 | jieba.analyse.extract_tags() | 摘要、标签推荐 |
| 词性标注 | jieba.posseg.cut(text) | NER、语法分析 |
| 自定义词典 | add_word() / load_userdict() | 行业/专有名词 |
jieba 是中文文本处理的“瑞士军刀”,从简单分词到关键词提取都可以快速实现。掌握本文中的技巧后,你就可以在文本分析、搜索引擎、情感分析等项目中快速落地中文分词能力。***