Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从两个字符串中获取后缀/前缀更正,以便在python中将源字符串转换为目标字符串_Python_String_Difflib_Lcs - Fatal编程技术网

从两个字符串中获取后缀/前缀更正,以便在python中将源字符串转换为目标字符串

从两个字符串中获取后缀/前缀更正,以便在python中将源字符串转换为目标字符串,python,string,difflib,lcs,Python,String,Difflib,Lcs,我需要将源字符串转换为目标字符串,并将其表示为源字符串的操作(D、a、TYPE)(删除、添加、前缀\后缀),将这些操作应用于源字符串的后缀或源字符串的前缀时,将其转换为目标字符串 例如: 下面的代码确实得到了后缀,但也得到了所有其他匹配项,但我只需要这些后缀,而且它没有按照我的要求输出正确的格式 from difflib import SequenceMatcher a = "ACTIVITY" b = "ACTIVITIES" s = SequenceMatcher(None, a, b)

我需要将源字符串转换为目标字符串,并将其表示为源字符串的操作(D、a、TYPE)(删除、添加、前缀\后缀),将这些操作应用于源字符串的后缀或源字符串的前缀时,将其转换为目标字符串

例如:

下面的代码确实得到了后缀,但也得到了所有其他匹配项,但我只需要这些后缀,而且它没有按照我的要求输出正确的格式

from difflib import SequenceMatcher
a = "ACTIVITY"
b = "ACTIVITIES"


s = SequenceMatcher(None, a, b)
for tag, i1, i2, j1, j2 in s.get_opcodes():
   print ("%7s a[%d:%d] (%s) b[%d:%d] (%s)" %
          (tag, i1, i2, a[i1:i2], j1, j2, b[j1:j2]))
此外,如果没有足够的后缀/前缀匹配,我不需要输出任何更正,例如:字符串like-ough,beyond应该不会产生匹配,这可能是从以下方面收集的:

difflib.SequenceMatcher(None,'especially','particularly').ratio()

我想你可能把事情复杂化了一点。在python中,不使用
difflib
就可以很容易地找到两个字符串的共享后缀。有关示例,请参见。特别是,这在
os
模块中作为
os.path.commonprefix
实现。使用此方法,我们可以找到共享前缀的两个字符串的后缀差异,或者找到共享后缀的两个字符串的前缀差异(第二种方法仅通过反转字符串并使用第一种方法)

下面是一个例子(当然可以整理一下):


这不需要difflib,因为可以通过查找公共前缀或后缀并将其从字符串中删除来完成。考虑:

>>> from os.path import commonprefix
>>> c = commonprefix(['activities', 'activity'])
>>> c
'activit'
>>> [v[len(c):] for v in ['activities', 'activity']]
['ies', 'y']
由于我没有
commonuffix
函数,我只需反转字符串,然后应用
commonprefix
函数:

>>> c = commonprefix(['could'[::-1], 'would'[::-1]])
>>> c
'dluo'
>>> [v[len(c):][::-1] for v in ['could'[::-1], 'would'[::-1]]]
['c', 'w']
from os.path import commonprefix

def suffix_prefix(a, b):

   pre = commonprefix([a, b])
   suf = commonprefix([a[::-1], b[::-1]])
   if len(pre) > len(suf):
       return tuple(v[len(pre):] for v in (a, b)) + ('suffix',)
   else:
       return tuple(v[len(suf):][::-1] for v in (a[::-1], b[::-1])) + ('prefix',)

print suffix_prefix('activities', 'activity')
print suffix_prefix('could', 'would')
print suffix_prefix('solutions', 'solution')
要将其合并到函数中,请执行以下操作:

>>> c = commonprefix(['could'[::-1], 'would'[::-1]])
>>> c
'dluo'
>>> [v[len(c):][::-1] for v in ['could'[::-1], 'would'[::-1]]]
['c', 'w']
from os.path import commonprefix

def suffix_prefix(a, b):

   pre = commonprefix([a, b])
   suf = commonprefix([a[::-1], b[::-1]])
   if len(pre) > len(suf):
       return tuple(v[len(pre):] for v in (a, b)) + ('suffix',)
   else:
       return tuple(v[len(suf):][::-1] for v in (a[::-1], b[::-1])) + ('prefix',)

print suffix_prefix('activities', 'activity')
print suffix_prefix('could', 'would')
print suffix_prefix('solutions', 'solution')
印刷品:

('ies', 'y', 'suffix')
('c', 'w', 'prefix')
('s', '', 'suffix')

我将把字符串的格式留给你

我实际上想要(“can”,“c”,“w”))作为给定的输出。谢谢,问题要求将两个输入字符串转换为将源转换为目标的校正输出(d,e,type)