当前位置: 首页 > news >正文

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 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 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: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 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非语素字
nhfvu能愿动词u助词w标点符号
nhsa形容词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.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百度自然语言处理词法分析工具
自然语言处理-汉语词性对照表-词性编码与名称对应关系

http://www.dtcms.com/a/327248.html

相关文章:

  • 力扣 hot100 Day71
  • Claude Code,Gemini CLI,Trae-agent, Qwen Code 使用对比及感受
  • 【数据分享】2020-2022年我国乡镇的逐日最高气温数据(Shp/Excel格式)
  • ABAC 权限策略扩展
  • 在达梦数据库中使用group by 命令报错问题
  • MCU中的液晶显示屏LCD(Liquid Crystal Display)控制器
  • Python 正则表达式 re.findall()
  • special topic 11 (1)
  • 【Linux系统】详解Ext2,文件系统
  • 打印流水号条形码
  • 标注工具组件功能文档
  • 如何将新建的Anaconda虚拟环境导入Juputer内核中?
  • Spring Boot项目通过RestTemplate调用三方接口详细教程
  • 系统架构设计师备考之架构设计实践知识
  • 完整反作弊系统架构(技术讲解)
  • 如何解决Unexpected token ‘<’, “<!doctype “… is not valid JSON 报错问题
  • MyBatis持久层实现
  • 人工智能概念:常见的大模型微调方法
  • Web学习笔记5
  • Java设计模式-快速入门
  • LeetCode算法领域经典入门题目之“Two Sum”问题
  • 1.4.1 副驾驶(Copilot)模式:让人工智能大模型成为你的指导和建议者
  • 从零开始之stm32之CAN通信
  • 聚合搜索中的设计模式
  • 鲲鹏arm服务器安装neo4j社区版,实现图书库自然语言检索基础
  • leetcode49.字母异位词分组
  • NLP—词向量转换评论学习项目分析真实案例
  • 本地(macOS)和服务器时间不同步导致的 Bug排查及解决
  • linux 执行ls命令文件夹显示全白色
  • 微前端架构:原理、场景与实践案例