Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在网页中搜索数千个关键字的最快方法_Javascript_Jquery_Html_Search_Keyword - Fatal编程技术网

Javascript 在网页中搜索数千个关键字的最快方法

Javascript 在网页中搜索数千个关键字的最快方法,javascript,jquery,html,search,keyword,Javascript,Jquery,Html,Search,Keyword,我想从我的字典中扫描一个网页是否存在关键字。 已经有人提出了关于这方面的问题来强调关键词。然而,我的字典将是巨大的(如50000字)。最好的方法是什么? 此外,我想搜索我的图书馆的变化网站。例如,我的文库包含基因名称,如p53。我想搜索“p53”、“p53蛋白”、“p53诱导”、“抑制p53”、“磷酸化p53”的位置。我该怎么做?最快的方法是什么 或者认为我有两个列表 List1 List2 ------ -------

我想从我的字典中扫描一个网页是否存在关键字。 已经有人提出了关于这方面的问题来强调关键词。然而,我的字典将是巨大的(如50000字)。最好的方法是什么? 此外,我想搜索我的图书馆的变化网站。例如,我的文库包含基因名称,如p53。我想搜索“p53”、“p53蛋白”、“p53诱导”、“抑制p53”、“磷酸化p53”的位置。我该怎么做?最快的方法是什么

或者认为我有两个列表

   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, @"|") + ")";