根据类似字符串数组纠正字符串中的错误

时间:2017-09-11 12:12:49

标签: text grouping fuzzy

有人可以指出如何执行此任务的正确方向: 我有很多带有这种桶的字符串数组:

  • 两年前有人这样做过
  • 两年前有人做过
  • 有人这样做了两年
  • 两年前的某些人
  • 两年前有人

我需要得到这个:两年前有人这样做

任何算法或库的链接都会很棒。这些字符串来自OCR,有时OCR在字母/单词中出错,但我有2-5种不同的字符串拼写。

更新 基于@alec_djinn的建议,我发现了可以创建"中位数"的python库。基于Levenshtein距离的字符串。 https://rawgit.com/ztane/python-Levenshtein/master/docs/Levenshtein.html#Levenshtein-median

1 个答案:

答案 0 :(得分:1)

您可以使用sequence alignment算法,然后在对齐的序列上找到consensus

有大量的文库和软件可用,但它们通常仅适用于生物序列(DNA,RNA,蛋白质)。一个用于通用字符串对齐的python库是https://pypi.python.org/pypi/alignment/

一旦序列对齐,您就可以使用以下(非常基本的)计算共识的方式。

def compute_consensus(sequences):
    consensus = ''
    for i in range(len(sequences[0])):
        char_count = Counter()
        for seq in sequences:
            char_count.update(seq[i])
        consensus += char_count.most_common()[0][0]

    return consensus.replace('-','') #assuming '-' represent deleted letters

其中sequences是对齐序列的列表。所有对齐的序列应具有相同的长度。