以下伪代码应该可以工作:
FOR i = 0 TO oldUrlContent.size
correspondance = false;
// Exact same content
FOR j = 0 TO newUrlContent.size And correspondance = false
IF md5(newUrlContent[i]) == md5(newUrlContent[j])
WRITE to out.txt, oldUrl + newUrl
correspondance = true
END IF
END FOR
// Levenshtein distance
FOR j = 0 TO newUrlContent.size And correspondance = false
IF levenshtein(newUrlContent[i],newUrlContent[j]) < ACCEPTABLE_LEVENSHTEIN
WRITE to out.txt, oldUrl + newUrl
WRITE to levenshtein.txt, oldUrl + newUrl
correspondance = true
END IF
END FOR
// Nothing found
IF correspondance = false
WRITE to error.txt, oldUrl
END IF
END FOR
解释:
因为您拥有两个 CMS 的 url 列表和 500 个页面的内容,所以这个过程并不难。
您应该有一个结构可以将 url 映射到两个 CMS 的内容。
假设我们将使用两个名为OldUrlContent
and的映射newUrlContent
,一个名为 的输出文本文件out.txt
,另一个名为 levenshtein.txt
,另一个名为error.txt
。
只需在您的 html 文件的文件夹中递归迭代(如果有很多子文件夹),打开每个文件并将其存储在您的地图中。
一旦您在两个地图中都获得了每个 url 和内容,您将不得不在OldUrlContent
地图上进行迭代,以获取内容的散列值(类似于 MD5)并将散列值与您的每个散列内容进行比较newUrlContent
。
2.1 如果有对应关系,请将对应关系保存在out.txt
.
2.2 如果没有对应关系,可能是因为你的两个CMS之间的一个页面的内容发生了变化。您可以使用Levenshtein 距离(这不是一个万无一失的解决方案)来确定两个页面的内容是否相同。如果距离较小,则可以确定对应关系并将其保存在out.txt
和中levenshtein.txt
。
2.3 如果您即使与 Levenshtein 距离也没有对应关系,请将 url 保留在error.txt
.
最后,您应该手动查看error.txt
并手动查找页面。
因为对于绝大多数人来说,内容是相同的,levenshtein.txt
文件不应该包含很多 url,而是查看对应关系,以确保。