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