Ruby で書籍版英辞郎のテキスト
ファイルから Lemma List を
作ってみる
自分用のメモ。検証はしてないので、使ってみる場合は自己責任でお願いします。あと、Mac での作業が前提です。Windows ではどうなるかは試していません(試すこともありません)。作業環境は、Yosemite (OS X 10.10) なので、Ruby は 2.0.0 です。それ以前のバージョンの場合は、各自修正してください。
英辞郎は、書籍版第八版についてくるファイルを前提としています。それ以外では何か問題が起きるかもしれません。試す際は "EIJI-141.TXT" の部分を該当するファイル名に置き換えてください。また、英辞郎のファイルは、書籍版なりを各自お買い求めください。
使い方は、このスクリプトを保存したファイルと、英辞郎のファイルを同じディレクトリに置いて実行します。lemma list.txt というファイル名で lemma list ができます。フォーマットは染谷先生の e-lemma と同じで head -> derivation1,derivation2,... という形になります。手作業での確認や修正が必要(と思われる)なものは、exceptions.txt というファイルに保存されます。
ちなみに、元ファイルは、Windows の Shift-JIS だと思うのですが、Mac で開く場合は、文字コードの指定を cp932 にする必要があるのでそうしています。
#!/usr/bin/ruby
# -*- mode:ruby; coding:UTF-8 -*-
output = []
exceptions = []
File.open("EIJI-141.TXT",encoding: 'cp932') do |f|
f.read.each_line do |line|
lineText = line.encode('UTF-8','cp932').strip
if lineText.match(/【変化】/)
items = lineText.split(/\ *(?:、|:)\ */)
head = items[0].gsub(/■/,"")
derivation = items.select{|x| x.match(/【変化】/)}.map{|x| x.to_s.gsub(/【変化】《.+?》/,"").split(/(?:\ *\|\ *|または|まれに)/)}.flatten.map{|x| x.strip.gsub(/(\w+)\(\w\)(\w+)/,'\1\2,\1l\2')}
outputLineText = "#{head} -> #{derivation.join(",")}"
if outputLineText.match(/\{\d+\}|\[|\bmore\ |《|\(|\)/)
exceptions << outputLineText.gsub(/\ +\{\d+\}/,"")
else
output << outputLineText
end
end
end
end
File.open("lemma list.txt","w") do |f|
f.write(output.join("\n"))
end
File.open("exceptions.txt","w") do |f|
f.write(exceptions.join("\n"))
end