• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テキストファイルの出現回数を出力するプログラムについて)

テキストファイルの出現回数を出力するプログラムについて

このQ&Aのポイント
  • Rubyの授業でテキストファイルの単語の出現回数を出力するプログラムを作成したい
  • テキストファイルには英文の文章が入っており、各語の出現回数を表示したい
  • 単語ごとに区切る方法がわからず、ヒントが欲しい

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

以下のようにしてください。 ------------------------------ $KCODE='e' word_tbl = {} #Hashテーブルを初期化 ARGF.each do |line| words = line.split(/\s+\.*/) #1行を単語毎に分割する wordsの配列には各単語が格納される # 分割する時の区切り文字の正規表現は、スペースが1個以上連続し、 # ピリオドが0回以上連続すること words.each do |word| # wordsの1単語を処理する if word_tbl.key?(word) # word_tblにその単語が登録済みなら word_tbl[word] += 1 # その単語の回数に1加算 else #そうでないなら word_tbl[word] = 1 # 初回の登録 (1を設定) end end end word_tbl.each do |word,count| # word_tblの各要素のキーと値を印字する print word," ",count,"\n" end ----------------------------

708wildcat
質問者

お礼

回答ありがとうございます。 tasu99さんの言う通りに組んだら 理想どおりの結果が表示されました。 ありがとうございます。

その他の回答 (3)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

#3です。 splitの正規表現は、 words = line.split(/[\s\.]+/) にしてください。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

単語の切り出しは splitでいいと思います。 引数なしで split を呼ぶと空白類で区切った配列を返してくれます。 ARGF.each で行毎に繰り返していますが、さらに末尾の改行を取り除いてから split して、その結果に対してカウント作業すればよいです。 また、単語ごとのカウントに配列とハッシュを使っていますが ハッシュだけでできますよ。 使えるメソッドが制限されているみたいなので、詳しい記述などは 避けておきますが、何かあれば補足してください。

708wildcat
質問者

お礼

回答ありがとうございます。 なんとかがんばってみます。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

単語をあらわす正規表現を使って、scan()で切り出していけばよいのでは。 http://www.ruby-lang.org/ja/man/html/String.html#scan

708wildcat
質問者

お礼

回答ありがとうございます。 scanの()の中の正規表現がむずかしいですよね。 がんばってみます。

関連するQ&A