“结巴 3”中文分词:做最好的 Modern Python 3 中文分词组件
Project description
jieba3
“结巴 3”中文分词:做最好的 Modern Python 3 中文分词组件
与 jieba 的区别
jieba3 是 jieba 分词模块的 Modern Python 3 重构版本
- 删除 Python 2 兼容代码,支持 type hints 等 Modern Python 3 特性
- 重构分词模块,在纯 Python 实现前提下,提高约 20% 的性能,且与 jieba 分词结果对齐
- 暂不支持除分词外的其他 jieba 功能,如关键词提取、词性标注等
安装说明
jieba3 仅支持 Python 3.10+ 版本
pip install jieba3
算法
- 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
- 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
- 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法
主要功能
构建 jieba3.jieba3
分词器实例,支持以下参数:
model: Literal["base", "small", "large"] = "base"
- 分词模型选项,可选值为
small
、base
、large
,默认为base
base
模型是 jieba 提供的默认模型small
模型是 jieba 提供的占用内存较小的模型large
模型是 jieba 支持繁体分词更好的模型
- 分词模型选项,可选值为
use_hmm: bool = True
- 是否开启 HMM 新词发现,可选值为
True
、False
,默认为True
- 是否开启 HMM 新词发现,可选值为
示例如下:
import jieba3
tokenizer = jieba3.jieba3() # 默认为 base 模型,开启 HMM 新词发现
tokenizer = jieba3.jieba3(model="small") # 使用 small 模型
tokenizer = jieba3.jieba3(model="base") # 使用 base 模型
tokenizer = jieba3.jieba3(model="large") # 使用 large 模型
tokenizer = jieba3.jieba3(use_hmm=False) # 关闭 HMM 新词发现
tokenizer = jieba3.jieba3(use_hmm=True) # 开启 HMM 新词发现
文档模式
试图将句子最精确地切开,适合文档分析
当使用默认的
base
模型时,jieba3 文档模式与 jieba 精确模式的分词结果完全一致
import jieba3
import jieba
# 开启 HMM 新词发现
tokenizer = jieba3.jieba3()
tokenizer.cut_text("小明硕士毕业于中国科学院计算所")
# ["小明", "硕士", "毕业", "于", "中国科学院", "计算所"]
jieba.lcut("小明硕士毕业于中国科学院计算所")
# ["小明", "硕士", "毕业", "于", "中国科学院", "计算所"]
# 关闭 HMM 新词发现
tokenizer = jieba3.jieba3(use_hmm=False)
tokenizer.cut_text("小明硕士毕业于中国科学院计算所")
# ["小", "明", "硕士", "毕业", "于", "中国科学院", "计算所"]
jieba.lcut("小明硕士毕业于中国科学院计算所", HMM=False)
# ["小", "明", "硕士", "毕业", "于", "中国科学院", "计算所"]
查询模式
在文档模式的基础上,对长词再次切分,提高召回率,适合查询分析
当使用默认的
base
模型时,jieba3 查询模式与 jieba 搜索引擎模式的分词结果完全一致
import jieba3
import jieba
# 开启 HMM 新词发现
tokenizer = jieba3.jieba3()
tokenizer.cut_query("小明硕士毕业于中国科学院计算所")
# ["小明", "硕士", "毕业", "于", "中国", "科学", "学院", "科学院", "中国科学院", "计算", "计算所"]
jieba.lcut_for_search("小明硕士毕业于中国科学院计算所")
# ["小明", "硕士", "毕业", "于", "中国", "科学", "学院", "科学院", "中国科学院", "计算", "计算所"]
# 关闭 HMM 新词发现
tokenizer = jieba3.jieba3(use_hmm=False)
tokenizer.cut_query("小明硕士毕业于中国科学院计算所")
# ["小", "明", "硕士", "毕业", "于", "中国", "科学", "学院", "科学院", "中国科学院", "计算", "计算所"]
jieba.lcut_for_search("小明硕士毕业于中国科学院计算所", HMM=False)
# ["小", "明", "硕士", "毕业", "于", "中国", "科学", "学院", "科学院", "中国科学院", "计算", "计算所"]
性能测试
jieba3 均使用默认的 base
模型,与 jieba 的默认模型对比
测试环境:MacBookPro18,3,macOS 14.5,Apple M1 Pro @ 3.20 GHz,16 GB
SIGHAN Bakeoff 2005 测试集(逐行分词)
as_test.utf8
(繁体)
模式 | jieba 耗时 | jieba 速度 | jieba3 耗时 | jieba3 速度 | 性能提升 |
---|---|---|---|---|---|
文档模式(关闭 HMM) | 0.26 秒 | 2.28 MB/s | 0.20 秒 | 2.94 MB/s | 22% |
文档模式(开启 HMM) | 0.60 秒 | 0.98 MB/s | 0.48 秒 | 1.23 MB/s | 20% |
查询模式(关闭 HMM) | 0.27 秒 | 2.17 MB/s | 0.21 秒 | 2.79 MB/s | 22% |
查询模式(开启 HMM) | 0.63 秒 | 0.93 MB/s | 0.51 秒 | 1.15 MB/s | 20% |
cityu_test.utf8
(繁体)
模式 | jieba 耗时 | jieba 速度 | jieba3 耗时 | jieba3 速度 | 性能提升 |
---|---|---|---|---|---|
文档模式(关闭 HMM) | 0.09 秒 | 2.22 MB/s | 0.07 秒 | 2.87 MB/s | 23% |
文档模式(开启 HMM) | 0.21 秒 | 0.93 MB/s | 0.17 秒 | 1.16 MB/s | 20% |
查询模式(关闭 HMM) | 0.09 秒 | 2.11 MB/s | 0.07 秒 | 2.71 MB/s | 22% |
查询模式(开启 HMM) | 0.21 秒 | 0.90 MB/s | 0.17 秒 | 1.12 MB/s | 20% |
msr_test.utf8
(简体)
模式 | jieba 耗时 | jieba 速度 | jieba3 耗时 | jieba3 速度 | 性能提升 |
---|---|---|---|---|---|
文档模式(关闭 HMM) | 0.26 秒 | 2.06 MB/s | 0.20 秒 | 2.69 MB/s | 24% |
文档模式(开启 HMM) | 0.30 秒 | 1.79 MB/s | 0.24 秒 | 2.25 MB/s | 20% |
查询模式(关闭 HMM) | 0.28 秒 | 1.91 MB/s | 0.22 秒 | 2.47 MB/s | 23% |
查询模式(开启 HMM) | 0.32 秒 | 1.67 MB/s | 0.26 秒 | 2.08 MB/s | 20% |
pku_test.utf8
(简体)
模式 | jieba 耗时 | jieba 速度 | jieba3 耗时 | jieba3 速度 | 性能提升 |
---|---|---|---|---|---|
文档模式(关闭 HMM) | 0.25 秒 | 1.91 MB/s | 0.20 秒 | 2.48 MB/s | 23% |
文档模式(开启 HMM) | 0.30 秒 | 1.64 MB/s | 0.24 秒 | 2.04 MB/s | 20% |
查询模式(关闭 HMM) | 0.26 秒 | 1.85 MB/s | 0.20 秒 | 2.41 MB/s | 23% |
查询模式(开启 HMM) | 0.33 秒 | 1.48 MB/s | 0.27 秒 | 1.82 MB/s | 19% |
《围城》(全文分词)
模式 | jieba 耗时 | jieba 速度 | jieba3 耗时 | jieba3 速度 | 性能提升 |
---|---|---|---|---|---|
文档模式(关闭 HMM) | 0.35 秒 | 1.85 MB/s | 0.28 秒 | 2.32 MB/s | 20% |
文档模式(开启 HMM) | 0.51 秒 | 1.25 MB/s | 0.42 秒 | 1.52 MB/s | 18% |
查询模式(关闭 HMM) | 0.33 秒 | 1.93 MB/s | 0.26 秒 | 2.45 MB/s | 21% |
查询模式(开启 HMM) | 0.55 秒 | 1.17 MB/s | 0.45 秒 | 1.42 MB/s | 18% |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
jieba3-1.0.2.tar.gz
(6.9 MB
view details)
Built Distribution
File details
Details for the file jieba3-1.0.2.tar.gz
.
File metadata
- Download URL: jieba3-1.0.2.tar.gz
- Upload date:
- Size: 6.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 80054b147115ac6a09f50d54d68abcf55f2cb8d435ab71128da40effd0f4e2cb |
|
MD5 | f33e9d5eced410c7567c449e5942d077 |
|
BLAKE2b-256 | 23678eaae19dd87120dc8a7ba6dff5b24676bd6b92b7570954283edf2bfb5696 |
File details
Details for the file jieba3-1.0.2-py3-none-any.whl
.
File metadata
- Download URL: jieba3-1.0.2-py3-none-any.whl
- Upload date:
- Size: 6.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b6f33845d8dc32a7a55db95611efef7de5d42ba9964716d26f8d22d20cee9785 |
|
MD5 | 78cf69b18ea5d7d3bf5fabfe43a69ac4 |
|
BLAKE2b-256 | 665d83622ef6020c83766b4d0c9675722c7b6ed00a1a37289c4f6e707c695d8f |