使用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库的比较:editdistancepython-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删除所有生成的文件。

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

推荐PyPI第三方库


热门话题
如何表示1。。Java中的n关系   java在安卓应用程序中添加polaris viewer   Java字符串::replaceAll仅替换第一个出现(可能不正确的正则表达式)   java Tomcat/JBoss部署后脚本   如何在Heroku Java应用程序中运行发出web请求的周期进程   java如何以纳秒为单位证明算法的时间   Solaris上的java自定义ListCellRenderer(使用jre5)   java试图为我的播放器类测试块实现播放器重力(RealtutsGml平台教程)   c#消耗一个。带有java的net web服务未显示预期结果   java在KOI8\R中检索html   基于java图形的搜索与基于随机的搜索   java如何检查安卓设备上的可用空间?在SD卡上?