想象一下,你有数百万条记录包含平均2000字(每个)的文字,而且你还有一个包含大约100000个项目的其他列表。
例如:在关键词列表中你有一个像“奥巴马总统”这样的项目,在其中一个文本记录中你有一些这样的东西:“......奥巴马总统......”所以我想要在文本中找到这个关键字,并用以下内容替换它:“..... {President Obama} ....”要突出显示文本中的关键字,关键字列表包含多名词单词,例如示例。
在拥有数百万条文本记录的庞大列表中,最快的方法是什么?
注意:
现在我以贪婪的方式完成这项工作,逐字检查并匹配它们,但每篇文本记录大约需要2秒钟,我希望零时间附近有一些东西。
我也知道这就像命名实体识别一样,我和许多NER框架一起工作,例如Gate和...,但是因为我想要这个框架不支持的语言我想手动。
答案 0 :(得分: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%匹配算法)。
另一种尝试可能是:
将所有关键字放在哈希表或其他(索引)字典中,检查该哈希表中是否存在目标词。因为它被索引,它将比常规匹配快得多。您可以在哈希表中存储关键字的其他信息。
答案 1 :(得分:2)
假设:大多数关键词都是单个词,但有多个词关键词。
我的建议。
根据第一个单词散列关键字。因此,“总统”,“奥巴马总统”和“克林顿总统”都将达到相同的价值。
然后通过计算哈希值逐字搜索。在哈希匹配上实现逻辑以检查您是否在多字关键字上匹配。
计算散列将是此解决方案中最昂贵的操作,并且在输入字符串的长度上应该是线性的。