わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

漢字チェッカー

ボートで、かけ算でリンクした文章ですが,小学生でも読めることを念頭に置いて書きながらも,漢字のチェックはきちんとしていませんでした.
Windowsでチェックするなら,漢字チェッカー(何年生で習う?)の詳細情報 : Vector ソフトを探す!が有用そうで,Windows 7の手元のPCで問題なく動作しました.Office 2010のアドインとして動くDr.シンプラー ドットネットも,面白そうです.WordでチェックできるというのはQ&Aサイトによく見られ,例えばhttp://www.bizocean.jp/faq/FaqDetail/?faq_query_id=7216にありますが,手元のWord 2010ではどうすればいいか分かりませんでした.
CUIで動かせるようにしたいと思い,また自分のプログラミング能力のチェックを兼ねて,Rubyスクリプトを作りました.いつもはこの直下にコードを載せるのですが,コードサイズが少々大きいので,https://gist.github.com/851715から取得できるようにしてみました.
コードの特徴は:

  • 欲しいのは,「小学校で習わない漢字の検出」ですが,「各漢字の頻度分析」もさせています.
  • 小学校で習う漢字は,wikipedia:学年別漢字配当表から切り貼りし,コードに入れました.そして出力の際,各学年についてはこの配当表の順としました.ない漢字*1については,UTF-8文字コード順としました.
  • 出力は幹葉表示です.各学年+配当外に分けて,その出現個数だけ漢字が出てきます.「@freq_display_method = 1」の1を,2もしくは3に書き換えれば,「どの漢字は何回」という形で簡潔に表示させることも可能です.
  • ない漢字がどこで出現するかは,漢字ごとにgrepを実行して,該当行を出力しています.
  • いつものように,Ruby 1.8/1.9両対応です.

使用上の注意もあります:

  • 入力ファイルがUTF-8以外だと実行時エラーが起こります.内部で文字コードの変換をしていません*2
  • 人名用漢字は配当外です.「猛彦」のうち,「彦」はこの理由でアウトです.
  • 表記の揺れ(「いう」「言う」など)は検出しません.
  • いわゆる静的分析なので,TeXなどマクロを定義していればその記述,すなわち展開前の内容が,分析の対象となります.

まずは動かしてみました.boat.tex文字コードShift_JISなので,これをUTF-8に変更したboat_utf8.texを作り,ruby kc.rb boat_utf8.texを実行したところ*3,配当外がぼろぼろ見つかりました.

配当外(31種43字): 介冒卓却含履彦戻払択掲揃描描描描描換換携携暦況浮猛籍紹繰致訂較載込込途違違違違違違隠離

grepの出力と合わせて,一つ一つ見直しながら書き換え,本文中でどうしても漢字にしたい箇所(「交換可能」「電卓」)は熟語全体にルビを振り,本文でなければ基本的にそのままとし,チェックし直すと,次の出力になりました.

配当外(20種24字): 介冒卓卓履彦択振掲揃換換換携携暦猛箇籍紹訂載隠離

修正版の「ボートで、かけ算」は,http://d.hatena.ne.jp/takehikom/files/boat.pdfから取得できます.

*1:「配当外」と表記していますが,この言葉が妥当かどうか,ちょっと確信が持てません.

*2:したところで,grepがうまくいかなくなるので.

*3:nkf -w boat.tex | ruby kc.rbとして実行することもできます.この場合は,配当外漢字に対してgrepをしません.まあ,入力を行単位で内部に持っておけば,できそうなのですが.