簡體   English   中英

如何以更Ruby的方式從文本文件中創建單詞列表?

[英]How to make a word list from a text file in a more Ruby way?

我想使用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可能是開發Ruby on Rails應用程序的最新熱潮,但Vim永遠存在。 該插件為Ruby on Rails應用程序開發提供以下功能。

  1. 自動檢測包含來自Rails應用程序的文件的緩沖區,並將設置應用於這些緩沖區(僅適用於那些緩沖區)。 您也可以使用自動命令來應用自己的自定義設置。

  2. 不打擾。 只有Rails應用程序中的文件應該受到影響; 常規的Ruby腳本保持不變。 即使啟用了該插件,如果您不使用其功能,該插件也應遠離您的使用。

  3. 輕松瀏覽Rails目錄結構。 gf考慮了上下文,並且知道了部分信息,固定裝置等等。 有兩個命令::A(備用)和:R(相關),可在文件之間輕松跳轉,包括收藏夾,例如模型到遷移,模板到助手以及控制器到功能測試。 對於更高級的用法,提供了:Rmodel,:Rview,:Rcontroller和其他幾個命令。

作為Ruby新手,我想學習更好(更清晰,簡潔和遵循約定)的解決方案。

感謝您的任何建議和更正。

更加慣用的代碼是:

word_list = open("text.txt")
  .lines
  .flat_map { |line| line.downcase.split(/[^[:alpha:]]/).reject(&:empty?) }
  .uniq
  .sort
# 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM