我正在拍摄一些文字并希望将其拆分为数组。我的目标是能够将它分成由停用词界定的短语(搜索引擎忽略的单词,比如'a'''等),这样我就可以在我的API中搜索每个单独的短语。例如:'The cow's hat was really funny'
会产生arr[0] = cow's hat
和arr[1] = funny
。我已经有了一系列的停用词,但是我无法真正想到如何通过它中的每个/任何单词实际拆分,而不需要编写一个非常慢的函数来遍历每个单词。
答案 0 :(得分:2)
使用split()
。它需要一个正则表达式。以下是一个简单的例子:
search_string.split(/\b(?:a|the|was|\s)+\b/i);
如果您已经有停用词数组,则可以使用join()
来构建正则表达式。请尝试以下方法:
regex = new RegExp("\\b(?:" + stop_words.join('|') + "|\\s)+\\b", "i");
一个工作示例http://jsfiddle.net/NEnR8/。 注意:最好替换这些值,而不是拆分它们,因为此结果中有空数组元素。
答案 1 :(得分:2)
这会对您的关键字设置不区分大小写的.split()
,并受到单词边界的限制。
var str = "The cow's hat was really funny";
var arr = str.split(/\ba\b|\bthe\b|\bwas\b/i);
您最终可能会在数组中找到一些空项目。要压缩它,你可以这样做:
var len = arr.length;
while( len-- ) {
if( !arr[len] )
arr.splice( len, 1);
}
答案 2 :(得分:1)
快速而肮脏的方法是用一些独特的字符(例如&&&)替换“停用词”字符串,然后根据该唯一字符进行拆分。
例如。
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);