admin管理员组

文章数量:1425653

I'm taking some text and want to split it into an array. My goal is to be able to split it into phrases delimited by stopwords (words ignored by search engines, like 'a' 'the' etc), so that I can then search each individual phrase in my API. So for example: 'The cow's hat was really funny' would result in arr[0] = cow's hat and arr[1] = funny. I have an array of stopwords already but I can't really think of how to actually split by each/any of the words in it, without writing a very slow function to loop through each one.

I'm taking some text and want to split it into an array. My goal is to be able to split it into phrases delimited by stopwords (words ignored by search engines, like 'a' 'the' etc), so that I can then search each individual phrase in my API. So for example: 'The cow's hat was really funny' would result in arr[0] = cow's hat and arr[1] = funny. I have an array of stopwords already but I can't really think of how to actually split by each/any of the words in it, without writing a very slow function to loop through each one.

Share Improve this question asked Nov 12, 2010 at 20:09 pettazzpettazz 6031 gold badge6 silver badges16 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 3

Use split(). It takes a regular expression. The following is a simple example:

search_string.split(/\b(?:a|the|was|\s)+\b/i);

If you already have the array of stop words, you could use join() to build the regular expression. Try the following:

regex = new RegExp("\\b(?:" + stop_words.join('|') + "|\\s)+\\b", "i");

A working example http://jsfiddle/NEnR8/. NOTE: it may be best to replace these values than to split on them as there are empty array elements from this result.

This does a case insensitive .split() on your keywords, surrounded by word boundries.

  var str = "The cow's hat was really funny";

  var arr = str.split(/\ba\b|\bthe\b|\bwas\b/i);

You may end up with some empty items in the Array. To pact it, you could do this:

  var len = arr.length;

  while( len-- ) {
    if( !arr[len] )
        arr.splice( len, 1);
  }

Quick and dirty way would be to replace the "stop word" strings with some unique characters (e.g. &&&), and then split based on that unique character.

For example.

var the_text = "..............",
    stop_words = ['foo', 'bar', 'etc'],
    unique_str = '&&&';

for (var i = 0; i < stop_words.length; i += 1) {
  the_text.replace(stop_words[i], unique_str);
}

the_text.split(unique_str);

本文标签: Splitting a String by an Array of Words in JavascriptStack Overflow