# 微型中文分词器
一个微型的中文分词器,目前提供了以下几种分词算法:
1. 按照词语的频率(概率)来利用构建 DAG(有向无环图)来分词,使用 `Trie Tree` 构建前缀字典树
2. 使用隐马尔可夫模型(Hidden Markov Model,HMM)来分词
3. 融合 DAG 和 HMM 两种分词模型的结果,按照分词粒度最大化的原则进行融合得到的模型
4. 正向最大匹配法
5. 反向最大匹配法
6. 双向最大匹配法
7. 基于 CRF (Conditional Random Field, 条件随机场) 的分词方法
8. UnicodeScriptTokenizer: 当 Unicode Script 发生变化时拆分
9. EmsembelTokenizer: 按照 Unicode Script 切分文本,然后按照每个文本段的 Unicode Script 调用不同的分词器进行处理。
# 特点 / 特色
* 面向教育:可以导出 `graphml` 格式的图结构文件,辅助学习者理解算法过程
* 良好的分词性能:由于使用类似 `结巴分词` 的算法,具有良好的分词性能
* 具有良好的扩展性:使用和 `结巴分词` 一样的字典文件,可以轻松添加自定义字典
* 自定义能力强
* 提供工具和脚本帮助用户训练自己的分词模型而不是使用内建的模型
# 演示
## 在线演示
### 在线的 Jupyter Notebook
点击右侧图标,即可访问
### Online Web demo
@ [http://nlp_demo.xiaoquankong.ai/](http://nlp_demo.xiaoquankong.ai/)
## 离线演示
### DAG 分词
代码:
```python
import MicroTokenizer
tokens = MicroTokenizer.cut("知识就是力量")
print(tokens)
```
输出:
```python
['知识', '就是', '力量']
```
#### 加载用户字典
```python
import MicroTokenizer
tokens = MicroTokenizer.cut("「杭研」正确应该不会被切开", HMM=False)
print(tokens)
# loading user's custom dictionary file
MicroTokenizer.load_userdict('user_dict.txt')
tokens = MicroTokenizer.cut("「杭研」正确应该不会被切开", HMM=False)
print(tokens)
```
`user_dict.txt` 的内容为:
```text
杭研 10
```
输出:
```text
['「', '杭', '研', '」', '正确', '应该', '不会', '被', '切开']
['「', '杭研', '」', '正确', '应该', '不会', '被', '切开']
```
### 有向无环图效果演示
![](https://www.writebug.com/myres/static/uploads/2022/1/7/617e6df0a37d7cd5c4d2303e3162d89e.writebug)
#### 备注
* `<s>` 和 `</s>` 是图的起始和结束节点,不是实际要分词的文本
* 图中 Edge 上标注的是 `log(下一个节点的概率的倒数)`
* 最短路径已经用 `深绿色` 作了标记
### 更多 DAG 分词的演示
#### "王小明在北京的清华大学读书"
![](https://www.writebug.com/myres/static/uploads/2022/1/7/84cf34dad57692d71787f5bc77372166.writebug)
### HMM 分词
因 HMM 模型单独分词性能不佳, 一般情况下只用于和其他模型的融合, 故不在此提供示例, 需要演示者,可在 在线的 Jupyter Notebook 找到使用的例子.
### DAG+HMM 分词
将前两个模型的结果融合,融合了 DAG 稳定的构词能力和 HMM 的新词发现能力,缺点是速度较慢
### 正向最大匹配法
具体介绍,请阅读博文 [构建中文分词器 - 正向最大匹配法](http://blog.xiaoquankong.ai/%E6%9E%84%E5%BB%BA%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8D%E5%99%A8-%E6%AD%A3%E5%90%91%E6%9C%80%E5%A4%A7%E5%8C%B9%E9%85%8D%E6%B3%95/)
### 反向最大匹配法
具体介绍,请阅读博文 [构建中文分词器 - 反向最大匹配法](http://blog.xiaoquankong.ai/%E6%9E%84%E5%BB%BA%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8D%E5%99%A8-%E5%8F%8D%E5%90%91%E6%9C%80%E5%A4%A7%E5%8C%B9%E9%85%8D%E6%B3%95/)
### 双向最大匹配法
具体介绍,请阅读博文 [构建中文分词器 - 双向最大匹配法](http://blog.xiaoquankong.ai/%E6%9E%84%E5%BB%BA%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8D%E5%99%A8-%E5%8F%8C%E5%90%91%E6%9C%80%E5%A4%A7%E5%8C%B9%E9%85%8D%E6%B3%95/)
### 基于 CRF 的分词
TODO
# 依赖
只在 python 3.6+ 环境测试过,其他环境不做兼容性保障。
# 安装
```bash
pip install MicroTokenizer
```
# 如何使用
## 分词
```python
from MicroTokenizer import (
hmm_tokenizer,
crf_tokenizer,
dag_tokenizer,
max_match_forward_tokenizer,
max_match_backward_tokenizer,
max_match_bidirectional_tokenizer,
)
input_text = "王小明在北京的清华大学读书。"
# 使用相关的算法来分词。
result = hmm_tokenizer.segment(input_text)
print(result)
result = crf_tokenizer.segment(input_text)
print(result)
result = max_match_forward_tokenizer.segment(input_text)
print(result)
result = max_match_backward_tokenizer.segment(input_text)
print(result)
result = max_match_bidirectional_tokenizer.segment(input_text)
print(result)
result = dag_tokenizer.segment(input_text)
print(result)
```
输出:
```python
['小', '明', '在', '北京', '的', '清华大学', '读书', '。']
```
## Unicode Script 分词
```python
from MicroTokenizer.tokenizers.unicode_script.tokenizer import UnicodeScriptTokenizer
tokenizer = UnicodeScriptTokenizer()
tokens = tokenizer.segment("2021年时我在Korea的汉城听了的にほんご这首歌。")
print([(token.text, token.script) for token in tokens])
```
输出:
```python
[('2021', 'Common'), ('年时我在', 'Han'), ('Korea', 'Latin'), ('的汉城听了', 'Han'), ('', 'Hangul'), ('的', 'Han'), ('にほんご', 'Hiragana'), ('这首歌', 'Han'), ('。', 'Common')]
```
## Ensemble 分词
### 区分语言进行处理
```python
from MicroTokenizer.tokenizers.ensemble.tokenizer import EnsembleTokenizer
from MicroTokenizer import dag_tokenizer
tokenizer = EnsembleTokenizer({"Han": dag_tokenizer})
tokens = tokenizer.segment("2021年时我在Korea的汉城听了的にほんご这首歌。")
print(tokens)
```
输出:
```python
['2021', '年', '时', '我', '在', 'Korea', '的', '汉城', '听', '了', '', '的', 'にほんご', '这', '首', '歌', '。']
```
### [实验性质] 基于流水线的分词方案
可以稳定的提取数字和电子邮箱地址。可以区分中文英文采用不同的分词方案(英文默认按照空格切分)。
```python
from MicroTokenizer.experimental import dag_tokenizer
tokens = dag_tokenizer.segment("我的电话是15555555555,邮箱是xxx@yy.com,工作单位是 Tokyo University。")
print(tokens)
```
输出:
```python
['我', '的', '电话', '是', '15555555555', ',', '邮箱', '是', 'xxx@yy.com', ',', '工作', '单位', '是', 'Tokyo', 'University', '。']
```
## 导出 GraphML 文件
针对基于 DAG 的算法,用户可以导出 GraphML 文件,研究其工作原理。
```python
from MicroTokenizer import dag_tokenizer
dag_tokenizer.graph_builder.build_graph("知识就是力量")
dag_tokenizer.graph_builder.write_graphml("output.graphml")
```
NOTE: 导出后的 `graphml` 文件可以使用 [Cytoscape](http://www.cytoscape.org/) 进行浏览和渲染
## 如何训练自己的模型
MicroTokenizer 也提供了工具帮助你训练模型。
### 代码训练
```python
from MicroTokenizer.training.train import train
# you can use multiple files as training data, it is a list
train(["./corpus.txt"], "./model_data")
```
## 如何使用自己的模型
```python
from MicroTokenizer import MaxMatchBackwardTokenizer
from MicroTokenizer import MaxMatchForwardTokenizer
from MicroTokenizer import MaxMatchBidirectionalTokenizer
from MicroTokenizer import DAGTokenizer
from MicroTokenizer import HMMTokenizer
from MicroTokenizer import CRFTokenizer
model_dir = "path/to/your/model"
input_text = "你的待分词文本"
max_match_backward_tokenizer = MaxMatchBackwardTokenizer.load(model_dir)
tokens = max_match_backward_tokenizer.segment(input_text)
max_match_forward_tokenizer = MaxMatchForwardTokenizer.load(model_dir)
tokens = max_match_forward_tokenizer.segment(input_text)
max_match_bidirectional_tokenizer = MaxMatchBidirectionalTokenizer.load(model_dir)
tokens = max_match_bidirectional_tokenizer.segment(input_text)
dag_tokenizer = DAGTokenizer.load
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
一个微型的中文分词器,目前提供了以下几种分词算法: 按照词语的频率(概率)来利用构建 DAG(有向无环图)来分词,使用 Trie Tree 构建前缀字典树 使用隐马尔可夫模型(Hidden Markov Model,HMM)来分词 融合 DAG 和 HMM 两种分词模型的结果,按照分词粒度最大化的原则进行融合得到的模型 正向最大匹配法 反向最大匹配法 双向最大匹配法 基于 CRF (Conditional Random Field, 条件随机场) 的分词方法 UnicodeScriptTokenizer: 当 Unicode Script 发生变化时拆分 EmsembelTokenizer: 按照 Unicode Script 切分文本,然后按照每个文本段的 Unicode Script 调用不同的分词器进行处理。
资源推荐
资源详情
资源评论
收起资源包目录
基于Python实现一个微型的中文分词器【100012305】 (148个子文件)
train_via_command.bash 42B
make.bat 776B
setup.cfg 514B
model.crfsuite 44.96MB
model.crfsuite 20.94MB
joint_model.cys 724KB
graphy.cys 696KB
graph.cys 28KB
.editorconfig 292B
.envrc 55B
.gitignore 1KB
output.graphml 6KB
output.graphml 4KB
output.graphml 4KB
index.html 72B
MANIFEST.in 262B
tox.ini 646B
MicroTokenizer.ipynb 5KB
LICENSE 1KB
Makefile 3KB
Makefile 615B
README.md 9KB
README.tpl.md 6KB
tricky_case.md 933B
ISSUE_TEMPLATE.md 338B
TODO.md 188B
README.md 134B
README.md 25B
.nojekyll 0B
B.pickle 277KB
B.pickle 252KB
vocabulary.pickle 59KB
vocabulary.pickle 55KB
A.pickle 221B
A.pickle 221B
feature_func_list.pickle 90B
feature_func_list.pickle 90B
graphy.png 414KB
DAG_of_xiaomin.png 370KB
DAG_of_knowledge_is_power.png 170KB
script_data.py 72KB
pipeline.py 7KB
conf.py 5KB
non_recursive_algorithm.py 4KB
trainer.py 4KB
BMES.py 3KB
merge_solutions.py 3KB
setup.py 3KB
tokenizer.py 3KB
bidirectional.py 2KB
train.py 2KB
hmm_tokenizer.py 2KB
trie_algorithm.py 2KB
tokenizer.py 2KB
backward.py 2KB
forward.py 2KB
__init__.py 2KB
__init__.py 2KB
test_train.py 2KB
dag_tokenizer.py 2KB
graph_builder.py 2KB
dictionary.py 2KB
test_bidirectional.py 1KB
test_backward.py 1KB
test_forward.py 1KB
test_dag_tokenizer.py 1KB
test_use_own_model.py 1KB
generate_script_data.py 1KB
render_readme.py 1KB
use_own_model.py 1KB
test_tokenizer.py 931B
test_hmm_tokenizer.py 930B
main.py 797B
test_tokenizer_with_legacy.py 792B
train_dictionary.py 780B
base_tokenizer.py 739B
tokenizer.py 720B
tokenize_with_legacy.py 687B
test_pipeline.py 468B
conftest.py 437B
BMES.py 422B
test_tokenizer.py 377B
test_use_user_dict.py 365B
test_tokenizer.py 355B
use_user_dict.py 303B
tokenize_with_ensemble.py 289B
test_train_via_command.py 286B
tokenize_with_unicode_script.py 284B
train.py 277B
token.py 230B
whitespace_split_tokenizer.py 229B
test_export_graphml.py 193B
tokenize_with_pipeline.py 187B
main.py 167B
export_graphml.py 164B
train_via_code.py 149B
test_tokenize_with_DAG.py 138B
test_simple_usage.py 116B
tokenize_with_DAG.py 109B
test_train_via_code.py 101B
共 148 条
- 1
- 2
资源评论
神仙别闹
- 粉丝: 2672
- 资源: 7640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于STM32使用HAL库实现USB组合设备之多路CDC源码+说明文档.zip
- 金融贸易项目springboot
- mybatis动态sqlSQL 映射 XML 文件是所有 sql 语句
- 基于基于STM32的智能家居系统源码+qt上位机源码.zip
- 深圳房地产资源数据报告
- 基于stm32的智能门禁系统源码+设计文档+演示视频.zip
- cef + chromium 完整源码支持h265和h264
- 基于SpringBoot的API管理平台源代码+数据库,以项目的形式管理API文档,可以进行API的编辑、测试、Mock等操作
- protobuf 3.11版本,静态编译
- 2023NOC创客智慧编程赛项真题图形化-选拔赛(有解析)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功