2015-08-24 37 views
1

如果我有一個字符串,該如何將它拆分爲一個單詞數組並過濾掉一些停用詞?我只想要長度爲2或更長的單詞。JavaScript中的Tokenize

如果我的字符串是

var text = "This is a short text about StackOverflow."; 

我可以

var words = text.split(/\W+/); 

但使用split(/\W+/)拆呢,我得到的所有的話。我可以檢查的話有至少2的長度與

function validate(token) { 
    return /\w{2,}/.test(token); 
} 

,但我想我能做到這一點聰明/快與正則表達式。我也有一個數組var stopwords = ['has', 'have', ...]這不應該在數組中允許。實際上,如果我能找到一種方法來過濾出停用詞,我可以將所有字母a,b,c,...,z添加到停用詞數組中,以僅接受至少包含2個字符的詞。

+0

這可以很容易地使用數組和過濾器方法完成,你是否想用正則表達式來完成這一切? – juvian

+2

我不認爲'text.split(/ \ W + /)。filter(validate)'有什麼問題。無需編寫過度複雜的正則表達式。 – Bergi

+0

你可以用'text.split(/ \ W + | \ b \ w \ b /)'去除非單詞符號和長度小於1的所有單詞。 –

回答

3

我會做你開始什麼:斯普利特/W+/,然後使用.filter()驗證陣列中的每個令牌(長度和停用詞)。

var text = "This is a short text about StackOverflow."; 
var stopwords = ['this']; 

var words = text.split(/\W+/).filter(function(token) { 
    token = token.toLowerCase(); 
    return token.length >= 2 && stopwords.indexOf(token) == -1; 
}); 

console.log(words); // ["is", "short", "text", "about", "StackOverflow"] 

你可以輕鬆地調整正則表達式查找單詞>= 2人物,但沒有點,如果你已經將需要進行後期處理,以去除禁用詞(token.length會比你寫任何花哨的正則表達式快)。

0

是這樣的嗎?

function filterArray(a, num_words, stop_words) { 
    b = []; 
    for (var ct = 0; ct <= a.length - 1; ct++) { 
     if (!(a[ct] <= num_words) && !ArrayContains[a[ct], stop_words) { 
      b.push(a[ct]); 
     } 
    } 
    return b 
} 
function ArrayContains(word, a) { 
    for (var ct = 0; ct <= a.length - 1; ct++) { 
     if (word == a[ct]) { 
      return true 
     } 
     return false 
    } 
} 

var words = "He walks the dog"; 
var stops = ["dog"] 
var a = words.split(" "); 
var f = filterArray(a, 2, stops); 
0

易與Ramda:

var text  = "This is a short text about how StackOverflow has gas."; 
var stopWords = ['have', 'has']; 
var isLongWord = R.compose(R.gt(R.__, 2), R.length); 
var isGoWord = R.compose(R.not, R.contains(R.__, stopWords)); 
var tokenize = R.compose(R.filter(isGoWord), R.filter(isLongWord), R.split(' ')); 

tokenize(text); // ["This", "short", "text", "about", "how", "StackOverflow", "gas."] 

http://bit.ly/1V5bVrP

0

這應該幫助

(?:\b\W*\w\W*\b)+|\W+ 

輸出:

a文本的StackOverflow . A..Z ABC .. XYZ .

其中匹配的字符串。