搜索字符串算法

时间:2011-12-20 23:02:30

标签: search full-text-search search-engine binary-search


我试图从一组网站(其中数千个)获取内容页面中的联系信息。在我挠头之前,我想问过像你这样的专家。我需要的只是地址,电子邮件ID,电话号码和联系人信息(如果有)。

我认为你已经理解了这个问题。是的,它是格式化...因为网站没有标准格式,所以很难确定我需要的确切信息。有些网站设计有flash联系我们页面,其他一些网站将联系信息设计为带有自定义字体的图像类型。

欢迎提示/想法/建议......

谢谢....

3 个答案:

答案 0 :(得分:10)

这正如您所料,绝不是一项微不足道的任务。这是解决这个问题的一种方法:

  1. 使用反向索引系统(例如Lucene/SolrSphinx)对页面编制索引。您可能需要编写自己的爬虫/蜘蛛。 Apache Nutch和其他爬虫开箱即用。如果内容相当静态,请将它们本地下载到您的系统。

  2. 内容编入索引后,您可以通过构建布尔查询来查询电子邮件地址,电话号码等,例如: //用于电子邮件//用于电话#括号内容:@ AND(内容:.COM或内容:.NET)或内容:“(”OR内容:“)”`重要提示:上述代码不应按字面意思理解。你可以使用Lucene Regex Query& amp;跨度查询,可以让你构建非常复杂的查询。

  3. 最后在结果页面上,(a)运行结果荧光笔来获取 查询字词周围的代码段,(b)在代码段上运行 正则表达式提取出感兴趣的领域。

  4. 如果您有北美地址数据集,则可以运行 多次传递以验证地址,i)地图提供者,如Bing地图,或谷歌地图,以验证地址。据我所知,USPS和其他人提供收费的有效地址查询,以验证美国邮政编码和加拿大邮政编码。或者,ii)电子邮件地址的反向DNS查询等等......

  5. 这应该让你开始....就像我说的,这里没有单一的最佳解决方案,你需要尝试多种方法来迭代并达到你想要的准确度。

    希望这有帮助。

答案 1 :(得分:3)

Conditional Random Fields已经被精确地用于这样的任务,并且相当成功。您可以使用CRF++Stanford Named Entity Recognizer。两者都可以从命令行调用,而无需编写任何显式代码。

简而言之,您需要首先通过从网页上提供一些名称,电子邮件ID等示例来训练这些算法,以便他们学会识别这些内容。一旦这些算法变得聪明(因为你给出了它们的例子),你可以在你的数据上运行它们并看看你得到了什么。

不要害怕看维基百科页面。这些软件包附带了大量示例,您应该在几个小时内启动并运行。

答案 2 :(得分:1)

@Mikos是对的,你肯定需要多种方法。另一个可以考虑的工具是Web-Harvest。它是一种用于收集Web数据的工具,它允许您收集网站并提取您感兴趣的数据。所有这些都是通过XML配置文件完成的。该软件还有一个GUI和一个命令行界面。

它允许您使用文本/ xml操作技术,如XSLT,XQuery和Regular Expressions,您也可以构建自己的插件。但它主要关注基于HTML / XML的网站。