• ベストアンサー

文書から単語を検索したい・・・

私はRuby初心者になります。 今、私は文字列(文)から文字列(単語)を検索させるプログラムを組みたいのですが、1つ分からない点が出てきたので質問させていただきました。 内容なのですがとりあえず以下のようなプログラムを本などで調べ組上げました。 *********************************************************** open("docu.txt"){|io|  puts io.read  io.pos = 0  File.readlines("word.txt").each{|line|   puts line   line.chomp!   p io.read.index(line)  } } *********************************************************** 【docu.txtの内容】 aiueokakikukekosasisuseso 【word.txtの内容】 keko *********************************************************** 結果: aiueokakikukekosasisuseso keko 11 これならちゃんと動いてくれました。 ただ、これらのテキストの内容を以下のような日本語にするとうまくいきません。 *********************************************************** 【docu.txtの内容】 あいうえおかきくけこさしすせそ 【word.txtの内容】 けこ *********************************************************** 結果: あいうえおかきくけこさしすせそ けこ nil やはり英数字でないと、うまくいかないようです。 こういった「ひらがな」や「漢字」でも検索してくれるようにするには、どういった作業が必要になるのでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

文字コードがおかしいのかと思いましたけど、nil になるのが不審。 OSの種類とRubyのバージョンはなんですか? ruby -v でバージョンがわかります。 1.8.x の場合は、p $KCODE というスクリプトを実行した結果はどうなりますか? 1.9.x の場合は、p Encoding.default_external というスクリプトを実行した結果はどうなりますか? docu.txt と word.txt のデータの文字コードはなんですか? 問題点とは関係ありませんが、こういうほうがいいですね。 open("docu.txt"){|io|  str = io.read  puts str  File.readlines("word.txt").each{|word|   puts word   word.chomp!   p str.index(word)  } }

lnekonomel
質問者

お礼

OSはLinuxでRubyのバージョンは1.8です。 色々試した結果、やはりdocu.txtとword.txtの文字コードが違ったみたいです。 ちゃんと合わせてやると動いてくれました。 ふむふむ そんな書き方ができるんですね! 勉強になりました^^ ご丁寧な回答感謝いたします。

その他の回答 (1)

  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.1

質問者さんが書かれたコードをそのままコピペして実行すると、 Ruby 1.8.6、Ruby 1.8.7ともに あいうえおかきくけこさしすせそ けこ 16 という意図通りの結果が出ました。 Ruby 1.9.1で実行すると、 あいうえおかきくけこさしすせそ けこ 8 という結果になりました。 OSは、Windows XP SP2です。

lnekonomel
質問者

お礼

ご回答いただき感謝いたします。 私Linuxを使ってるのですが、やはり文字コードがおかしかったようです。