比较序列的实用程序

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如何使用比较器对列表进行排序以正确排序空值?   javajavax。由于javax,邮件“535.7.3身份验证失败”。邮件升级(v1.3.1至v1.5.2)   java将arraylist流到固定的二维数组中并打印?   RecyclerView适配器上的java上下文   java如何为此Twitter API为KafkaProducer建立连接   java Spring安全性重写WebSecurity配置适配器的配置(AuthenticationManagerBuilder)是否会影响全局应用程序?   线程“awteventque0”NullPointerException中的java异常   if条件中的null值和null指针异常java   java树集<Object>允许相同类型的多个对象   java定义类;我认不出   字符串java replaceAll()   JAVAutil。scanner(Java)读取文件时如何跳过空格?   java在swing中关闭flash屏幕   java在Wildfly 16中的应用程序中加载pk12文件   有没有工具可以自动生成屏幕抓取的Java代码   创建意图时,java方法getParcelableExtra()返回null   将数据从java传递到jsp   java Android Studio |永久保存布局