2012-03-08 108 views
2

我想在Ruby中查找300-500個字符串數組中的10個最常見問題。Ruby:查找字符串數組中的最常見短語

一個例子元素是

[「HI,我想你的產品。我只是有一個問題,如何更改 我的密碼?」,「有人可以告訴我怎麼改變我密碼?「,」我 買不起這個。我怎樣取消我的賬戶?「,」賬戶 取消?「,」我忘記了我的密碼,我該如何更改我的密碼?「, ..... ]

基本上,我將有一個很多字符串的數組,我必須提取questio n,並從該陣列中找出10個最常見的問題。

我試過四處尋找(檢出n克,但它似乎不太相關),還沒有想出任何想法。

你知道任何算法,你會建議我看看嗎?鏈接到幾個例子會很棒!

+1

這是一個非常具有挑戰性的任務。如果你想做得好,你將不得不投入大量的時間進行研究和實驗。 – 2012-03-08 19:39:17

回答

2

我想說的第一步是要真正確定哪些字符串(或子字符串)實際上是問題。毫不費力的方法是尋找「?」,但根據您的要求,您可以加強這一點 - 也許瞭解「疑問詞」。這可能是你任務中較爲容易的部分。

一旦你得到了一個字符串列表(這是所謂的問題) - 你需要將相似的字符串聚類並返回10個最大的分檔。最好的方法是結合基於語義+語法的方法。你或許可以看看this paper,因爲它們似乎解決了在兩個字符串之間發現相似性的問題。他們提出了一些令人信服的理由,爲什麼需要雙重句法 - 語義方法。

0

不確定特殊的算法,但如果我被分配這個任務:

array = ["my account is locked.", "can i have the account password to my account?", "what's my password?"] 

array.map! {|x| x.split(' ')} #make each sentence an element 

word_freq = Hash.new(0) 

i = 0 
while i < array.length 
array[i].each {|x| word_freq[x] += 1} 
i += 1 
end 

word_freq.each {|m, x| puts "#{m} appears #{x} times"} #words are now keys with frequency values 

print word_freq.keys #an array of key words to mess with 
+0

這並不能真正解決任何問題,它只會爲您提供最常見的關鍵字。這個想法是得到最常見的短語或問題。 – 2012-03-12 16:14:01

+0

問題字符串是否完全複製逐字?或者他們在功能上相同的問題上有所不同?即,它們是用戶從文本區域還是從您指定的下拉菜單生成的? – 2012-03-13 22:58:31