-
Notifications
You must be signed in to change notification settings - Fork 6.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
不用Trie,减少内存加快速度;优化代码细节 #187
Conversation
@gumblex ,赞! |
@gumblex , 实测了一把,的确内存占用少很多,且速度有提升。 |
内存减少的真是太棒了 |
It's a good modified. |
nice |
great |
After python3.6 optimize the basic dict and python trie tree is actually based on dict, does trie tree in python3.6+ perform better or at least better than python2.+?? |
之前内存消耗较大是因为tril树的每个节点也是字典导致的字典嵌套字典吗 |
@gumblex 你好,想请教下,为什么要把前缀也存起来呢,不在字典的词语前缀,词频永远是0吧? |
这里是用了 set 来代替前坠树。 |
对于
get_DAG()
函数来说,用Trie数据结构,特别是在Python环境,内存使用量过大。经实验,可构造一个前缀集合解决问题。该集合储存词语及其前缀,如
set(['数', '数据', '数据结', '数据结构'])
。在句子中按字正向查找词语,在前缀列表中就继续查找,直到不在前缀列表中或超出句子范围。大约比原词库增加40%词条。该版本通过各项测试,与原版本分词结果相同。测试:一本5.7M的小说,用默认字典,64位Ubuntu,Python 2.7.6。
Trie:第一次加载2.8秒,缓存加载1.1秒;内存277.4MB,平均速率724kB/s
前缀字典:第一次加载2.1秒,缓存加载0.4秒;内存99.0MB,平均速率781kB/s
此方法解决纯Python中Trie空间效率低下的问题。
同时改善了一些代码的细节,遵循PEP8的格式,优化了几个逻辑判断。
加入了
__main__.py
,可直接使用python -m jieba
进行分词。若采纳,请适当修改版本号、修订历史、说明等。Python 3的适配稍后发布。