解析文本并返回相似之处

时间:2009-03-13 12:36:48

标签: algorithm parsing

假设我有几个网址,我会从每个网址返回基本名称,如此;

http://www.test.com/the.code.r00

将返回

the.code.r00

我有几个基本名称,我从几个URL中提取出来

the.code.r00
the.code.r01
..
...
the.code.r12

以及我从其他网址获得以下基本名称

the.matrix.r00
the.matrix.r01
..
...
the.matrix.r14

我想知道是否有已知的算法经过测试并证明可以返回

the.code.r
the.matrix.r

解析我上面列出的基本名称后。

另外,如果相反,有一些* nix工具可以做同样的超级工具。

注意,格式并不总是如上所述,否则我可以做一个简单的substr。这些数字并不总是列在字符串中的某个特定位置。其他一些例子;

the.code.part01.rar
the.code.001
..
....

我可以实现自己的算法来做到这一点但是如果没有一些繁重的测试它可能是一堆错误,所以如果已经定义了一个已知的算法,我宁愿使用已知算法。

2 个答案:

答案 0 :(得分:3)

您可能正在寻找longest common substring problem的锚定实现。对字符串列表进行排序,并对相邻元素执行锚定LCS。将LCS插入到多值散列映射中,LCS作为键,两个字符串作为值。

完成后,对LCS字符串执行相同操作,直到达到某个阈值。

答案 1 :(得分:1)

查看列表中的每对字符串,并计算它们之间的Levenshtein Distance(又名字符串编辑距离)。这将为您提供将一个字符串更改为另一个字符串所需的最少更改次数。

现在从Levenshtein实现获得字符串之间的实际变化集(通过动态程序中的后退指针)。如果这组更改只包含将数字替换为其他数字,那么您就找到了一个模式。复制其中一个字符串,删除这些数字,将其存储在模式集中,然后继续使用其他字符串对。