比较序列的实用程序

Distance的Python项目详细描述


这个包为计算任意序列之间的相似性提供了帮助。包括Levenshtein、Hamming、Jaccard和Sorensen Distance,以及一些奖金。所有的距离计算都是用纯python实现的,而且大多数都是用c实现的。

安装

如果您不想或不需要使用C扩展名,只需解压缩存档文件并以根用户身份运行即可:

# python setup.py install

用于工作的C扩展,需要Python源文件和C编译器(通常是Windows上的微软Visual C++ 2010,以及在MAC和Linux上的GCC)。在类似Debian的系统上,您可以使用以下命令获取所有这些信息:

# apt-get install gcc pythonX.X-dev

其中x.x是python版本的编号。

然后您应该键入:

# python setup.py install –with-c

注意使用–with-c开关。

用法

本模块的一个常见用例是比较单个单词的相似性:

>>> distance.levenshtein("lenvestein", "levenshtein")
3
>>> distance.hamming("hamming", "hamning")
1

如果您的语言中的声音和字形之间没有一对一的映射,或者您不想比较字形,而是比较音节或音素,则可以传入字符元组:

>>> t1 = ("de", "ci", "si", "ve")
>>> t2 = ("de", "ri", "si", "ve")
>>> distance.levenshtein(t1, t2)
1

比较字符串列表对于计算句子、段落等之间的相似性也很有用:

>>> sent1 = ['the', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']
>>> sent2 = ['the', 'lazy', 'fox', 'jumps', 'over', 'the', 'crazy', 'dog']
>>> distance.levenshtein(sent1, sent2)
3

hamming距离和levenshtein距离可以被标准化,这样就可以有意义地比较几种距离测量的结果。Levenshtein有两种策略:要么以序列间最短比对的长度作为因子,要么以较长比对的长度作为因子。示例用法:

>>> distance.hamming("fat", "cat", normalized=True)
0.3333333333333333
>>> distance.nlevenshtein("abc", "acd", method=1)  # shortest alignment
0.6666666666666666
>>> distance.nlevenshtein("abc", "acd", method=2)  # longest alignment
0.5

jaccardsorensen返回每个默认值的规范化值:

>>> distance.sorensen("decide", "resize")
0.5555555555555556
>>> distance.jaccard("decide", "resize")
0.7142857142857143

至于奖金,有一个fast_comp函数,它计算两个字符串之间的距离,最大值为2。如果字符串之间的距离大于该值,则返回-1。这个函数的使用是有限的,但另一方面它比levenshtein快得多。还有一个lcsubstrings函数,可以用来查找两个序列中最长的公共子串。

最后,提供了两个方便的迭代器ilevenshteinifast廑comp,它们用于从长序列列表中筛选接近参考序列的序列。它们都返回一系列元组(距离、序列)。示例:

>>> tokens = ["fo", "bar", "foob", "foo", "fooba", "foobar"]
>>> sorted(distance.ifast_comp("foo", tokens))
[(0, 'foo'), (1, 'fo'), (1, 'foob'), (2, 'fooba')]
>>> sorted(distance.ilevenshtein("foo", tokens, max_dist=1))
[(0, 'foo'), (1, 'fo'), (1, 'foob')]

ifast_comp效率特别高,可以处理100万个代币而没有问题。

有关更多信息,请参阅函数文档(帮助(funcname))。

玩得开心!

更改日志

2013年11月20日: *切换回使用不推荐使用的python unicode api。好消息是 C扩展与Python2.7+兼容,Unicode字符串上的距离计算现在是 快多了。 *添加了c版本的lcsubstrings。 *增加了计算归一化levenshtein距离的新方法。 *增加了一些测试。

2013年11月12日: 扩展了fast_comp(以前是quick_levenshtein)以便它可以处理转置。 固定变量椎间盘,有时会产生奇怪的结果。

2013年11月10日: 添加了quick_levenshtein和iquick_levenshtein。

2013年11月5日: 添加了Sorensen和Jaccard度量,修复了Levenshtein中的内存问题。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在服务器启动时,有问题的类告诉我什么?   java将日志记录信息存储到oracle数据库   更新后,java在Windows中还原旧Jenkins作业   考虑到夏令时,java使用iCal4j创建循环   java如何使用Spring和RESTAPI在数据库中上传图像?   在引用java源代码时将Fantom项目编译成jar?   java使用GSON解析不带数组名的JSON字符串   java Eclipse插件功能?   Socket如何在java中创建SocketClosedHandler?   缓存Java是否只更改缓存中修改的字段的值?   java RepositoryException:org。sql2o。Sql2oException:数据库错误:查询未返回任何结果   javaaxis2导致javax。xml。流动XMLStreamException:元素文本内容不能包含开始元素   java In-Play框架,对模型的更改如何以及何时与DB模式同步?   java如何在通过JSTL调用函数时传递参数