【发布时间】:2017-08-31 21:15:01
【问题描述】:
假设我有一个大字符串和一组子字符串,它们在连接时等于大字符串(差异很小)。
例如(注意字符串之间的细微差别):
large_str = "hello, this is a long string, that may be made up of multiple
substrings that approximately match the original string"
sub_strs = ["hello, ths is a lng strin", ", that ay be mad up of multiple",
"subsrings tat aproimately ", "match the orginal strng"]
如何最好地对齐字符串以从原始large_str 生成一组新的子字符串?例如:
["hello, this is a long string", ", that may be made up of multiple",
"substrings that approximately ", "match the original string"]
其他信息
其用例是从 PDF 文档中提取的文本的现有分页符中查找原始文本的分页符。从 PDF 中提取的文本经过 OCR 处理,与原始文本相比有小错误,但原始文本没有分页符。目标是准确地对原文进行分页,避免 PDF 文本的 OCR 错误。
【问题讨论】:
-
这可能是一项复杂的任务。至少我不知道有任何简单的方法来比较字符串的各个部分。您可以使用百分比比较字符串的各个部分,通过将每个字符与 large_str 的一部分进行比较来证明准确性,并查看有多少字符连续匹配
-
复杂的拆分大字符串以比较各个子字符串。但如果你设法做到这一点,你可以使用 Levenshtein 距离来比较它们。见en.wikipedia.org/wiki/Levenshtein_distance
-
我能想到的一种方法是基于页面分割算法(也称为自动换行问题)。通常,对于页面分割,我们定义了一个函数来计算分割文本的成本。但是该算法中的该功能基于文本中出现的空格数。我认为我们可以采用类似的方法,但不是在空格的基础上定义拆分函数,而是可以根据字符串的相似性与空格相结合来设计它。这可能是开始并有效构建解决方案的方法之一。
标签: python algorithm levenshtein-distance fuzzy-comparison lcs