【问题标题】:contentbased String Matching基于内容的字符串匹配
【发布时间】:2015-02-16 09:43:26
【问题描述】:

我尝试比较两个文本文件并想知道它们的相等程度。必须考虑单词的顺序。

例如:

文本_1:

Lorem ipsum dolor sit amet, consectetuer 
adipiscing elit. Aenean commodo 
ligula eget dolor. Aenean massa. 

文本_2:

Lorem ipsum sit amet, consictetuer 
adipiscing elit. Aenean dolor commodo 
ligvla eget dolor. massa. 

我找到了很多解决方案来逐行比较两个文本文件,但是如果有任何区别,它们会在一行中给出不匹配的结果。就像在示例中一样,所有行都会有所不同,我没有得到任何匹配项。

我需要一些算法来逐字比较文件。应该看到,一行中的单词是相等的并且出现的顺序相同,但有时可能是缺少单词,添加或几个字符不匹配。

因此,如果缺少一个单词,算法不应创建后续错误(例如在示例中:在 text_2 中缺少“dolor”,因此如果我在一个数组中逐字比较文本,我会得到后续错误几乎是文本的其余部分)

我预期的解决方案应该给我:

  • 在同一上下文中的两个文本中出现的单词列表。 [Lorem ipsum sit amet,adipiscing 精英。 Aenean commodo eget dolor。马萨诸塞州]
  • 第二个文本中遗漏的单词列表。 [consectetuer, ligula, Aenean]
  • 在第二个文本中添加的单词列表。 [consictetuer, ligvla]
  • 两个文本中的单词列表,但位置不同 [dolor]
  • (可选)识别只有几个字符不同的单词 [ligula, ligvla]

目标是计算匹配的量化等级,例如 80% 匹配。我还不知道具体怎么计算。但是主要的问题是如果缺少或添加了某些单词,则在一行中获取单词的匹配项[例如在两个文本的第一行中匹配“sit”“amet”。]

我开始用 java 编程,但由于更好地处理正则表达式,我改用 Perl。

感谢您的帮助。

【问题讨论】:

标签: file compare string-matching


【解决方案1】:

也可以试试wdiff 特别是-s 选项


您可以尝试调整 Meld 算法的某些部分以使用单词而不是行作为标记,但这项任务几乎没有强大的通用解决方案 - 这就是我们经常看到手动合并的原因。

例如one two three three two one ~ one two - 你怎么知道编辑后留下了哪个“二”实例?或者,也许,删除后只剩下最后一个“一个”,然后在末尾添加“两个”?差别越大,问题就越大。但是您的特定数据限制和需求可以使这非常可行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多