【问题标题】:Fastest way to search thousands of keywords in a web page在网页中搜索数千个关键字的最快方法
【发布时间】:2012-02-23 02:19:34
【问题描述】:

我想从我的字典中扫描网页以查找是否存在关键字。 已经有关于此的问题以强调关键字。然而,我的字典会很大,例如 50.000 个单词。最好的方法是什么? 我还想在网站上搜索我的图书馆的变体。例如,我的库包含基因名称,例如 p53。我想在网站上搜索“p53”、“p53 蛋白”、“p53 的诱导”、“抑制 p53”、“磷酸化 p53”。我怎样才能做到这一点?最快的方法应该是什么

或者认为我有 2 个列表

   List1                List2
   ------              -------    
   inhibits              p21
   induces               p53 
   phosphorylates        Akt
   decreases             Braf
                         cMyc

我希望它能够搜索 List1 和 2 的组合。

Such as 
"inhibits cMyc" 
"phoshorylates p21" 

这意味着对于此示例,它需要搜索 4 X 5=20 个关键字。 但最初它会是 200 X 50000 = 1.000.000 搜索词。

【问题讨论】:

  • 是否有理由必须在客户端完成此操作?它会更适合服务器端,比如从假定的数据库中获取数据时?
  • 是打算针对您自己的页面运行此程序,还是针对网络上的任何随机页面?
  • 您要搜索站点还是页面?这两个术语都在 OP 中使用,或多或少可以互换。网站的策略将使用服务器编程,因为页面可以使用任何一种,但服务器可能是最好的。
  • 无论是在客户端还是在服务器中对我来说都没有关系...它将针对来自网络的随机页面运行。我想搜索一个 html 页面。

标签: javascript jquery html search keyword


【解决方案1】:

试一试可能对你有帮助

http://www.gotoquiz.com/web-coding/programming/javascript/highlight-words-in-text-with-jquery/

你必须像这样准备你的模式(示例以获得想法)

string keywords = "Cat, rabbit, dog,hound, fox";
 Regex r = new Regex(@", ?");
keywords = "(" + r.Replace(keywords, @"|") + ")";

【讨论】:

  • 你能解释一下你发给我的代码吗?
【解决方案2】:

首先,字典必须被索引。然后,页面内容也应该被索引并为字典找到匹配项。然后应该处理页面中的实例(例如突出显示、链接到定义等)。

除非您想在随机网页上的浏览器中运行它,否则上述操作应在服务器上完成,例如 Greasemonkey 脚本。我不认为一个索引良好的 50,000 项字典会扰乱普通 PC 上相当现代的浏览器,即使对于有几千个单词的页面也是如此。

编辑

如果您有两个列表,则为页面上的单词编制索引(例如,一个非常简单的方法是创建一个排序的、唯一的列表,其中包含第一个 A、第一个 B 等的键)。使用短列表搜索匹配的单词。

使用第一组单词匹配并在页面中找到它们,获取前面的单词以查看它是否与第二个列表中的单词匹配。对下面的单词做同样的事情。在 50,000 个单词的列表中进行简单的二进制查找永远不需要超过 16 次查找。使用字母索引进行第一次查找,然后使用二进制,应该将每个原始匹配减少到大约 5 或 6 次查找。

您也可以使用对象而不是索引列表并使用if (word in wordList),这也将非常快(记得包含一个 hasOwnProperty 测试)。

如果您只关心使用现代浏览器,请查看 webworkers 和 web storage

【讨论】:

  • 我们如何索引页面内容。因为我们要搜索两个列表的组合。所以搜索不是单词,而是句子。
  • 索引是根据您想要的搜索方式创建的。如果您正在寻找对,则成对(或三个或其他)索引单词或将每个索引单词链接到页面中的位置,这样如果您匹配该单词,您可以快速在文档中找到它并查看以下单词是否匹配也是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 2017-09-09
  • 2016-12-12
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
相关资源
最近更新 更多