テキスト処理についてのコードです。
Rubyでテキスト処理をしているのですが、同じような繰り返しが2回あるので、なんとかメソッドにして綺麗にコードを書けないかなと思って、試してみましたがやはりメソッドを作ることを今までしてこなかったためどのようにすればいいのかわかりません。
また、メソッドにしなくてもうまく動くので、無理にメソッド化する必要はないと思いますが、せっかくなので、今後のためにもメソッド作成を学んでおきたいと思いました。
以下のコード内の、filename_so ~ 最初のif文のendまでと、filename_nso ~2つめのif文のendまでをうまくメソッドにすることはできないでしょうか?
コード内の、soとnsoをメソッドの引数に取り、呼び出しの際にsoかnsoかを示せば動くと思いましたが、うまく実行されませんでした。
例えば、以下のように、abcメソッドに対してpointを引数にとり、呼び出しの際に、abc("so")、abc("nso")と試してみました。
そもそもメソッド定義や引数に対する考え方や使い方が間違っているのでしょうか?
Ruby
1def abc(point) 2filename_"#{point}" 3end
Ruby
1require 'lemmatizer' # 動詞を現形にするライブラリ 2require 'active_support/all' 3lem = Lemmatizer.new 4 5Dir.chdir("../TOPIC") # TOPICフォルダへ移動 6 7topic_name = Dir.glob("*") #TOPICフォルダ内のフォルダを保存 8Dir.chdir("#{topic_name[0]}") # topic_nameの1番目のフォルダへ移動 9 10Dir.chdir("SO/SO_SCRIPT") #SOフォルダのSO_SCRIPTフォルダへ移動 11filename_so = Dir.glob("*") #SO_SCRIPTフォルダのファイルをfilename_soに保存 12if filename_so.count == 0 # filename_soの数が0個なら 13 puts "Empty..." 14else #0個でないなら 15 puts filename_so[0] 16 text_so = File.read(filename_so[0]) #filename_soの1番目のテキストをtext_soに保存 17 text_so.downcase!.gsub!(/\,|\./, '') #テキストの大文字の部分を小文字に置換し, ,と.を削除 18 text_so.gsub!(/\([a-z\s]+\)|\[[a-z\s]+\]|\'[a-z]+|\-|\—|\n|[0-9]+\:[0-9]+|[^a-z\s0-9]/, ' ') # ()と[]内の文字を空白に, 以降も同じように置換 19 text_so.gsub!(/\s+/, ' ') # 2個以上の空白を1つに置換 20 word = text_so.split # テキストを空白で区切りwordに保存 21 array = [] # 配列arrayを定義 22 word.each { |w| array << lem.lemma("#{w}").singularize } # word内の単語を現在形にし, かつ単数形にしてarrayに保存 23 array.sort! # arrayをソート 24 #puts array 25end 26 27Dir.chdir("../../NSO/NSO_SCRIPT") 28filename_nso = Dir.glob("*") 29if filename_nso.count == 0 30 puts "Empty..." 31else 32 puts filename_nso[0] 33 text_nso = File.read(filename_nso[0]) 34 text_nso.downcase!.gsub!(/\,|\./, '') 35 text_nso.gsub!(/\([a-z\s]+\)|\[[a-z\s]+\]|\'[a-z]+|\-|\—|\n|[0-9]+\:[0-9]+|[^a-z\s0-9]/, ' ') 36 text_nso.gsub!(/\s+/, ' ') 37 word = text_nso.split 38 array = [] 39 word.each { |w| array << lem.lemma("#{w}").singularize } 40 array.sort! 41 #puts array 42end 43
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。