文章目录
本文介绍了五种常用的中文自然语言处理工具:jieba、jiagu、snownlp、thulac和LAC,重点讲解了它们的分词功能及其他核心特性。
- jieba:支持精确模式、全模式和搜索引擎模式三种分词方式,提供自定义词典、词性标注、关键词提取、词语位置定位等功能,适用于多种文本处理场景。
- jiagu:集成分词、词性标注、命名实体识别、情感分析、知识图谱关系抽取等功能,适合综合性NLP任务,如新词发现和文本聚类。
- snownlp:提供分词、情感分析、简繁转换、拼音转换、文本摘要等功能,适合简单的情感分析或文本转换需求。
- thulac:由清华大学开发,支持分词和词性标注,输出格式灵活,适合学术和研究用途。
- LAC:百度开发的词法分析工具,集成分词、词性标注、实体识别和词语重要性分析,支持自定义词典,适合需要实体识别和关键词语提取的场景。
每种工具各有侧重,可根据具体需求选择合适的工具。
一、jieba
jieba是最常用的中文分词工具之一。
1. 安装
2. 基本功能
三种分词模式
- 精确模式(默认):最常用的模式,优先输出最准确的切分结果
示例
import jiebatext = "我爱自然语言处理技术"# 精确模式(默认)print("精确模式:", "/ ".join(jieba.cut(text)))# 精确模式: 我/ 爱/ 自然语言/ 处理/ 技术# 全模式print("全模式:", "/ ".join(jieba.cut(text, cut_all=True)))# 全模式: 我/ 爱/ 自然/ 自然语言/ 语言/ 处理/ 技术# 搜索引擎模式print("搜索引擎模式:", "/ ".join(jieba.cut_for_search(text)))# 搜索引擎模式: 我/ 爱/ 自然/ 语言/ 自然语言/ 处理/ 技术
模式对比
自定义词典
词典文件格式
示例
冠状动脉 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)等有细分类型,特殊符号和未知词也有相应标注,能够较好地反映汉语词汇的语法特征和构词规律。
二、jiagu
jiagu是一个简单高效的中文自然语言处理工具,提供中文分词、词性标注、命名实体识别、情感分析、知识图谱关系抽取、关键词抽取、文本摘要、新词发现、情感分析、文本聚类等功能。
1. 安装
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的词性标注集相对简洁实用,名词有细致分类,动词区分普通动词和特殊动词类型,包含前后接成分等汉语特有词类,对非汉字内容也有专门标注。
三、snownlp
SnowNLP是一个用于处理中文文本的 Python 库,功能包括中文分词、情感分析、简繁转换、文本摘要、拼音转换等。
1. 安装
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. 安装
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. 安装
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的标注体系包含丰富的专有名词类别,动词和形容词有细分类型,实体识别标签与词性标签统一输出,对标点符号和非汉字内容也有专门处理。
相关链接
jieba-Python 中文分词组件NLPIR大数据语义增强分析平台的相关的文件Jiagu自然语言处理工具LAC百度自然语言处理词法分析工具自然语言处理-汉语词性对照表-词性编码与名称对应关系