当前位置:首页>python>Python常用的5种中文分词工具

Python常用的5种中文分词工具

  • 2026-10-11 08:25:50
Python常用的5种中文分词工具

文章目录

  • 一、jieba
    • 1. 安装
    • 2. 基本功能
      • 三种分词模式
      • 自定义词典
      • 词性标注
      • 关键词提取
      • 返回词语位置
    • 3. 词性标注说明
  • 二、jiagu
    • 1. 安装
    • 2. 基本功能
      • 分词
      • 自定义词典
      • 词性标注
      • 命名实体识别
      • 关键词提取
      • 知识图谱关系抽取
      • 文本摘要
      • 新词发现
      • 情感分析
      • 文本聚类
    • 3. 词性标注说明
  • 三、snownlp
    • 1. 安装
    • 2. 基本功能
      • 分词
      • 词性标注
      • 拼音转换
      • 情感分析
      • 简繁转换
      • 关键字抽取
      • 摘要
  • 四、thulac
    • 1. 安装
    • 2. 基本功能
      • 分词
      • 词性标注
  • 五、lac
    • 1. 安装
    • 2. 基本功能
      • 分词
      • 词性标注与实体识别
      • 词语重要性
      • 自定义词典
    • 3. 词性和专名类别标签
  • 相关链接

本文介绍了五种常用的中文自然语言处理工具:jieba、jiagu、snownlp、thulac和LAC,重点讲解了它们的分词功能及其他核心特性。

  • jieba
    :支持精确模式、全模式和搜索引擎模式三种分词方式,提供自定义词典、词性标注、关键词提取、词语位置定位等功能,适用于多种文本处理场景。
  • jiagu
    :集成分词、词性标注、命名实体识别、情感分析、知识图谱关系抽取等功能,适合综合性NLP任务,如新词发现和文本聚类。
  • snownlp
    :提供分词、情感分析、简繁转换、拼音转换、文本摘要等功能,适合简单的情感分析或文本转换需求。
  • thulac
    :由清华大学开发,支持分词和词性标注,输出格式灵活,适合学术和研究用途。
  • LAC
    :百度开发的词法分析工具,集成分词、词性标注、实体识别和词语重要性分析,支持自定义词典,适合需要实体识别和关键词语提取的场景。

每种工具各有侧重,可根据具体需求选择合适的工具。

一、jieba

jieba是最常用的中文分词工具之一。

1. 安装

pip install jieba

2. 基本功能

三种分词模式

  • 精确模式(默认):最常用的模式,优先输出最准确的切分结果
  • 全模式:枚举所有可能的词语组合,输出所有成词情况
  • 搜索引擎模式:在精确模式基础上,对长词再次切分

示例

import jiebatext = "我爱自然语言处理技术"# 精确模式(默认)print("精确模式:", "/ ".join(jieba.cut(text)))# 精确模式: 我/ 爱/ 自然语言/ 处理/ 技术# 全模式print("全模式:", "/ ".join(jieba.cut(text, cut_all=True)))# 全模式: 我/ 爱/ 自然/ 自然语言/ 语言/ 处理/ 技术# 搜索引擎模式print("搜索引擎模式:", "/ ".join(jieba.cut_for_search(text)))# 搜索引擎模式: 我/ 爱/ 自然/ 语言/ 自然语言/ 处理/ 技术

模式对比

模式
切分粒度
速度
冗余度
典型应用场景
精确模式
最准确
中
快
文本分析、常规 NLP
全模式
所有可能组合
最快
高
新词发现、粗粒度统计
搜索引擎模式
适中(长词切分)
较慢
中
搜索索引、短文本召回

自定义词典

词典文件格式

词语 [词频] [词性]

示例

冠状动脉 2000 n血小板减少症 1800 nMRI检查 1500 n

说明 词频:可省略,默认值会使该词被分出(数值越高,词语被分出的概率越大)。 词性:可省略,用于词性标注(用于后续的词性标注任务,不影响分词结果)

示例

# 添加自定义词典# 文件格式:词语 词频(可选) 词性(可选)jieba.load_userdict("userdict.txt")  # 动态调整词典jieba.add_word("自然语言处理", freq=20000, tag='n')jieba.del_word("某个词")# 调整词频jieba.suggest_freq(("自然语言", "处理"), tune=True)

词性标注

import jieba.posseg as psegwords = pseg.cut(text)for word, flag in words:    print(f"{word}({flag})", end=" ")# 我(r) 爱(v) 自然语言(l) 处理(v) 技术(n)

关键词提取

原理 TF-IDF:评估词语的重要性,与词频成正比,与文档频率成反比 TextRank:基于PageRank的图排序算法,将文本构建为词语图

参数调整 topK:返回关键词数量 withWeight:是否返回权重值 allowPOS:允许的词性列表

选择 短文本优先使用TextRank 长文档优先使用TF-IDF

示例

from jieba import analyse# TF-IDF关键词提取# 可自定义IDF语料库# analyse.set_idf_path("idf.txt")  tfidf_result = analyse.extract_tags(text, topK=5, withWeight=True, allowPOS=('n', 'nr'))print('tfidf_result', tfidf_result)# tfidf_result [('技术', 4.71945717857)]# TextRank关键词提取textrank_result = analyse.textrank(text, topK=5, withWeight=True)print('textrank_result', textrank_result)# textrank_result [('技术', 1.0), ('处理', 0.9961264494011037)]

返回词语位置

tokenize方法返回词语及其在文本中的起止位置,对于需要定位词语在文本中位置的应用场景很有用,如高亮显示、文本标注等。

输出格式 word:词语内容 start:起始位置(从0开始) end:结束位置(Python风格的半开区间)

示例

result = jieba.tokenize(text)for tk in result:    print(f"word:{tk[0]} start:{tk[1]} end:{tk[2]}")

输出

word:我 start:0 end:1word:爱 start:1 end:2word:自然语言 start:2 end:6word:处理 start:6 end:8word:技术 start:8 end:10

3. 词性标注说明

jieba的词性标注集基于ICTCLAS/NLPIR的标注体系,语素标签(如Ag、Bg等)用于表示构词语素,常见词性如名词(n)、动词(v)、形容词(a)等有细分类型,特殊符号和未知词也有相应标注,能够较好地反映汉语词汇的语法特征和构词规律。

标签
含义
标签
含义
标签
含义
标签
含义
Ag
形语素
g
语素
ns
地名
u
助词
a
形容词
h
前接成分
nt
机构团体
Vg
动语素
ad
副形词
i
成语
nz
其它专名
v
动词
an
名形词
j
简略语
o
拟声词
vd
副动词
Bg
区别语素
k
后接成分
p
介词
vn
名动词
b
区别词
l
习用语
q
量词
w
标点符号
c
连词
Mg
数语素
r
代词
x
非语素字
Dg
副语素
m
数词
s
处所词
Yg
语气语素
d
副词
Ng
名语素
Tg
时间语素
y
语气词
e
叹词
n
名词
t
时间词
z
状态词
f
方位词
nr
人名
Ug
助语素
un
未知词

二、jiagu

jiagu是一个简单高效的中文自然语言处理工具,提供中文分词、词性标注、命名实体识别、情感分析、知识图谱关系抽取、关键词抽取、文本摘要、新词发现、情感分析、文本聚类等功能。

1. 安装

pip install -U jiagu

2. 基本功能

分词

import jiagutext = "深度学习是人工智能的核心技术"words = jiagu.seg(text)print(words)

自定义词典

Jiagu支持通过文件和代码两种方式添加自定义词典,提升特定领域的分词准确率。

# 加载自定义词典jiagu.load_userdict('userdict.dict')# jiagu.load_userdict(['汉服和服装'])

词性标注

Jiagu的词性标注采用通用的词性标记集。

pos = jiagu.pos(words)print(pos)

命名实体识别

Jiagu内置命名实体识别功能,可识别人名 (PER)、地名 (LOC)、机构名 (ORG)、其他专有名词 (MISC)。

ner = jiagu.ner(text)print(ner)

关键词提取

# 提取3个关键词keywords = jiagu.keywords(text, 3)  print(keywords)

知识图谱关系抽取

import jiagutext = '姚明1980年9月12日出生于上海市徐汇区,祖籍江苏省苏州市吴江区震泽镇,前中国职业篮球运动员,司职中锋,现任中职联公司董事长兼总经理。'knowledge = jiagu.knowledge(text)print(knowledge)

文本摘要

import jiaguwith open('input.txt', 'r', encoding='utf-8') as f:    text = f.read()# 摘要summarize = jiagu.summarize(text, 3)  print(summarize)

新词发现

import jiagu# 根据文本,利用信息熵做新词发现。jiagu.findword('input.txt', 'output.txt') 

情感分析

import jiagutext = '我不喜欢吃苹果。'sentiment = jiagu.sentiment(text)print(sentiment)

文本聚类

import jiagudocs = [    "苹果是一种常见的水果,富含维生素和膳食纤维",    "香蕉是热带水果,含有丰富的钾元素,有助于缓解疲劳",    "水果分类研究:浆果、核果和柑橘类水果的营养价值比较",    "如何挑选新鲜的水果?从颜色、气味和硬度三个方面教你选购技巧",    "芒果的栽培技术及病虫害防治方法分享",    "不同成熟度的水果在储存过程中糖分和酸度的变化研究",    "水果榨汁与直接食用的营养差异分析",    "进口水果与本地水果在价格和口感上的对比评测"]cluster = jiagu.text_cluster(docs)for group_id, values in cluster.items():    print(group_id, values)

3. 词性标注说明

jiagu的词性标注集相对简洁实用,名词有细致分类,动词区分普通动词和特殊动词类型,包含前后接成分等汉语特有词类,对非汉字内容也有专门标注。

标签
含义
标签
含义
标签
含义
标签
含义
n
普通名词
ni
机构名
q
量词
j
缩略语
nt
时间名词
nz
其他专名
d
副词
h
前接成分
nd
方位名词
v
动词
r
代词
k
后接成分
nl
处所名词
vd
趋向动词
p
介词
g
语素字
nh
人名
vl
联系动词
c
连词
x
非语素字
nhf
姓
vu
能愿动词
u
助词
w
标点符号
nhs
名
a
形容词
e
叹词
ws
非汉字字符串
ns
地名
f
区别词
o
拟声词
wu
其他未知的符号
nn
族名
m
数词
i
习用语

三、snownlp

SnowNLP是一个用于处理中文文本的 Python 库,功能包括中文分词、情感分析、简繁转换、文本摘要、拼音转换等。

1. 安装

pip install snownlp

2. 基本功能

分词

from snownlp import SnowNLPtext = "这个电影真的很棒!剧情跌宕起伏,引人入胜,我很喜欢。"s = SnowNLP(text)print("分词:", list(s.words))

词性标注

snownlp的词性标注功能基于其分词结果,标注集相对简单,适合不需要复杂语法分析的应用场景。

print("词性标注:", list(s.tags))

拼音转换

print("拼音:", list(s.pinyin))

情感分析

# 0-1之间,越接近1表示越积极print("情感分数:", s.sentiments)  

简繁转换

text='學習程式設計讓我的生活更豐富多彩's = SnowNLP(text)traditional = s.hanprint("简体字:", traditional)# 简体字: 学习程式设计让我的生活更丰富多彩

关键字抽取

关键词抽取基于TF-IDF算法,返回权重最高的若干个词语,适用于快速获取文本主题。

print("关键词:", s.keywords(3))

摘要

print("摘要:", s.summary(3))

四、thulac

THULAC由清华大学自然语言处理与社会人文计算实验室研制。

1. 安装

pip install thulac

2. 基本功能

分词

import thulac# 默认模式thu = thulac.thulac()text = "我爱北京天安门"# 分词result = thu.cut(text)print(result)# 仅分词thu = thulac.thulac(seg_only=True)print(thu.cut(text))

词性标注

thulac的词性标注功能支持返回元组或拼接字符串两种输出格式,方便不同场景下的使用。

import thulacthu = thulac.thulac()text = "清华大学自然语言处理实验室"seg_result = thu.cut(text)print(seg_result)# [['清华大学', 'ni'], ['自然', 'n'], ['语言', 'n'], ['处理', 'v'], ['实验室', 'n']]seg_result = thu.cut(text, text=True).split()print(seg_result)# ['清华大学_ni', '自然_n', '语言_n', '处理_v', '实验室_n']

五、lac

百度自然语言处理部的词法分析工具。

1. 安装

pip install LAC

2. 基本功能

分词

from LAC import LAC# 初始化模型(默认会下载模型文件)lac = LAC(mode='seg') # 分词text = "百度是一家高科技公司"result = lac.run(text)print(result)  # ['百度', '是', '一家', '高科技', '公司']# 批量样本输入texts = ["百度是一家高科技公司", "阿里巴巴是一家高科技公司", "腾讯是一家高科技公司"]results = lac.run(texts)print(results)

词性标注与实体识别

百度LAC将词性标注和实体识别功能集成在一起,能同时输出词语的词性标签和实体类型标签(如人名、地名等)。

# 装载LAC模型lac = LAC(mode='lac')# 单个样本输入result = lac.run(text)print(result)# [['百度', '是', '一家', '高科技', '公司'], ['ORG', 'v', 'm', 'n', 'n']]

词语重要性

词语重要性分析功能可以识别文本中的关键词语,数值越高表示词语在文本中越重要。

# 词语重要性lac = LAC(mode='rank')result = lac.run(text)print(result)# [['百度', '是', '一家', '高科技', '公司'], ['ORG', 'v', 'm', 'n', 'n'], [3, 0, 2, 3, 1]]

自定义词典

# 装载自定义词典,sep参数表示词典文件采用的分隔符,为None时默认使用空格或制表符'\t'lac.load_customization('custom.txt', sep=None)# 使用自定义词典进行分词result = lac.run(text)

3. 词性和专名类别标签

LAC的标注体系包含丰富的专有名词类别,动词和形容词有细分类型,实体识别标签与词性标签统一输出,对标点符号和非汉字内容也有专门处理。

标签
含义
标签
含义
标签
含义
标签
含义
n
普通名词
f
方位名词
s
处所名词
nw
作品名
nz
其他专名
v
普通动词
vd
动副词
vn
名动词
a
形容词
ad
副形词
an
名形词
d
副词
m
数量词
q
量词
r
代词
p
介词
c
连词
u
助词
xc
其他虚词
w
标点符号
PER
人名
LOC
地名
ORG
机构名
TIME
时间

相关链接

jieba-Python 中文分词组件NLPIR大数据语义增强分析平台的相关的文件Jiagu自然语言处理工具LAC百度自然语言处理词法分析工具自然语言处理-汉语词性对照表-词性编码与名称对应关系

最新文章

随机文章