使用edit(levenshtein)距离进行序列对齐的轻量级、超快速库。
edlib的Python项目详细描述
使用edit(levenshtein)距离进行序列对齐的轻量级、超快速库。
edlib.align("hello","world")
EdLIB实际上是一个C/C++库,这个包是Python的包装器。 Python代码库的主要API与C/C++相同,所以请务必查看更多的代码示例、API的详细信息和Edlib的工作原理。
功能
- 计算编辑距离。
- 它可以找到最佳对齐路径(说明如何将第一个序列转换为第二个序列)。
- 它可以只找到对齐路径的开始和/或结束位置-当速度比拥有精确的对齐路径更重要时,它会很有用。
- 支持多对齐方法:全局(nw)、前缀(shw)和中缀(hw),每种方法都适用于不同的场景。
- 您可以extend character equality definition,使您能够使用通配符、不区分大小写的对齐方式或使用退化核苷酸。
- 它可以很容易地处理小的或非常大的序列,即使在查找对齐路径时也是如此。
- super fast感谢myers的位向量算法。
注意:字母表的大小必须为<;=256(这意味着查询和目标必须同时具有<;=256个唯一值)。
安装
pip install edlib
API
edlib有两个函数,align()和getniceallignment():
align(query,target,[mode],[task],[k])
getNiceAlignment(alignResutl,query,target)
要了解更多信息,请在python解释器中键入help(edlib.align)
。
用法
importedlibresult=edlib.align("elephant","telephone")print(result["editDistance"])# 3print(result["alphabetLength"])# 8print(result["locations"])# [(None, 8)]print(result["cigar"])# Noneresult=edlib.align("ACTG","CACTRT",mode="HW",task="path",additionalEqualities=[("R","A"),("R","G")])print(result["editDistance"])# 0print(result["alphabetLength"])# 5print(result["locations"])# [(1, 4)]print(result["cigar"])# "4="result=edlib.align("elephant","telephone",task="path")## users must use 'task="path"'niceAlign=edlib.getNiceAlignment(result,"elephant","telephone")print(niceAlign['query_aligned'])# "-elephant"print(niceAlign['matched_aligned'])# "-|||||.|."print(niceAlign['target_aligned'])# "telephone"
基准
我在2017年2月7日运行了一个简单的基准测试(在python3上使用timeit)来了解edlib与其他python库的比较:editdistance和python-Levenshtein。
作为输入数据,我使用了不同长度的DNA序列对,其中每对有大约90%的相似性。
#1: query length: 30, target length: 30 edlib.align(query, target): 1.88µs editdistance.eval(query, target): 1.26µs Levenshtein.distance(query, target): 0.43µs #2: query length: 100, target length: 100 edlib.align(query, target): 3.64µs editdistance.eval(query, target): 3.86µs Levenshtein.distance(query, target): 14.1µs #3: query length: 1000, target length: 1000 edlib.align(query, target): 0.047ms editdistance.eval(query, target): 5.4ms Levenshtein.distance(query, target): 1.9ms #4: query length: 10000, target length: 10000 edlib.align(query, target): 0.0021s editdistance.eval(query, target): 0.56s Levenshtein.distance(query, target): 0.2s #5: query length: 50000, target length: 50000 edlib.align(query, target): 0.031s editdistance.eval(query, target): 13.8s Levenshtein.distance(query, target): 5.0s
更多
查看C/C++ Edlib docs了解有关edlib的更多信息!
开发
运行make build
将扩展模块生成为.so文件。然后,您可以通过从python解释器import edlib
导入并运行edlib.align(...)
来测试它(您必须位于.so生成的目录中)。这对于开发过程中的测试很有用。
运行make sdist
创建一个源发行版,但不发布它-它是dist/中的tarball,将在publish上上载到pip。在发布之前,使用此项检查tarball是否结构良好并包含所有需要的文件。
测试它的好方法是运行sudo pip install dist/edlib-*.tar.gz
,它将尝试从中安装edlib,就像pip在发布时那样。
运行make publish
创建源发行版并将其发布到pypi。使用此项发布包的新版本。
如果需要,请确保在发布之前在setup.py中提升版本。
make clean
删除所有生成的文件。