Jieba分词
AI-摘要
Chat GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
本文最后更新于 2025-02-11,墨迹未干时,知识正鲜活。随着时间推移,文章部分内容可能需要重新着墨,请您谅解。Contact
全面详解:在 Ubuntu 服务器上使用 Jieba 分词
Jieba(“结巴”)是一款优秀的中文分词工具,因其简单易用、功能强大而广受欢迎。本文将详细介绍如何在 Ubuntu 服务器上安装和使用 Jieba 分词,包括基本用法、高级功能、自定义词典、关键词提取、词性标注、Tokenize、性能优化等内容.
目录
- Jieba 简介
- 在 Ubuntu 上安装 Jieba
- 快速上手
- 分词模式详解
- 自定义词典
- 调节分词结果
- 词性标注
- Tokenize:获取词语位置
- 并行分词
- 性能优化
- 集成其他库
- 常见问题及解决方法
- 参考资料
1. Jieba 简介
Jieba(“结巴”)中文分词工具是一个基于 Python 的开源项目,它采用了多种分词算法,包括基于 Trie 树实现的词典加基于 HMM 模型的中文分词方法,支持三种分词模式:
- 精确模式:试图将句子最精确地切开,适合文本分析。
- 全模式:把句子中所有的可能词语都扫描出来,速度快,但不能解决歧义。
- 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
此外,Jieba 还支持:
- 自定义词典:添加用户自定义的专有词汇,提升分词准确性。
- 关键词提取:基于 TF-IDF 算法和 TextRank 算法提取关键词。
- 词性标注:为分词结果标注词性。
- Tokenize:返回词语在原文中的位置。
2. 在 Ubuntu 上安装 Jieba
在 Ubuntu 环境下,通过 Python 的包管理工具 pip
安装 Jieba。
2.1 更新系统包
sudo apt update
sudo apt upgrade -y
2.2 安装 Python 和 pip
如果尚未安装 Python 和 pip,请运行以下命令:
sudo apt install python3 python3-pip -y
验证安装版本:
python3 --version
pip3 --version
2.3 创建虚拟环境(可选)
使用虚拟环境可以避免包冲突:
sudo apt install python3-venv -y
python3 -m venv jieba_env
source jieba_env/bin/activate
2.4 安装 Jieba
pip install jieba
验证安装:
python3 -c "import jieba; print(jieba.__version__)"
3. 快速上手
导入 Jieba
import jieba
示例文本
text = "我来到北京清华大学"
精确模式
seg_list = jieba.cut(text, cut_all=False)
print("精确模式:", "/".join(seg_list))
# 输出: 我/来到/北京/清华大学
全模式
seg_list = jieba.cut(text, cut_all=True)
print("全模式:", "/".join(seg_list))
# 输出: 我/来到/北京/清华/清华大学/华大/大学
搜索引擎模式
seg_list = jieba.cut_for_search(text)
print("搜索引擎模式:", "/".join(seg_list))
# 输出: 我/来到/北京/清华/华大/大学/清华大学
4. 分词模式详解
4.1 精确模式
精确模式是 Jieba 的默认模式,适合文本分析。
示例:
text = "他来到了网易杭研大厦"
seg_list = jieba.cut(text)
print("/".join(seg_list))
# 输出: 他/来到了/网易/杭研/大厦
4.2 全模式
全模式将句子中所有可能的词语都扫描出来。
示例:
seg_list = jieba.cut(text, cut_all=True)
print("/".join(seg_list))
# 输出: 他/来到/了/网易/杭研/杭研大厦/大厦
4.3 搜索引擎模式
在精确模式的基础上,对长词再次切分,适合用于搜索引擎分词。
示例:
seg_list = jieba.cut_for_search(text)
print("/".join(seg_list))
# 输出: 他/来到了/网易/杭研/大厦/杭研大厦
5. 自定义词典
Jieba 默认自带了一个中文词典,但在某些特定领域,可能需要添加一些专有名词。
5.1 加载自定义词典
方法一:使用自带接口加载词典
jieba.load_userdict('userdict.txt')
userdict.txt
文件每行一个词,格式为:
词语 频率 词性
示例:
云计算 100 n
大数据 100 n
机器学习 100 n
方法二:在初始化时指定词典
jieba.dt.tmp_dir = './'
jieba.dt.cache_file = 'jieba.cache'
5.2 动态添加和删除词语
添加新词
jieba.add_word('区块链')
jieba.add_word('人工智能', freq=2000, tag='n')
调整词频
jieba.suggest_freq('红掌', tune=True)
删除词语
jieba.del_word('自定义词')
6. 调节分词结果
6.1 调整词频
print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
# 输出: 如果/放到/post/中将/出错/。
jieba.suggest_freq(('中', '将'), True)
print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
# 输出: 如果/放到/post/中/将/出错/。
6.2 关键词提取
基于 TF-IDF 算法
import jieba.analyse
text = "我喜欢自然语言处理,因为它非常有趣。"
keywords = jieba.analyse.extract_tags(text, topK=5, withWeight=False)
print(keywords)
# 输出: ['自然语言处理', '喜欢', '有趣']
基于 TextRank 算法
keywords = jieba.analyse.textrank(text, topK=5, withWeight=False)
print(keywords)
# 输出: ['自然语言处理', '喜欢', '有趣']
7. 词性标注
import jieba.posseg as pseg
words = pseg.cut("我爱北京天安门")
for word, flag in words:
print(f'{word} {flag}')
# 输出:
# 我 r
# 爱 v
# 北京 ns
# 天安门 ns
常见词性标注:
n
名词v
动词a
形容词r
代词ns
地名nt
机构团体nr
人名
8. Tokenize:获取词语位置
8.1 默认模式
result = jieba.tokenize('永和服装饰品有限公司')
for tk in result:
print(f'词语: {tk[0]}, 起始位置: {tk[1]}, 结束位置: {tk[2]}')
# 输出:
# 词语: 永和, 起始位置: 0, 结束位置: 2
# 词语: 服装, 起始位置: 2, 结束位置: 4
# 词语: 饰品, 起始位置: 4, 结束位置: 6
# 词语: 有限公司, 起始位置: 6, 结束位置: 10
8.2 搜索模式
result = jieba.tokenize('永和服装饰品有限公司', mode='search')
for tk in result:
print(f'词语: {tk[0]}, 起始位置: {tk[1]}, 结束位置: {tk[2]}')
# 输出更细粒度的词语及位置
9. 并行分词
注意:jieba.enable_parallel()
在新版本中已不推荐使用,建议使用多进程加速。
使用多进程
import jieba
import multiprocessing
def cut_process(text):
return list(jieba.cut(text))
if __name__ == "__main__":
texts = ['我来到北京清华大学', '他来到了网易杭研大厦', '小明硕士毕业于中国科学院计算所']
pool = multiprocessing.Pool()
results = pool.map(cut_process, texts)
pool.close()
pool.join()
for res in results:
print('/'.join(res))
10. 性能优化
10.1 预加载词典
在分词前预先加载词典,避免在分词过程中频繁加载。
jieba.initialize()
10.2 使用缓存机制
对于重复的文本,可以使用缓存机制减少重复分词。
11. 集成其他库
11.1 与 Pandas 集成
import jieba
import pandas as pd
data = {'text': ['我来到北京清华大学', '他来到了网易杭研大厦', '小明硕士毕业于中国科学院计算所']}
df = pd.DataFrame(data)
df['cut_text'] = df['text'].apply(lambda x: ' '.join(jieba.cut(x)))
print(df)
11.2 与 Numpy、Scikit-learn 集成
示例:文本特征提取
from sklearn.feature_extraction.text import CountVectorizer
import jieba
texts = ['我来到北京清华大学', '他来到了网易杭研大厦', '小明硕士毕业于中国科学院计算所']
corpus = [' '.join(jieba.cut(text)) for text in texts]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names_out())
print(X.toarray())
12. 常见问题及解决方法
问题1:分词结果不准确
解决方案:
- 检查是否需要添加自定义词典。
- 通过
jieba.suggest_freq()
调整词频。
问题2:分词速度慢
解决方案:
- 使用多进程加速分词。
- 预加载词典,避免重复加载。
问题3:编码错误
解决方案:
- 确保源文件和终端使用相同的编码(建议 UTF-8)。
- 在文件读写时指定编码:
open('file.txt', 'r', encoding='utf-8')
13. 参考资料
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 JackLee
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果