文章目录
- 一、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百度自然语言处理词法分析工具 自然语言处理-汉语词性对照表-词性编码与名称对应关系
评论前必须登录!
注册