1

Rubyを使用してテキストファイルから単語リストを取得したいのですが。ここで正規表現を使用して単語のみを解析する方法を見つけたので、次のようなスクリプトを作成しました。

src = File.open("text.txt")
word_list = []
src.each do |line|
  word_list << line.downcase.split(/[^[:alpha:]]/).delete_if {|x| x == ""}
end
word_list.flatten!.uniq!.sort!
p word_list

そして、以下はサンプルテキストファイルですtext.txt

TextMateはRubyonRailsアプリケーションを開発するための最新の流行かもしれませんが、Vimは永遠です。このプラグインは、RubyonRailsアプリケーション開発のために次の機能を提供します。

  1. Railsアプリケーションからのファイルを含むバッファーを自動的に検出し、それらのバッファー(およびそれらのバッファーのみ)に設定を適用します。自動コマンドを使用して、独自のカスタム設定を適用することもできます。

  2. 邪魔にならない。Railsアプリケーションのファイルのみが影響を受けるはずです。通常のRubyスクリプトは変更されません。有効になっている場合でも、プラグインの機能を使用していない場合は、プラグインが邪魔にならないようにする必要があります。

  3. Railsディレクトリ構造の簡単なナビゲーション。gfはコンテキストを考慮し、パーシャル、フィクスチャなどについて知っています。2つのコマンド、:A(代替)と:R(関連)があり、モデルから移行、テンプレートからヘルパー、コントローラーから機能テストなど、ファイル間を簡単にジャンプできます。より高度な使用法については、:Rmodel、:Rview、:Rcontroller、およびその他のいくつかのコマンドが提供されています。

Rubyの初心者として、この問題のより良い(より明確で、簡潔で、規則に従う)解決策を学びたいと思います。

アドバイスと訂正をありがとう。

4

2 に答える 2

7

より慣用的なコードは次のようになります。

word_list = open("text.txt")
  .lines
  .flat_map { |line| line.downcase.split(/[^[:alpha:]]/).reject(&:empty?) }
  .uniq
  .sort
于 2012-06-05T10:41:42.297 に答える
3
# I suppose you want each line and collect the results
word_list = File.open("text.txt").each_line.collect do |line|
   # collecting is done via collect above, no need anymore
   # .reject(&:empty?) calls .empty? on each element
   line.downcase.split(/[^[:alpha:]]/).reject(&:empty?)
# you can chain on blocks as well
end.flatten!.uniq!.sort!

p word_list
于 2012-06-05T10:32:19.027 に答える