Javascript 在网页中搜索数千个关键字的最快方法
我想从我的字典中扫描一个网页是否存在关键字。 已经有人提出了关于这方面的问题来强调关键词。然而,我的字典将是巨大的(如50000字)。最好的方法是什么? 此外,我想搜索我的图书馆的变化网站。例如,我的文库包含基因名称,如p53。我想搜索“p53”、“p53蛋白”、“p53诱导”、“抑制p53”、“磷酸化p53”的位置。我该怎么做?最快的方法是什么 或者认为我有两个列表Javascript 在网页中搜索数千个关键字的最快方法,javascript,jquery,html,search,keyword,Javascript,Jquery,Html,Search,Keyword,我想从我的字典中扫描一个网页是否存在关键字。 已经有人提出了关于这方面的问题来强调关键词。然而,我的字典将是巨大的(如50000字)。最好的方法是什么? 此外,我想搜索我的图书馆的变化网站。例如,我的文库包含基因名称,如p53。我想搜索“p53”、“p53蛋白”、“p53诱导”、“抑制p53”、“磷酸化p53”的位置。我该怎么做?最快的方法是什么 或者认为我有两个列表 List1 List2 ------ -------
List1 List2
------ -------
inhibits p21
induces p53
phosphorylates Akt
decreases Braf
cMyc
我希望它能够搜索列表1和列表2的组合
Such as
"inhibits cMyc"
"phoshorylates p21"
这意味着对于本例,它需要搜索4 X 5=20个关键字。
但最初它将是大约200x50000=1.000.000搜索词 首先,必须为词典编制索引。然后,还应该为页面内容编制索引,并找到字典的匹配项。然后应处理页面中的实例(例如突出显示、链接到定义等) 上述操作应该在服务器上完成,除非您希望在随机网页上的浏览器中运行它,例如作为Greasemonkey脚本。我不认为一本索引良好的50000项词典会困扰普通PC上的一个相当现代的浏览器,即使是有几千个单词的页面 编辑 如果您有两个列表,则为页面上的单词编制索引(例如,一个非常简单的方法是创建一个排序的、唯一的列表,其中包含指向第一个a、第一个B等的键)。使用短列表搜索匹配的单词 使用第一组单词匹配并在页面中找到它们,获取前面的单词以查看它是否匹配第二个列表中的单词。对下列单词做同样的操作。在50000字的列表中进行简单的二进制查找不需要超过16次查找。在第一次查找中使用字母索引,然后使用二进制,应该可以将每个原始匹配的查找减少到5到6次 您还可以使用对象而不是索引列表,并使用
if(wordList中的单词)
,这也会非常快(请记住包括hasOwnProperty测试)
如果您只关心使用现代浏览器,请查看webworkers并尝试一下,它可能会对您有所帮助 您必须像这样准备您的模式(示例以获得想法)
是否有理由必须在客户端执行此操作?它更适合服务器端,比如从假定的数据库获取数据时?是针对您自己的页面还是针对web上的任意页面运行此操作?您想搜索网站还是页面?这两个术语都在OP中使用,或多或少具有互换性。一个站点的策略是使用服务器编程,因为一个页面可以使用其中的任何一个,但可能服务器是最好的。。。它将针对来自web的随机页面运行。我想搜索一个html页面。你能给我解释一下你发送给我的代码吗?我们如何索引页面内容。因为我们要搜索两个列表的组合。所以搜索不是基于单词,而是基于句子。索引是根据您想要搜索的方式创建的。如果您正在寻找成对的词,那么请成对(或三个或其他)索引词,或者将每个索引词链接到其在页面中的位置,以便如果您匹配该词,您可以在文档中快速找到它,并查看以下词是否匹配。
string keywords = "Cat, rabbit, dog,hound, fox";
Regex r = new Regex(@", ?");
keywords = "(" + r.Replace(keywords, @"|") + ")";