私はファイルを読み、それらを単語の配列に分割しました:
file1 = File.open("spam1.txt","rb")
file1_contents = file1.read
file1 = file1_contents.split(' ')
ハッシュを使用して単語の頻度を数え、単語の頻度に従って並べ替えることができます。
freqs1 = Hash.new(0)
file1.each { |word| freqs1[word] +=1}
freqs1 = freqs1.sort_by {|x,y| y}
freqs1.reverse!
次のように結果をユーザーに出力することもできます。
freqs.each{|word, freq| puts word + ' ' + freq.to_s}
file1
配列またはハッシュfreqs1
に特定の単語が複数回含まれている場合、ユーザーにメッセージを表示したい。
freqs1
ハッシュをループして適切なメッセージをユーザーに表示するという (悪い) アイデアがありました。
freqs1.each{|word,freq|
if ((word == ('business' || 'fund' || 'funds' || 'account' ||'transfer' || 'money')) && freq > 2) || (word == 'Iraq' && freq > 1 ) then
puts "File 1 is suspected as spam mail - suspicious word frequency"
else
puts "File 1 does not appear to be spam email"
end
}
ただし、これはの各要素に作用するため、これはばかげていましたhash
。
business, fund, funds, account
etc のような単語が 2 回以上表示される場合、特定のメッセージをユーザーに表示するにはどうすればよいですか?
助けてくれてありがとう。