纯C++的Python阅读器(由Python库或Python Python扩展创建)。
DAWG-Python的Python项目详细描述
曙光Python
这个纯python包提供对文件的只读访问 由dawgdic c++库和DAWGpython程序包创建。
此包无法创建DAWG。它与由 {a3} c++库或DAWG python扩展模块。主要目的 dawg的python是提供对dawg的访问,而不需要编译 分机。它在pypy下也相当快(见基准)。
安装
pip安装dawg python
用法
dawg python的目标是与api和二进制兼容 在可能的情况下使用DAWG。
首先,必须使用DAWG模块创建dawg:
import dawg d = dawg.DAWG(data) d.save('words.dawg')
然后这个dawg可以在不需要c扩展的情况下加载:
import dawg_python d = dawg_python.DAWG().load('words.dawg')
详细用法请参阅DAWG文档。一些特点 (像构造函数参数或save方法)是有意的 不支持。
基准
基准测试结果(100k个Unicode单词,整数值(单词长度), Pypy 1.9,MacBook Air i5 1.8 GHz):
dict __getitem__ (hits): 11.090M ops/sec DAWG __getitem__ (hits): not supported BytesDAWG __getitem__ (hits): 0.493M ops/sec RecordDAWG __getitem__ (hits): 0.376M ops/sec dict get() (hits): 10.127M ops/sec DAWG get() (hits): not supported BytesDAWG get() (hits): 0.481M ops/sec RecordDAWG get() (hits): 0.402M ops/sec dict get() (misses): 14.885M ops/sec DAWG get() (misses): not supported BytesDAWG get() (misses): 1.259M ops/sec RecordDAWG get() (misses): 1.337M ops/sec dict __contains__ (hits): 11.100M ops/sec DAWG __contains__ (hits): 1.317M ops/sec BytesDAWG __contains__ (hits): 1.107M ops/sec RecordDAWG __contains__ (hits): 1.095M ops/sec dict __contains__ (misses): 10.567M ops/sec DAWG __contains__ (misses): 1.902M ops/sec BytesDAWG __contains__ (misses): 1.873M ops/sec RecordDAWG __contains__ (misses): 1.862M ops/sec dict items(): 44.401 ops/sec DAWG items(): not supported BytesDAWG items(): 3.226 ops/sec RecordDAWG items(): 2.987 ops/sec dict keys(): 426.250 ops/sec DAWG keys(): not supported BytesDAWG keys(): 6.050 ops/sec RecordDAWG keys(): 6.363 ops/sec DAWG.prefixes (hits): 0.756M ops/sec DAWG.prefixes (mixed): 1.965M ops/sec DAWG.prefixes (misses): 1.773M ops/sec RecordDAWG.keys(prefix="xxx"), avg_len(res)==415: 1.429K ops/sec RecordDAWG.keys(prefix="xxxxx"), avg_len(res)==17: 36.994K ops/sec RecordDAWG.keys(prefix="xxxxxxxx"), avg_len(res)==3: 121.897K ops/sec RecordDAWG.keys(prefix="xxxxx..xx"), avg_len(res)==1.4: 265.015K ops/sec RecordDAWG.keys(prefix="xxx"), NON_EXISTING: 2450.898K ops/sec
根据cpython的预测,速度会慢50倍。 dawg python的内存消耗应该与DAWG相同。
贡献
在github进行开发:https://github.com/kmike/DAWG-Python 问题跟踪器:https://github.com/kmike/DAWG-Python/issues
请随意提交想法、错误或请求。
运行测试和基准
确保tox已安装并运行
$ tox
从源签出。测试应该在Python2.6、2.7、3.2、3.3下通过, 3.4和pypy>;=1.9。
要运行基准测试,请键入
$ tox -c bench.ini -e pypy
这在pypy下运行基准测试(在cpython下大约慢50倍)。
许可证
这个软件包是根据麻省理工学院的许可证授权的。
更改
0.7.2(2015-04-18)
- 轻微加速;
- 不再维护Bitbucket镜像。
0.7.1(2014-06-05)
- 切换到setuptools;
- 上载轮子tp pypi;
- 检查Python3.4兼容性。
0.7(2013-10-13)
实现了intdawg和intcompletiondawg。
0.6(2013-03-23)
在内部使用较少共享的状态。这将修复线程安全漏洞 使iterkeys/iteritems重新生效。
0.5.1(2013-03-01)
内部调整:内存使用减少;速度更快, 有点慢。
0.5(2012-10-08)
更新存储方案以匹配dawg==0.5。这使得 BytesDAWG和RecordDAWG项的字母顺序。
为了读取用创建的BytesDAWG或RecordDAWG。 dawg<;0.5的版本使用payload_separator构造函数参数:
>>> BytesDAWG(payload_separator=b'\xff').load('old.dawg')
0.3.1(2012-10-01)
有空道具的虫子是固定的。
0.3(2012-09-26)
- iterkeys和iteritems方法。
0.2(2012-09-24)
prefixes支持。
0.1(2012-09-20)
初次发布。