« XバンドMPレーダ雨量情報 短縮URL(自分用) | トップページ | もうそろそろ携帯買い替え »

2012年4月30日 (月)

Google日本語入力 手抜き入力辞書(≒省入力、≒一部短縮)

日本語入力で変換の精度以前に、ローマ字入力にしろ、カナ入力にしろ(できないけど)、キー入力は減らせるものなら減らしたい。

例えば、

アップデートする

あぷで』 → 『アップデート』 名詞,サ変
のように登録していれば
あぷでする』 → 『アップデートする
が可能、言うまでもなくとても有効な手段。
でも意味のある短縮をするとなると手作業での単語登録が面倒、かつ、その省略語を”知っている”、”覚えている”必要があるのである意味厄介。

多少入力が増えても機械的なルールに基づいて省入力できる方がつぶしが効く。
キーの配置的に入力が少し面倒な『』。
入力の手間はさほどでもないけれど省こうと思えば省ける『』。

標準読み  あっぷでーとする  →  アップデートする
追加読み あっぷでとする
あぷでーとする
あぷでとする
標準読み  ほっとかーぺっと  →  ホットカーペット
追加読み ほっとかぺっと
ほとかーぺと
ほとかぺと

というような変換を許容する『促音、長音(長音記号)の入力を省ける辞書』を作成。
作成した辞書ファイルは Google日本語入力 に限らず ATOK などでも使えるけれど、取りあえずここでは Google日本語入力 での話。

お世話になったサイトや方針など

辞書ファイルをゼロから作るのはしんどいので作成する辞書の素材にできる辞書を確保したり、辞書作成に必要なツールの使い方を確認したり。
当時とっかかりが相対的に簡単そうにみえた(?) sed で何とかなったので、本件は sed をバッチファイルから利用。

以上を踏まえ、あらためて大まかな方針を列挙すると

  • 促音、長音(長音記号)の入力を省ける辞書をそれぞれ作る
    例えば 『ホットカーペット』を
    ほとかぺと
    『ー』『っ』両方省略
    ほっとかぺっと
    『ー』のみ省略
    ほとかーぺと
    『っ』のみ省略
    の3パターン
  • 辞書はゼロから作成するのでなく、加工できるフリーな辞書(辞書素材)ファイルをゲットする
  • かな→英単語(?)
    • カナなどの日本語だけでなく、かな英単語変換(?)においても
      にゅよく』 → 『New York
      のようにする
    • かな→英単語(?) 変換においては状況から考えて、元々の品詞に関係なく全て「名詞」を割り当てて変換させる
  • 辞書ファイルの編集には sed を使う
  • 『ー』は SJIS のダメ文字のひとつなので注意する

というわけで情報収集など

感謝多謝!

準備するもの

辞書のもとファイルは Mozc のサイトから svn で拾ったり、ブラウザで辿って 「View raw file」 からダウンロードしたり、適当にゲット。

  1. 辞書のもと :その1
    辞書ファイル と 品詞の定義ファイル
    辞書の元ファイル最新の一覧を見るだけならここ (2012/04/29現在 r111)
    http://code.google.com/p/mozc/source/browse/#svn/trunk/src/data/dictionary
    • 辞書ファイル
      dictionary00.txt から dictionary09.txt の計10個 (各5MB程度)
    • 品詞の定義ファイル
      id.def
      (150KB程度)
    • 辞書ファイルのライセンスと Mozc の辞書に関する注意書き
      README.txt
    (Mozc 全体のライセンスはwebサイトの左の方にあるような、Mozc と Google日本語入力 の違いのページにあったような)
  2. 辞書のもと :その2 かな→英単語 変換用
    2012/04/29現在最新(r111)のファイルには かな→英単語 変換のもとが含まれていないので、かな→英単語 のもとを含むリビジョンの辞書ファイルを確保
    • 辞書ファイル r72 の dictionary09.txtr72_dictionary09.txt として保存
    • 品詞の定義ファイル r72 の id.def (※単語の品詞を適切に扱う場合には必要)
  3. 辞書登録時の単語の品詞一覧
    辞書ツールで品詞選択を目視するか次のファイルで確認
    trunk/src/data/rules/user_pos.def
  4. 編集の主役 sed
    UTF-8 を含む日本語マルチバイトに対応した sed である onigsed
    GNU sed with Oniguruma (Onigsed)
    http://www.kt.rim.or.jp/~kbk/sed/
    Onigsed 2009年10月31日バージョン
  5. 並べ替えに sort
    UTF-8 に対応した sort として sortl
    http://www.massangeana.com/mas/archive/archive.htm
    sortl 1.11
    Windows標準の sort は UTF-8 が適切に扱えないので不可
  6. 重複処理に uniq
    試した限りでは特に破綻無く処理できた
    GNU utilities for Win32 の GNU textutils に含まれる uniq
    http://unxutils.sourceforge.net/
  7. 他、必須ではないもの
    • ファイル分割に split
      上記 GNU utilities for Win32 の GNU textutils に含まれるので uniq とセットで
    • サンプルのバッチファイルで辞書の元ファイルをゲットするなら wget
      単一のバイナリですむ Wget 1.12 for windows (2012/03/16 現在 1.13.4 が最新) がお手軽

各ツールの exeファイルはパスの通った所に置くか、作業用フォルダに置いておく。

辞書ファイルの作成

各種ツールのexeファイルを作業フォルダに置くならこんな感じ。

作業フォルダ     
dicsource    辞書のもとファイルなど置き場 
dictionary00.txt ~ dictionary09.txt       辞書のもとファイル
r72_dictionary09.txt       辞書のもとファイル
dictmp    一時フォルダ (バッチファイル中で作成)
短縮辞書生成_長音.cmd    長音処理用バッチファイル
短縮辞書生成_促音.cmd    促音処理用バッチファイル
短縮辞書生成_長促音.cmd    長音と促音処理用バッチファイル
短縮辞書生成_r72かな英.cmd    かな→英単語(?)処理用バッチファイル
onigsed.exe    sed
sortl.exe    sort
split.exe    split ※
uniq.exe    uniq
長音.sed    長音処理用 sedスクリプト
促音.sed    促音処理用 sedスクリプト
長促音.sed    長音と促音処理用 sedスクリプト
r72かな英.sed    かな→英単語処理用 sedスクリプト
短縮辞書_まとめ.cmd    生成した辞書ファイルをひとつにまとめる ※
辞書の元ファイルget カナ英単語含む.cmd    辞書ファイルを wget でゲット ※
wget.exe    wget ※
gime_4-各種ショートカット作成.cmd    デスクトップに各種ショートカットアイコン作成 ※
               

※は必須という程でもないので必要に応じて

バッチファイル と sedスクリプト は 短縮辞書生成_長音.cmd長音.sed の組み合わせのようにペアで利用する。
処理の都合上バッチファイル名、sedスクリプトファイル名は固定。

各バッチ、スクリプトの内容

手間は大して変わらないので3パターン作成しているものの、実利用的には、『ー』『っ』両方省略、のパターンのみ生成しておけばとりあえずは十分。
なお、「短縮辞書生成_長音.cmd」「短縮辞書生成_促音.cmd」「短縮辞書生成_長促音.cmd」の三つのファイルの中身は同一、ファイル名が異なるだけ。
sedスクリプトは UTF-8 BOMなし で保存。

  1. 『ー』のみ省略用
    短縮辞書生成_長音.cmd


    長音.sed


  2. 『っ』のみ省略用
    短縮辞書生成_促音.cmd は「短縮辞書生成_長音.cmd」をリネームしたもの

    促音.sed


  3. 『ー』『っ』両方省略用
    短縮辞書生成_長促音.cmdは「短縮辞書生成_長音.cmd」をリネームしたもの

    長促音.sed


  4.  かな→英単語(?)処理用
    短縮辞書生成_r72かな英.cmd


    r72かな英.sed

    かな→英単語(?) 変換に必要部分だけを、 r72_dictionary09.txt の 103,372行目以降だけ、を処理

  5. 生成した辞書を一つにまとめる
    短縮辞書_まとめ.cmd

    まとめる対象となるファイル名は「短縮辞書_*-all.txt」のワイルドカードで決め打ち、誤爆に注意

  6. 辞書の元ファイルなどをダウンロードする
    辞書の元ファイルget カナ英単語含む.cmd

    最新の辞書ファイル群と r72 の dictionary09.txt とid.def をダウンロードする
    要 wget

  7. Google日本語入力のツール類のショートカットアイコンをデスクトップに作成
    gime_4-各種ショートカット作成.cmd

    Google日本語入力 の プロパティ、辞書ツール、単語登録、などのショートカットアイコンを作成
    アイコン作成は常に上書きで更新

辞書の作成と利用

  1. sedスクリプト を利用形態に合わせて適当に編集: Google先生に聞く「sed 置換 スクリプト」
  2. sedスクリプト 中の id と id.def および 辞書ファイル dictionaryXX.txt に齟齬がないかチェック
  3. 利用する辞書ファイルに合わせてバッチファイルを実行
    生成される辞書ファイル名はそれぞれ次の通り
    • 短縮辞書_長音-all.txt
    • 短縮辞書_促音-all.txt
    • 短縮辞書_長促音-all.txt
    • 短縮辞書_r72かな英-all.txt
  4. 生成された辞書ファイルを Google日本語入力 の 辞書ツール から適切に登録

『ー』『っ』両方省略用【短縮辞書_長促音-all.txt」】と、 かな→英単語(?)処理用【短縮辞書_r72かな英-all.txt】、の二つを生成&登録しておけば事は足りる。

留意事項

使い勝手や辞書とバッチファイルとスクリプトなど

  • 読みこそ異なるものの、ある種の重複した変換候補が増えるので、ウザくなる、というか ウザい
    辞書追加したては強烈にウザい、ユーザー辞書の登録後は結構強くて普通の語彙が下位に落ちるのでウザい
    特にサジェストが、より便利でもあるし、甚だウザい、とも
    ウザいけど便利
  • 各sedスクリプトに関して (かな→英単語? 変換用をのぞく)
    • 変換する語句全てを網羅している訳でないので必要に応じて、対象品詞を追加したり削ったり
    • サンプルでは辞書ファイルで割り当てられている左側(高位な品詞?)の「名詞,サ変接続」「名詞,一般」「名詞,固有名詞,一般」「名詞,固有名詞,地域,一般」「名詞,固有名詞,地域,国」「名詞,固有名詞,組織」「名詞,形容動詞語幹」に対応
    • かな→英単語(?) 変換用途以外の各sedスクリプトは、辞書ファイル及び品詞定義ファイルのリビジョンが変わるごとに見直す必要がある
      id.def, 長促音.sed 一部抜粋
      r111 1950 名詞,一般,*,*,*,*,*
      /^[^\t]+(?:ー|っ)[^\t]*\t1950/{
      r105 1941 名詞,一般,*,*,*,*,*
      /^[^\t]+(?:ー|っ)[^\t]*\t1941/{
      のようにリビジョンが上がって id に変更が入れば 各sedスクリプト も合わせて要編集
  • 短縮辞書生成_r72かな英.cmdr72かな英.sed に関して
    • 前述したように元々の品詞を無視してすべて名詞扱いにした上で処理
    • 『ー』のみ省略、『っ』のみ省略、『ー』『っ』両方省略、の3パターンを一括処理していて個別処理にしていないため辞書ファイルは多少大きめ、必要に応じて不要な処理をコメントアウトしたりするもよし
  • ユーザー辞書登録
    • 既に利用しているユーザー辞書に追加で登録すると、後で分離、は面倒なので、この入力短縮辞書用にユーザー辞書を新規追加してそこに登録することを強くオススメ
    • 重複単語に関しては辞書登録時に適切に処理されるので、それ程神経質になる必要はない
    • もとの辞書ファイルでハナから不適切な状態のデータとなっている幾つかの語は登録に失敗する
    • 語彙が豊富なほど使用メモリも増えるし、初回起動も遅くなる
      r111 で全部入りの辞書登録をした時にはデフォルト時に比べ軽く30MBは食う場合がある


覚え書き

  • 辞書登録語品詞で分かりにくいもの、「短縮よみ」と「抑制単語」に関して
    http://googlejapan.blogspot.jp/2011/07/google_21.html
    オフィシャルブログより一部引用
    短縮よみ
    「短縮よみ」として登録された単語は、単独で入力されたときのみに候補に表示されます。例えば、「六本木ヒルズ森タワー」を読み「じゅうしょ」で単語登録した場合、入力文字が「じゅうしょ」だけの場合に変換すると「六本木ヒルズ森タワー」が変換候補に出てきます
    抑制単語
    「抑制単語」として登録された単語は、変換候補に現れなくなります
  • ひとつのユーザー辞書における最大収録語数
    GoogleJapaneseInput-1.5.1053.100 では 1,000,000語
    • 1,000,000語 を超えた部分は切り捨て
    • なので 1.5.1053.100 で 約200,000語 程度はまだまだ余裕アリ?
    • 1,000,000語 まで登録そのものは可能だが、辞書ツールの操作や表示の更新が重たくなったり、
      Google日本語入力の使用メモリが 300MB ぐらいに増えたり(通常は20~50MB程度)
  • 登録語句の重複
    GoogleJapaneseInput-1.5.1053.100
    単一辞書内の重複語は辞書登録時に処理され一つになるので、辞書ファイルへの sort & uniq は必須ではない
    ただし、このエントリの手順で生成した辞書ファイルを一つにした場合、sort & uniq しないと重複が 1,000語 を軽く超えるので放置はキモイ
  • Mozc と Google日本語入力の違い
    http://code.google.com/p/mozc/wiki/AboutMozc
    Google日本語入力 で使っている辞書の元ファイルが欲しいね……
    個人で締結できる NDA なんて無さそうだけど NDA 結んだら提供してくれないかしら


雑感

ひとつのユーザー辞書に登録可能な語数は 1,000,000語、同期可能なユーザー辞書に登録可能な語数は、たったの 10,000語。
辞書はアクセスを厳重に管理した上で GoogleDrive にでも置けという事か?

sed じゃなく Perl とかが使えればもっとスマートに実現できるんだろうと夢想しつつ、昔も今も変わらず Perl など全く使えない。
この時言及した辞書ファイルは エクセル とテキストエディタで作っていたような微かな記憶が。

読みの文字数に下限と上限、変換後がカナと『ー』のみ、というような縛りをかけると便利になるような、がっかりするような。
いずれにせよ控えめに評価しても、ここの手法で作成した辞書を使うと語彙多すぎ。
Google日本語入力はお腹いっぱいの語彙、ATOK は以前からの人力登録辞書、のような住み分け使い分け。

多すぎない程度に充実したこの手の『ー』『っ』入力省略可能な辞書を、オフィシャルに作ってオプションの辞書にするとしたら、正しい日本語を標榜する ジャストシステム ではなくフリーダムな語彙を持つ Google な気がする。

【2012/05/01:追記】

  • sedスクリプトの文字コードに関して念の為に追記
  • 抜けていた「辞書の元ファイルget カナ英単語含む.cmd」に関する内容を追加
  • とくにおかしかった表現を修正

|

« XバンドMPレーダ雨量情報 短縮URL(自分用) | トップページ | もうそろそろ携帯買い替え »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/60348/54599839

この記事へのトラックバック一覧です: Google日本語入力 手抜き入力辞書(≒省入力、≒一部短縮):

« XバンドMPレーダ雨量情報 短縮URL(自分用) | トップページ | もうそろそろ携帯買い替え »