2013-01-09 59 views
0

處理twitterfeed可視化。我有一個很大的數據集。我只想使用包含特定字符串的推文消息。在短的未知字符串中有效查找特定術語或短語的簡單方法是什麼?

我現在有這樣一行:


數據= data.filter(函數(d,I){返回d.text.indexOf( '新年')= - 1真:假的? ;});


它返回包含字符串「新的一年」一個通過twitterfeed所有的鳴叫。工作正常! :)

但是,如何選擇多個字符串?

其實,我想這一塊也返回和/或「新年快樂」包含像「NEWYEAR」變化的鳴叫和/或「快樂2013」​​和/或拼寫錯誤等

希望有人能幫助我..

2013年快樂!

+0

結合你想要的所有支票?即'return(d.text.indexOf('new year')!= - 1 || d.text.indexOf('newyear')!= - 1 || ...)? true:false;'可能會更好地使用正則表達式。 –

+0

性能有多重要?匹配變體有多重要?解決這些問題的質量解決方案並不簡單。 – erickson

+2

http://en.wikipedia。org/wiki/String_searching_algorithm#Algorithms_using_finite_set_of_patterns – tripleee

回答

0

將您的搜索條件放在他們自己的數組中,然後在運行檢查時循環。

var searchTerms = ['new year', 'christmas', 'boxing day']; 

data = data.filter(function(d, i) { 
    var termFound = false; 
    for (x in searchTerms) { 
     if (d.text.indexOf(searchTerms[x]) != -1) { 
      termFound = true; 
     } 
    } 
    return termFound; 
    }) 
+1

雖然存在一些問題,所以請注意您是否需要高度的結果準確性。例如,「我在牛肉三明治中發現多年前的肌肉」將會對上述算法的「新年」產生積極影響。 –

+0

我同意,有更好的方法來搜索。 – Elijah

0

這是一個非常經典的字符串搜索/字符串匹配問題。首先,一些術語:字符串匹配算法通常將搜索空間稱爲「文本」 - 在這種情況下,您的推文或推文;和'模式(S)' - 您的搜索條件。

大多數字符串匹配算法的複雜性是根據文本的長度,模式的長度和匹配的數量來衡量的。

天真的方法當然是嵌套循環和線性搜索。僞代碼:

foreach text (tweet) 
    foreach pattern (search term) 
     linear search the text for the pattern 

這是O(T * p),其中t是所有文本的總長度,p是所有圖案的總長度。你可以在這方面做出相當大的改進,特別是如果文本或模式固定在多次運行中,允許你做一些預處理以實現高效搜索。看看Wikipedia's description of string search algorithms有幾種可能性。

您對特定算法的選擇可能取決於您的內存約束以及預處理時間和運行時複雜度之間的折衷。但我會拋出一些東西來看待。這聽起來像你的模式可能是固定的,並且你的文本可能會有所不同(搜索不同的Twitter供稿?),所以你可能想看看the Aho-Corasick algorithm。您也可以找到一個有用的數據結構suffix tree。這些維基百科頁面的鏈接以及Google搜索這些詞語應該有助於您開始使用(您甚至可以找到實施的代碼來提供幫助,儘管我沒有使用JavaScript,所以我不知道該在哪裏推薦)。

相關問題