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

Ruby:在字符串数组中查找最常见的短语,ruby,algorithm,data-binding,full-text-search,nlp,Ruby,Algorithm,Data Binding,Full Text Search,Nlp,我希望能够用Ruby在300-500个字符串的数组中找到10个最常见的问题 示例元素是 [“嗨,我想要你们的产品。我只有一个问题。我该如何改变 我的密码?,“有人能告诉我如何更改密码吗?”,“我 我付不起。我怎么取消我的帐户 “取消?”,“我忘了密码,如何更改密码?”, …] 基本上,我将有一个由许多字符串组成的数组,我必须提取问题,并从该数组中找到10个最常见的问题 我试着四处看看(查看了n-grams,但似乎不太相关),还没有想出任何想法 你知道你建议我看的算法吗?链接到几个例子将是非常棒的

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

示例元素是

[“嗨,我想要你们的产品。我只有一个问题。我该如何改变 我的密码?,“有人能告诉我如何更改密码吗?”,“我 我付不起。我怎么取消我的帐户 “取消?”,“我忘了密码,如何更改密码?”, …]

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

我试着四处看看(查看了n-grams,但似乎不太相关),还没有想出任何想法


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

我想说,第一步是确定哪些字符串(或子字符串)实际上是问题。一个不需要动脑筋的方法是留意“?”,但根据您的需求,您可以再次增强这一点——也许留意“疑问词”。这可能是你任务中比较容易的部分


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

不确定特殊算法,但如果分配给我这个任务:

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
array=[“我的帐户已锁定。”,“我可以拥有我帐户的帐户密码吗?”,“我的密码是什么?”]
array.map!{| x | x.split('')}使每个句子成为一个元素
word\u freq=Hash.new(0)
i=0
而i
这是一项非常具有挑战性的任务。如果你想把它做好,你必须在研究和实验上投入大量的时间。这并不能真正解决任何问题,它只会给你最常见的关键词。这样做的目的是获取最常见的短语或问题。问题字符串是逐字复制的吗?或者它们是功能对等问题的变体?i、 e.它们是用户从文本区域还是从您指定的下拉菜单生成的?