1

我正在做一个项目,我需要你在数据库查询中的建议。我正在使用 PHP 和 MySQL。

语境

  • 我有一个名为的表,其中phrases包含一个phrases存储短语的列,每个短语由一到三个单词组成。
  • 我有一个text包含 500 - 1000 个单词的字符串

我需要突出显示数据库表text中存在的字符串中的所有短语。phrases

我的解决方案

我浏览了短语列表中的每个短语并将其与 进行比较text,但是短语的数量很大(100k),因此进行此匹配大约需要 2 分钟或更长时间。

有没有更有效的方法来做到这一点?

4

1 回答 1

0

我将重点介绍如何使用 100K 值进行比较部分。这将需要两个步骤。

a) 编写一个 C++ 库并使用扩展将其链接到 PHP。谷歌 PHP-CPP。有一个框架可以让你做到这一点。

b) 在 C/C++ 中,您需要创建一个时间复杂度为 O(n) 的数据结构。n 是您要搜索的短语的长度。通常,这称为尝试数据结构。这通常用于没有空格的单词[不是短语]。但是,您当然可以自己编写。

这是一个链接,其中包含单词 implementation。又名字典。 http://www.geeksforgeeks.org/trie-insert-and-search/

这需要相当多的内存,因为这个数字是 100K。公平地说,您需要一个大型系统。但是,当您寻求更好的性能时,内存往往是一种权衡。

替代方法 只有 PHP。在这里,从您的文本输入中提取短语。将它们转换为哈希。您包含的表数据也应该存储在哈希中。[需要巨大的内存]。这里的性能将是火箭般的快速,每次搜索也就是 O(1)。所以,对于一个有 k 个单词的句子。您的时间复杂度将是 O(K-factorial)。

于 2015-08-20T04:29:25.780 回答