匹配两个数据集之间的公共字符串

时间:2011-08-19 19:29:45

标签: string algorithm search dictionary

我正在进行网站转换。我将数据库后端转储为sql文件。我也从wget那里得到了一个网站。

我想要做的是将数据库表和列映射到scrape中的目录,页面和页面部分。我想自动化这个。

是否有一些工具或脚本可以从一个源中提取字符串并在另一个源中查找它们?理想情况下,它会返回一组结果,如“

string "piece of website content here" on line 453 in table.sql matches string in website.com/subdirectory/certain_page.asp on line 56.

我不想进行行比较,因为来自数据库转储(INSERT INTO table VALUES (...))的行不会匹配实际填充的页面中的行(<div id='left_column'><div id='left_content'>...</div></div>)。

我意识到这是一项计算密集型任务,但即使让它在周末运行也没关系。

我发现了类似的问题,但我没有足够的CS背景知道它们是否与我的问题完全相同。如此友好地建议this question,但它似乎正在处理一组已知的针以与大海捞针相匹配。在我的情况下,我需要比较干草堆和干草堆,并看到匹配的干草秸秆。

是否有命令行脚本或命令,或者这是我需要构建的东西?如果我构建它,我应该使用Aho-Corasick算法,如另一个问题所示?

2 个答案:

答案 0 :(得分:1)

所以你的两个问题是1)是否已有解决方案可以满足您的需求,2)您是否应该使用Aho-Corasick算法。

第一个答案是我怀疑你会找到一个能满足你需求的现成工具。 第二个答案是,由于你不关心性能并且CS背景有限,你应该使用你认为最简单的算法。

我会更进一步,提出一个架构。

首先,您需要能够以有意义的方式解析.sql文件,逐行并返回tablename,column_name和value。 StreamReader可能是最好的。

其次,您需要一个针对您的网页的解析器,它将逐个元素并返回每个文本节点以及每个父元素的名称,一直到html元素及其父文件名。 XmlTextReader或类似的流式XML解析器(如SAXON)可能是最好的,只要它可以在无效的XML上运行。

您需要将这两个解析器与某种相互搜索算法结合在一起。您必须根据自己的需要进行自定义。如果你能把它拉下来,Aho-Corasick显然会给你最好的表现。然而,一个简单易用的算法很容易实现,具体如下:

假设你有两个解析器遍历每个字段(一方面)和每个文本节点(另一方面),选择两个解析器中的一个并让它遍历其数据源中的每个字符串,调用另一个解析器在其他数据源中搜索所有可能的匹配,并记录它找到的那些。

答案 1 :(得分:-1)

这不起作用,至少不可靠。最好的情况:您可以将每个数据都放在HTML文件中的对应部分,但是您会有很多误报。例如,用户名是实际的单词等。

此外,文本在显示之前经常被操纵。网站通常会将标题大写或截断文本以供预览等。

AFAIK没有这样的工具,在我看来,不存在能够充分解决问题的工具。

您最好的选择是获取网站使用/使用的源代码并进行分析。如果失败/不可能,您必须手动分析数据库。从网址获取尽可能多的内容,并尝试适应这个难题。