查找大文中的特殊字词

时间:2015-07-13 21:33:30

标签: javascript node.js algorithm find

我做:我想在大文本(1000+单词)中找到编程域(HTML,JavaScript,后端...)中的特殊单词,并放入我找到的所有编程单词到新阵列

问题:在我看来,只有一种方法可以做到这一点。

  1. 使用编程字
  2. 编写非常大数组
  3. 写一个循环,将BIG TEXT中的每个单词与BIG ARRAY中的单词(带编程单词)进行比较
  4. 但我认为有一些解决方案可以大大简化任务。

    知道如何让这个 MORE 更容易吗?

    我在服务器JavaScript上写道

    编辑:我知道indexOf等等的人谢谢你,但我想找到

    1. 非常快的算法
    2. 如何避免编写编程字(500 +)
    3. “已解决:”我找到underscore.js 示例:

      var tagsObject = {
        "Java":"JAVA",
        "J2EE":"J2EE"
      }
      
      var words = "Java is a big language ! ! "
      
        var words = content.split(/\b/); // make array
        words = _.uniq(words); // make array with uniq words
        console.log(  _.intersection(words,_.keys(tagsObject))); // Computes the list of values that are the intersection of all the arrays, return array
      //_.keys(tagsObject) - return array with keys
      

3 个答案:

答案 0 :(得分:0)

我想到了一些fast string searching algorithms,特别是 Rabin-Karp

可以在this gist中找到一个实现,您可以在其中比较不同函数之间的运行时间:

function simpleSearch(text, str) {
   ...

function searchRabinKarp(text, str) {
   ...

this post.

已经比较了标准方法(regexindexOf)的表现

答案 1 :(得分:0)

嗯..实际上我想建议你使用一个名为indexOf的JS函数来对付你的数组。 通过这种方式,您至少可以删除一个循环。如果上述JS函数的返回值为-1,则找不到特定字符。

Var sourceArray=[a,b,c,d,e];

Var toBeFoundValues=[a,x,z,d];

For(var i=0;i<toBeFoundValues.length;I++)

If(sourceArray.indexOf(toBeFoundValues[I])!=-1)

// logic here

我希望上面的代码可以帮到你。 很抱歉,如果通过我的智能手机回答代码看起来不太好!

答案 2 :(得分:-3)

您可以尝试使用正则表达式。这一次搜索以查看字符串中是否有HTMLJavaScriptBack-end

var passingWords = "HTML,blah,otherWordsHere,JavaScript,Back-end";
var failingWords = "blah, otherWordsHere, h.tml, H.TML";
var re = new RegExp('(HTML)|(JavaScript)|(Back-end)');
console.log(re.test(passingWords));
console.log(re.test(failingWords));

如果true声明中给出的任何字词都在给定的字符串中,它将返回new,如果不是,则返回false

在您的情况下,您可能希望单独测试每个单词,或者编写一个不同的正则表达式,允许单词的任意组合与每个定义的单词之间的任何字符。

这只会告诉您这个词是否在那里,而不是它在哪里或任何其他信息。

JavaScript RegExp reference