2012-03-08 72 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