8

想象一下,您有数百万条记录,其中包含平均 2000 个单词(每条)的文本,并且您还有另一个包含大约 100000 个项目的列表。

例如:在关键字列表中,您有一个像“总统奥巴马”这样的项目,而在其中一个文本记录中,您有这样的内容:“..... 奥巴马总统 ....”,所以我想找到这个关键字在文本中并将其替换为类似这样的内容:“..... {president Obama} ....”以突出显示文本中的关键字,关键字列表包含多个名词单词,例如示例。

在拥有数百万条文本记录的如此庞大的列表中,最快的方法是什么?

笔记:

  1. 现在我以一种贪婪的方式做这项工作,逐字检查并匹配它们,但是每个文本记录大约需要 2 秒,我想要一些接近零时间的东西。

  2. 我也知道这类似于命名实体识别,并且我使用过许多 NER 框架,例如 Gate 和 ...,但是因为我想要一种不受框架支持的语言,所以我想手动执行此操作.

4

2 回答 2

2

至于确切的关键字匹配:

10^6 * 2*10^3 单词 = 数十亿个可能的匹配。将此与 10^5 可能的匹配进行比较会导致超过 10^6 * 2^3 * 10^5 = 2 * 10^14操作(最坏的情况:不匹配,概率不匹配:大(因为 100000 比较小字?)。

and i want some thing near zero time

不可能。

至于 NER,您必须删除关键字列表并将语法分类到您想要突出显示的类别中。

像:

  • 动词
  • 副词
  • 名词
  • 名字
  • 数量
  • 等等

可以识别。完成后,您可以按类别定义包含特殊单词的特殊列表。例如:President可能在这样的(名词)列表中以使用特殊属性突出显示它。因为你最终会得到一个小得多的special list,吐成几个catagories。您可以减少所需的操作次数。

(请意识到,正如您对 NER 的了解一样,您已经知道了。)

因此,您可以为您的目标语言提取类似 NER 的逻辑(或其他非 100% 匹配算法)。

另一种尝试可能是:

将所有关键字放入哈希表或其他(索引)字典中,检查目标词是否存在于该哈希表中。由于它被索引,它将比常规匹配快得多。您可以在哈希表中存储关键字的附加信息。

于 2013-11-26T08:22:36.813 回答
2

假设:大多数关键字是单字,但也有一些多字关键字。

我的建议。

根据第一个单词散列关键字。所以“总统”、“奥巴马总统”和“克林顿总统”都将哈希到相同的值。

然后通过计算哈希逐字搜索。在哈希匹配上实现逻辑以检查您是否与多字关键字匹配。

计算哈希将是此解决方案中最昂贵的操作,并且应该与输入字符串的长度呈线性关系。

于 2013-11-26T11:46:07.857 回答