python中的字符串比较,但不是Levenshtein距离(我认为)

python中的字符串比较,但不是Levenshtein距离(我认为),python,compare,using,levenshtein-distance,Python,Compare,Using,Levenshtein Distance,我在阅读的一篇论文中发现了一个粗略的字符串比较,如下所示: 他们使用的公式如下(摘自论文,稍作改动,使其更具一般性和可读性) 由于作者的描述不是很清楚,我试着用自己的话解释更多(使用作者的例子) 例如,对于2个序列ABCDE和BCEFA,有两个可能的图 图1)将B与B、C与C、E与E连接起来 图2)将A与A连接起来 当我连接其他三个(图1)时,我不能连接A和A,因为这将是交叉线(想象你在B-B、C-C和E-E之间画线);也就是说,墨线A-A将穿过连接B-B、C-C和E-E的线。 所以这两个序列产

我在阅读的一篇论文中发现了一个粗略的字符串比较,如下所示:

他们使用的公式如下(摘自论文,稍作改动,使其更具一般性和可读性) 由于作者的描述不是很清楚,我试着用自己的话解释更多(使用作者的例子)

例如,对于2个序列ABCDE和BCEFA,有两个可能的图

图1)将B与B、C与C、E与E连接起来

图2)将A与A连接起来

当我连接其他三个(图1)时,我不能连接A和A,因为这将是交叉线(想象你在B-B、C-C和E-E之间画线);也就是说,墨线A-A将穿过连接B-B、C-C和E-E的线。 所以这两个序列产生了两个可能的图;一个有3个连接(BB、CC和EE),另一个只有一个(AA),然后我计算分数d,如下式所示

因此,需要定义两个对象之间的相似度 我们计算它们之间的距离d。调整 两个五边形字符串,我们查找它们之间的所有标识 字符,无论这些字符位于何处。如果每个身份都是 由两个五元字符串之间的链接表示,我们定义了一个图 这双。我们称这个图的任何部分为配置

接下来,我们保留所有没有字符的配置 交叉配对(我在上面的示例中解释了其含义,即相同字符之间的链接没有交叉,只保留那些图形)。 然后,将每一项作为参数的函数进行评估 与图形相关的字符数p,用于图形的移位Δi 对应对与连接字符间的间隙δij 每根五弦。选择最小值作为特征值和参考值 被称为距离d:d Min(50–10p+Δi+Δij),尽管非常粗糙, 这一衡量标准与定性的观点基本一致 引导估计。例如,
abcde
abcfg
是20,而
abcde
abfcg
之间的是23=(50-30+1+2)

我对如何着手做这件事感到困惑。任何帮助我的建议都将不胜感激

我尝试了Levenshtein和用于蛋白质序列比较的简单序列比对 该文件的链接为:

我找不到关于第一作者Alain Figureau和我给MA Soto的电子邮件的任何信息(截至今天)


谢谢

好吧,这绝对不是莱文施坦:

>>> from nltk import metrics
>>> metrics.distance.edit_distance('abcde','abcfg')
2
>>> metrics.distance.edit_distance('abcde','abfcg')
3
>>> help(metrics.distance.edit_distance)
Help on function edit_distance in module nltk.metrics.distance:

edit_distance(s1, s2)
    Calculate the Levenshtein edit-distance between two strings.
    The edit distance is the number of characters that need to be
    substituted, inserted, or deleted, to transform s1 into s2.  For
    example, transforming "rain" to "shine" requires three steps,
    consisting of two substitutions and one insertion:
    "rain" -> "sain" -> "shin" -> "shine".  These operations could have
    been done in other orders, but at least three steps are needed.

    @param s1, s2: The strings to be analysed
    @type s1: C{string}
    @type s2: C{string}
    @rtype C{int}

就在您引用的文本块之后,引用了来自同一作者的上一篇论文:。我认为,如果没有对距离的解释(我不在工作,因此无法访问完整的文档),那么值得研究一下


否则,你也可以尝试直接联系作者:Alain Figureau似乎是一位老派的法国研究员,没有任何联系(没有网页,没有电子邮件,没有“社交网络”…),所以我建议尝试联系M.A.Soto,他的电子邮件在论文的最后给出。我想他们会给你你想要的答案:实验过程必须非常清晰,才能重复,这是研究中科学方法的一部分。

你可能有点概括了这一点,但这仍然过于具体,而且断章取义。至少提供一个到论文的链接,这样我们就可以从阅读中获得上下文信息。你需要修改文章中的公式,使其包含+符号
d=Min(50-10p+Δi+Δij)
23=(50-30+1+2)
听着,虽然我不是蛋白质生物学家,但作为科学家,我对这类东西很在行。而且,如果你不用简单的英语重写算法,你就不可能得到很多帮助。原作者对英语的掌握并不出色,这使得该领域之外的人很难准确地知道正在进行的计算。(例如,“保留”配置意味着什么?)