2010-11-12 69 views
1

我正在讀取一些文本,並希望將它分割成一個數組。我的目標是能夠將它分成由停用詞(被搜索引擎忽略的詞,如'a'''等)分隔的短語,以便我可以在我的API中搜索每個單獨的短語。因此,例如:'The cow's hat was really funny'將導致arr[0] = cow's hatarr[1] = funny。我已經有一組停用詞了,但是我無法真正想到如何實際上通過其中的每個/任何單詞進行實際分割,而無需編寫一個非常慢的函數來遍歷每個單詞。用Javascript中的單詞分割字符串

回答

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/注意:它可能是最好的替換這些值比分裂它們,因爲有數組元素從這個結果。

+0

這很完美,不知道'split()'帶了一個正則表達式,謝謝。 – pettazz 2010-11-12 20:15:37

+1

是單個字符的助手。我已經更新了我的答案以包含單詞邊界。 – 2010-11-12 20:21:13

+0

傑森 - 你的答案不起作用。 – user113716 2010-11-12 20:26:23

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); 
+0

這正是我的想法,但我想看看我能否找到更快的方法。 – pettazz 2010-11-12 20:19:12

+0

正是我所需要的!謝謝! – 11684 2012-05-04 11:35:29

2

這對您的關鍵字不區分大小寫.split(),由字邊界包圍。

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

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

您最終可能會在Array中出現一些空項目。爲了壓縮它,你可以這樣做:

var len = arr.length; 

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

+1用於壓縮數組,這是使用'split()'解決方案的問題。 – 2010-11-12 20:42:14