【问题标题】:Search 1000 Word Document For 15,000 Phrases在 1000 Word 文档中搜索 15,000 个短语
【发布时间】:2012-05-26 10:06:43
【问题描述】:

我有一个包含约 15,000 个多词短语的数据库,长度范围为 2-7 个单词。我希望能够搜索一个小文档(约 1000 个单词)以查看其中包含哪些短语。我基本上是在寻找实现这一目标的最佳方法。

我目前在 MySQL 中有两个表中的数据:

短语 (约 15,000 行)
短语 ID
短语
长度 (短语中的单词数)
文件 (100s/天)
document_id
文字

短语列表保持不变,新文档一直在添加。

据我所知,最好的方法是使用某种索引。理想情况下,当文档被添加时,它会被索引以查看它包含哪些短语,以便在稍后完成搜索时立即返回结果。

我已经考虑过如何在 MySQL 中做到这一点

  1. 将文档标记为 2 个单词的短语,查找以该标记开头的短语
  2. 迭代结果以增加令牌的长度 - if (phrase length == token length) {match} else {keep for next token length}。
  3. 将结果存储在新表中document_phrasesphrase_id, document_id

不过,这一切似乎都有很多开销,我想知道像 Sphinx 这样的外部工具是否能够更有效地做到这一点?我已经调查过了,但它似乎主要是为了在大量文档中搜索 1 个短语,而不是在 1 个文档中搜索许多短语。

是否有一些我完全错过的技术?请注意,虽然技术上很有趣,但使用 java/python 的解决方案超出了我计划为这个项目学习的范围

【问题讨论】:

  • 您的算法看起来不错。 PHP 对于这种字符串操作非常有用。您可能希望加载每个文档的文本并使用 PHP 将其处理成长度为 2-7 的短语,然后逐个查找这些短语。这对于合理长度的文件应该是相对有效的——圣经和博伽梵歌:好的。美国税法,没那么多。

标签: php mysql full-text-search sphinx


【解决方案1】:

您是否查看过Full Text Searches。给出的示例以及找到相关性的能力可能会给您一些想法或替代方案。

【讨论】:

  • 谢谢。通读它,尽管它与我想要实现的目标相反(在许多文档中搜索几个短语,而不是在几个文档中搜索许多短语)
猜你喜欢
  • 1970-01-01
  • 2010-12-31
  • 2020-03-16
  • 1970-01-01
  • 2021-07-05
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
相关资源
最近更新 更多