我们拥有 OCRed 数千页的报纸文章。每页的报纸、期号、日期、页码和 OCRed 文本都已放入 mySQL 数据库。
我们现在想用 PHP 构建一个类似 Google 的搜索引擎来查找给定查询的页面。它必须很快,任何搜索都不会超过一秒钟。
我们应该怎么做?
我们拥有 OCRed 数千页的报纸文章。每页的报纸、期号、日期、页码和 OCRed 文本都已放入 mySQL 数据库。
我们现在想用 PHP 构建一个类似 Google 的搜索引擎来查找给定查询的页面。它必须很快,任何搜索都不会超过一秒钟。
我们应该怎么做?
你也可以试试SphinxSearch。Craigslist 使用 sphinx,它可以连接到 mysql 和 postgresql。
有一些有趣的搜索引擎供您查看。我不知道您所说的“Google like”是什么意思,所以我将忽略这部分。
您可以将所有文件放在 Google Docs 上,然后将结果抓取到您自己的网站上。
我担心的是 OCR 准确性仍然是一个问题,因此搜索要求的一个考虑因素是执行“模糊”搜索的能力。模糊的意思是当 OCR 错误地将“帽子”一词识别为“热”时,搜索引擎将足够聪明,可以返回相似但不准确的结果。在 Oracle 中,有一个名为 UTL_MATCH 的函数可以比较两个字符串之间的相似性:http: //docs.oracle.com/cd/E11882_01/appdev.112/e25788/u_match.htm#ARPLS352
像这样的功能会很有用。
您的情况表明,您想自己动手;一般搜索引擎的良好起点包括:
如果您想使用现成的解决方案:
为什么不试试 Google Search Appliance 或 Google Enterprise 之类的东西?它会产生相关成本,但它会让您免于重新发明轮子并为您提供“类似谷歌”的搜索。
检查 PHP 的这个Lucene端口:
您可能需要检查Sphider。根据我的经验,它非常快并且会自动进行索引。它也是开源的,因此您可以获取代码并根据需要对其进行修改。
sqlite 具有相当不错的全文搜索能力(查找 sqlite FTS 3/4 - 它出奇的好)
如果你想要一个简单的 PHP diy 方法索引使用由被索引的术语的哈希分割的大量小文件可以很好地工作并且即使在 php 中搜索也可以非常快,如果你小心设计它。(这个想法是对一个术语进行搜索,只需要搜索一个非常小的文件,其中包含与哈希和记录 ID 匹配的术语 - 如果你想节省 HD 空间,你可以使用位数组切片来表示记录 ID).. 但是做对全文的每个单词的索引在 php 中会很慢。那部分应该在 c 中完成
对于“模糊”搜索,可能会考虑使用变音位哈希。
对于预先构建的全文工具,请查看以下内容:sqlite FTS 3/4(sqlite 具有非常好的全文搜索功能!)、Sphinx、kinoSearch(kinoSearch 有点像 Lucene,但后端是 c,带有一个非常简单的 perl 包装器 -还有cLucene,但我认为那仍然是pre-alpha)
Java Lucene(或任何基于 Java 的)可能需要留出大量内存来运行 JVM——所以如果你有预算的话,可能不是那么好