云计算百科
云计算领域专业知识百科平台

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 jieba

text = "我爱自然语言处理技术"

# 精确模式(默认)
print("精确模式:", "/ ".join(jieba.cut(text)))
# 精确模式: 我/ 爱/ 自然语言/ 处理/ 技术

# 全模式
print("全模式:", "/ ".join(jieba.cut(text, cut_all=True)))
# 全模式: 我/ 爱/ 自然/ 自然语言/ 语言/ 处理/ 技术

# 搜索引擎模式
print("搜索引擎模式:", "/ ".join(jieba.cut_for_search(text)))
# 搜索引擎模式: 我/ 爱/ 自然/ 语言/ 自然语言/ 处理/ 技术

模式对比

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

自定义词典

词典文件格式

词语 [词频] [词性]

示例

冠状动脉 2000 n
血小板减少症 1800 n
MRI检查 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 pseg

words = 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:1
word:爱 start:1 end:2
word:自然语言 start:2 end:6
word:处理 start:6 end:8
word:技术 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 jiagu

text = "深度学习是人工智能的核心技术"
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 jiagu

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

文本摘要

import jiagu

with 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 jiagu

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

文本聚类

import jiagu

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

text = "这个电影真的很棒!剧情跌宕起伏,引人入胜,我很喜欢。"
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.han
print("简体字:", 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 thulac
thu = 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百度自然语言处理词法分析工具 自然语言处理-汉语词性对照表-词性编码与名称对应关系

赞(0)
未经允许不得转载:网硕互联帮助中心 » Python常用的5种中文分词工具
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!