2012-03-08 15 views
2

Rubyでは、よくある10の質問を300-500文字列の配列で探したいと思っています。Ruby:文字列の中で最も一般的なフレーズを見つけよう

ている例要素[「HI、私はあなたの製品をしたいと思います。私はちょうど1つの質問があります。どのように私は 自分のパスワードを変更できますか?」、「誰かが私は私がどのように変化するかを教えてもらえます「パスワードを忘れましたか?」、 ..... "、" キャンセル "、"パスワードを忘れました。どのようにパスワードを変更しますか? "、" ..... "、" I には余裕がありません。 ]

基本的に、私はたくさんの文字列の配列を持つつもりです、そして、私はquestioその配列から最もよくある10の質問を見つけます。

私は周りを見回してみました(nグラムをチェックアウトしましたが、あまり関連性がないと思われました)、まだアイデアを思いついていません。

私が見てみると思われるアルゴリズムについて知っていますか?カップルの例へのリンクはすばらしいでしょう!

+1

は、これは非常に困難な作業です。それをうまくやりたいのであれば、研究と実験に多くの時間を費やす必要があります。 –

答えて

2

私は、実際にどの文字列(または部分文字列)が実際に質問であるかを実際に判断することになります。それを考えるのは簡単ですが、 "?"を探すことになりますが、あなたの要求に応じて、それをさらに高めることができます。それはあなたの仕事のほうが簡単かもしれません。

文字列のリスト(これは疑問に思われる)を取得したら、同様のものをクラスタ化して10個の最大ビンを返す必要があります。最善の方法は、セマンティック+構文ベースのアプローチを組み合わせることです。あなたはおそらくthis paperを見ることができます。なぜなら、彼らは2つの文字列の間の類似点を見つける問題に取り組んでいるようです。彼らはなぜ二元的な統語論的意味論的アプローチが必要であるかといういくつかの説得力のある理由を提示する。

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

これは本当に何も解決しません、それはあなたに最も一般的なキーワードを与えるだけです。そのアイデアは、最も一般的なフレーズや質問を得ることです。 –

+0

質問文字列はそのままコピーされますか?あるいは機能的に同等の質問のバリエーションですか?つまり、ユーザーが指定したテキスト領域またはドロップダウンメニューからユーザーが生成されますか? –

関連する問題