中文分词
Project description
fenci
中文分词模块:继承了jieba分词的基本算法逻辑,进行了全方位的代码优化,还额外提供了HMM算法的训练功能支持。
设计
数据存储格式
不使用marshal,这并不规范,也不使用pickle,在某些情况下确实使用pickle是必要的,但至少在这里数据格式还没必要上pickle。而是使用更通用和更安全的json数据存储格式。
模型数据就存放在 \AppData\Local\Temp
里面的 fenci.cache
,其就是一个json文件。
读写速度模型文件未建立需要1秒多,模型文件建立正常读写文件需要0.3秒多,值得一提的是本程序经过优化只要你一直调用 s=Segment()
同一对象,则读取模型只会读取一次,也就是后面多次cut则前面的0.3秒加载时间几乎可以忽略笔记。
USAGE
lcut or cut
from fenci.segment import Segment
segment = Segment()
res = segment.lcut("这是一段测试文字。")
load_userdict
from fenci.segment import Segment
s = Segment()
s.load_userdict('tests/test_dict.txt')
training
指定root和regexp来搜索指定文件夹下的文本,其中的文本格式如下:
’ 我 扔 了 两颗 手榴弹 , 他 一下子 出 溜 下去 。
即该分词的地方空格即可。
def training(self, root=None, regexp=None):
"""
根据已经分好词的内容来训练
:param root:
:param regexp:
:return:
"""
注意training之后词典库还只是on-fly模式,要保存到模型需要调用方法save_model
training_hmm
训练HMM模型,如果设置update_dict=True,则语料库的词语数据也会刷入进来。
def training_hmm(self, root=None, regexp=None, update_dict=False):
save_model
所有on-fly的词库都导入到模型里面
def save_model(self, save_hmm=False):
add_word
def add_word(self, word, freq=1):
tokenize 和 lcut
给nltk调用提供的接口
hmm_segment
默认内部构建的hmm分词器
self.hmm_segment = HMMSegment(traning_root=traning_root,
traning_regexp=traning_regexp,
cache_file=self.cache_file)
HMMSegment
training
指定root和regexp来搜索指定文件夹下的文本,其中的文本格式如下:
’ 我 扔 了 两颗 手榴弹 , 他 一下子 出 溜 下去 。
即该分词的地方空格即可。
def training(self, root=None, regexp=None, training_mode='update'):
提供了两种训练模式 update 和 replace 。
update模式将在原有HMM训练数据基础上继续训练,注意训练之后的模型数据仍是on-fly的。保存需要调用save_model
方法。
save_model
将hmm_segment分词器的模型保存下来。
self.hmm_segment.save_model()
TODO
- 编写测试案例
- 编写文档
- 分词评分评估
CHANGELOG
0.2.2
使用简化版本的simple_nltk。
0.2.0
彻底脱离原jieba分词项目结构,整体重新设计。
0.1.2
加入HMM训练,重新训练数据,原字典数据较小。
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
File details
Details for the file fenci-0.3.0.tar.gz
.
File metadata
- Download URL: fenci-0.3.0.tar.gz
- Upload date:
- Size: 714.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.0 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ff42985dc00a8e83cd9c13bf1ca68a4f4e5673e77b3a2c97d1ae148327fc0693 |
|
MD5 | 0366e6bfee3cd6ac6a4307fe89b25243 |
|
BLAKE2b-256 | 726881c51807c960b95b3224071c5e7a8063621c7c940786265bb2e821dec766 |
File details
Details for the file fenci-0.3.0-py3.10.egg
.
File metadata
- Download URL: fenci-0.3.0-py3.10.egg
- Upload date:
- Size: 731.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.0 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9c9c7e3d05c18da69d54689712e93c753c008ed2809ed3b4f71eaa928b90a8d3 |
|
MD5 | ea5611e4e1b989c01a190e2db76b80cf |
|
BLAKE2b-256 | 15832871447fde3b8eef1ec436738ccc03c9d8dc50498336ba89f1b2b3fbbf2f |
File details
Details for the file fenci-0.3.0-py3-none-any.whl
.
File metadata
- Download URL: fenci-0.3.0-py3-none-any.whl
- Upload date:
- Size: 710.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.0 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e92db954a20a72d01725fe4139c9f29c574d31e667cbe453e6672856b951b5bd |
|
MD5 | b1d0514fb05f07a4c625a0afd9a468a6 |
|
BLAKE2b-256 | 2de0583376b373f5954dd2fe0ed67a3f2923feab549c8f5cd5ab81244963e92d |