Ruby:在字符串数组中查找最常见的短语

时间:2012-03-08 09:05:26

标签: ruby algorithm data-binding full-text-search nlp

我希望能够在Ruby中找到3到500个字符串数组中的10个最常见的问题。

的示例元素
  

[“嗨,我想要你的产品。我只有一个问题。我该如何改变   我的密码?“,”有人可以告诉我我如何更改密码吗?“,”我   买不起这个。如何取消我的帐户?“,”帐户   取消?“,”我忘了密码,如何更改密码?“,   .....]

基本上,我将会有很多字符串的数组,我必须提取问题,并从该数组中找到10个最常见的问题。

我试过四处寻找(检查出n-gram,但它似乎没有太大相关性)并且还没有提出任何想法。

你知道我建议你看看的算法吗?链接到几个例子将是非常棒的!

2 个答案:

答案 0 :(得分:2)

我想说的第一步是实际确定哪些字符串(或子字符串)实际上是问题。一个明智的方法就是注意“?”,但是再次根据你的要求你可以增强它 - 也许要注意“问题词”。这可能是你任务中更容易的部分。

一旦你得到一个字符串列表(这应该是问题) - 你需要聚类相似的字符串并返回10个最大的容器。最好的方法是结合基于语义+语法的方法。您可以查看this paper,因为它们似乎解决了在两个字符串之间找到相似性的问题。他们提出了一些令人信服的理由,说明为什么需要双重句法语义方法。

答案 1 :(得分: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