読者です 読者をやめる 読者になる 読者になる

PNEのtxtからkeywordを引っこ抜く

Ruby

専門用語の辞書を作りたい。そう考えるとPNEのkeywordとかはそのまま辞書の単語として登録できそうなので、引っこ抜いてくることにした。

原型はここを参考にしつつ。

nkfにファイルを渡しすぎて怒られたりしたので、ここを参考にどうにかした。

本体のスクリプト

# -*- coding: utf-8 -*-

def extract(str)
  keywords = []
  str.gsub!(/\n/,"")
  str.scan(/<キーワード>(.*?)<\/キーワード>/).each{|line|
    line[0].split(/|\//).each{|keyword| # 全角のスラッシュにマッチさせる
      keywords.push keyword
    } 
  }
  return keywords
end

start_year = 1985
end_year = 2006

Dir.chdir("/Users/yasuhisa/Desktop/pne")

(start_year..end_year).each{|year|
  # ファイルをコピーしてくる
  puts year
  system "cp #{year}*/**/*.txt ~/dbcls/pne_keyword/#{year}"
}
puts "finished copying files..."

Dir.chdir("/Users/yasuhisa/dbcls/pne_keyword")
(start_year..end_year).each{|year|
  # sjisからutfに変換
  puts year
  Dir.chdir("/Users/yasuhisa/dbcls/pne_keyword/#{year}")
  system "ls | xargs -n1 -t nkf -S -w --overwrite"
}
puts "finished converting file encoding..."

keywords = []

(start_year..end_year).each{|year|
  # keywordを抜き出す
  Dir.chdir("/Users/yasuhisa/dbcls/pne_keyword/#{year}")
  Dir.glob("*.txt").each{|f|
    old = File.open(f,"r")
    extract(old.read).each{|keyword|
      puts keyword
      keywords.push keyword
    }
    old.close
  }
}
puts "finished extracting from txt..."

Dir.chdir("/Users/yasuhisa/dbcls/pne_keyword/")
new_txt = File.open("keywords.txt","w")
keywords.each{|keyword|
  new_txt.puts keyword
}
new_txt.close

これを実行したあとのファイルに「^M」が登場してしまうので

nkf -Lu -w --overwrite keywords.txt     

で変換をし

cat keywords.txt | sort | uniq > uniq_keywords.txt

でできあがり。