跳转到主要内容

DAWG(DAFSAs)的纯Python读取器,由dawgdic C++库或DAWG Python扩展创建。

项目描述

DAWG-Python

https://travis-ci.org/kmike/DAWG-Python.png?branch=master https://coveralls.io/repos/kmike/DAWG-Python/badge.png?branch=master

此纯Python软件包提供了对由dawgdic C++库和DAWG Python软件包创建的文件只读访问。

此软件包无法创建DAWG。它与由dawgdic C++库或DAWG Python扩展模块构建的DAWG一起工作。DAWG-Python的主要目的是在不要求编译扩展的情况下提供对DAWG的访问。它在PyPy下也相当快(请参阅基准测试)。

安装

pip install DAWG-Python

用法

当可能时,DAWG-Python的目标是与DAWG具有API和二进制兼容性。

首先,您必须使用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相同。

当前限制

  • 此软件包无法创建DAWG;

  • DAWG的所有限制都适用。

欢迎贡献!

贡献

开发在github进行:[DAWG-Python](https://github.com/kmike/DAWG-Python) Issue跟踪器:[DAWG-Python issues](https://github.com/kmike/DAWG-Python/issues)

请随意提交想法、错误或Pull请求。

运行测试和基准测试

确保安装并运行tox

$ tox

从源代码检出。在python 2.6、2.7、3.2、3.3、3.4和PyPy >= 1.9下测试应该通过。

为了运行基准测试,输入

$ tox -c bench.ini -e pypy

这将在PyPy下运行基准测试(在CPython下大约慢50倍)。

作者 & 贡献者

算法来自Susumu Yata和贡献者编写的dawgdic C++库。

许可证

本软件包采用MIT许可证。

更改

0.7.2 (2015-04-18)

  • 轻微的速度提升;

  • bitbucket镜像不再维护。

0.7.1 (2014-06-05)

  • 切换到setuptools;

  • 上传wheel到pypi;

  • 检查Python 3.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项按字母顺序排列。

为了读取使用DAWG < 0.5版本创建的BytesDAWG或RecordDAWG,请使用payload_separator构造函数参数

>>> BytesDAWG(payload_separator=b'\xff').load('old.dawg')

0.3.1 (2012-10-01)

空DAWG的错误已修复。

0.3 (2012-09-26)

  • iterkeysiteritems方法。

0.2 (2012-09-24)

prefixes支持。

0.1 (2012-09-20)

初始发布。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源分布

DAWG-Python-0.7.2.tar.gz (9.0 kB 查看哈希值)

上传时间

构建分布

DAWG_Python-0.7.2-py2.py3-none-any.whl (11.7 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持