MS-IME98/2000 のユーザ辞書を
OAK for Win (Japanist)に移行させる方法

初版作成:2000年08月16日
最終改訂: 2001年11月11日

[トップへ]/[二つ上は: 親指シフト・メインページ]/
[一つ上は: オアシスからパソコンへ「移行」!]


目次


はじめに 〜OAKの辞書インポートツールは貧弱〜

富士通ミドルウェアから発売されているWindows用日本語IME 「OAK for Windows」(以下,OAKと略)そしてその姉妹品である「Japanist」は,同社の専用ワープロ「OASYS」シリーズの愛用者にとっては,次のようなメリットをもった非常に魅力的な IME です。

このように「OAK for Windows」と「Japanist」は,「OASYS」専用機ユーザにとって,他にはない特長をもった日本語IMEなのです。けれども,かなり以前にOASYS専用ワープロからパソコンに「移行」した人の中には,パソコン移行後は OAK を使わずに他社製の日本語IME------例えばジャストシステムのATOKやマイクロソフトのMS-IMEなど------を使ってきた人がいます。そのようなユーザが OASYS風の操作性に郷愁を感じ(?)て OAK や Japanist を使ってみようかなと思った場合,あるいは,自分の勤め先が富士通関連企業になったりしたために(笑)会社のパソコンでは OAK を使わざるを得ないと言う場合,当然ながら,

という要求を持つことになります。ところが,

のです。たしかに,OAK・Japanist にはテキストファイルから辞書を読み込む機能はあります。しかし,他社製日本語IME辞書ツールが吐き出すテキスト辞書情報を,OAK・Japanist のそれに「変換」して読み込む機能が付属していないのです。これは OAK・Japanist の拡販という面からは明らかに欠陥ともいうべきことです。ゆえに,この件に関して,富士通ミドルウェア側の対応がなされることを希望します。

しかし,現に OAK・Japanist にその機能がない以上,ユーザ側で何とかしなくてはなりません。私は以前,ATOK(ジャストシステム製)の辞書テキストをOAKにエクスポートするための方法をこのWebサイトで公開しました。今回は,前回の経験をもとに MS-IME98 のユーザ辞書を OAK/Win・Japanist にエクスポートする「辞書移行ツール」の作成にトライしてみました。以下はそのレポートです。

なお,以下のレポートでは,OAK/Win と Japanist とを区別せずに OAK/Win のみ扱っています。筆者が試した限りでは OAK/Win V. 8 と Japanist V. 1 とではユーザ辞書コンバートの取り扱いに関する限り違いは認められませんでした。しかし,筆者が気づかないところでひょっとすると何らかの違いが存する可能性はあります。そのような違いに気づいた方は 筆者までお知らせください

MS-IME98とOAKの辞書テキストファイルの構造

MS-IME98(以下,IME98と略),OAK for Windows(以下,OAKと略)ともに,辞書の登録単語をテキストファイルに書き出す機能を装備しています。各々の辞書テキストファイルを比較してみたところ,次のようなことが判りました。

  1. OAK, IME98とも,各レコードは「よみ・単語・品詞」の三つのフィールドで構成されており,フィールド区切り文字としてタブを使用している。
  2. OAK, IME98 との間で,品詞名の違い・品詞名の欠落がある。
  3. IME98では,登録単語の「読み」の先頭が「数字」や「全角英字」でも辞書登録可能だが,OAKでは「読みの先頭1文字」には「ひらがな」しか使えない。
  4. OAKの扱う辞書テキストファイルには専用のヘッダがある。これはOAKに辞書を取り込む前に書き加える必要がある。

私の採った方法

上の判ったこと4点のうち,最大の問題は2です。この品詞名の置換をある程度の精度で行うことができれば,辞書の移行は可能。しかし,エディタの置換機能で一つ一つ置き換えてゆくだけでは不十分なのです。というのも,後述の通り,一部の品詞名は他の品詞名をうちに含んでいるので,そのままただ置換しただけでは所期の効果が得られないことがあるからです。

問題はこの品詞名置換にどのようなツールを使うかですね。テキスト加工の達人なら,どんなツールを使うのでしょう?私には見当も付きませんが,いちおう今回は前回と同様に,比較的導入が簡単な sed を使ってみることにしました。エディタで手動置換する場合でも,後述の sed スクリプトを参考にして,置換順序・手続きを考える必要があります。

なお,私がここで紹介する方法では,MS-DOSプロンプト(コマンド・プロンプト)でのコマンドライン入力作業を行います。そのため,「MS-DOSプロンプト(コマンド・プロンプト)なんて使ったこともない」という人には,残念ながら以下の方法を試すのは困難と言えるでしょう。そういう方は,富士通ミドルウェア宛にでも「OAK/Winに他社製日本語IMEユーザ辞書の取り込みツールを付属させて欲しい」と要望メールを送りましょう。:-)

GNU sed for Win32 を入手する

さて,今回紹介する方法では,Windows 環境で sed を使います。使う sed は Shift-JIS漢字コードに対応したものが必要です。幸いなことに,GNU sed を Win32 環境に移植したツールが,フリーソフトウェアとしてVectorで公開されていますので,それを活用しましょう。Thanks >谷本さん

私が試したところ,Cygwin の GNU sed (Ver. 3.02)では一部,正規表現でエラーが出ました。Cygwin の sed を使う際には,後述するようにスクリプトの一部をコメントアウトする必要があります。その場合,わずかながら,手動編集作業が必要となります。しかし,今回紹介する GNU sed /Win32 では問題ないようです。
GNU sed(マルチバイト拡張版)/Win32 (フリーソフトウェア)入手先
http://www.vector.co.jp/vpack/browse/pickup/pw0/pw000569.html

このWebページ上の

●sed win32
GNU sed / Win32 Version ストリームエディタ

というリンクをクリックして,ダウンロード先へ移って下さい。

GNU sed を使えるようにする

GNU sed のアーカイブをダウンロードしたら,これを解凍します。zip形式で圧縮された書庫ファイル(アーカイブ)となっています。これを展開して元のファイルを復元する(=「解凍する」と言う)には,書庫ファイルを取り扱える何らかのツール(アーカイバ・ソフト)を入手する必要があります。アーカイバ・ソフトの入手が必要な場合は,次のWebサイトを訪れて,ZIPアーカイブを解凍するソフトを入手して下さい。

統合アーカイバ・プロジェクト
http://www.csdinc.co.jp/archiver/

解凍したら,まず readme.1st を読んでください。何か難しいそうなことが書いてありますが,sed を使うだけなら,ダウンロードしたアーカイブに同梱の sed.exe をパスの通ったディレクトリ(フォルダ)にコピーするだけです。どこにコピーしていいか分からない人は,

sed.exe を c:\windows\command にコピーする
(Windows 2000 なら,c:\winnt\system32 にコピーする)

とよいでしょう。

これで sed を使うための基本的準備はできました。このあと,sed を使うには,「MS-DOS プロンプト」(or 「コマンドプロンプト」)で,"sed"とタイプするだけです。sed の基本的使用法は,コマンドプロンプトで,

>sed --help[Enter]
">"はプロンプトを表す。[Enter]Enter キーを打鍵する。

とタイプすれば,USAGE が表示されます。しかし,以下で使い方を示しますので,「MS-IME98の辞書をOAKに移行する」という目的達成のためだけなら,sed について詳しく知る必要はありません。

作業手順

まず,以下の説明のために,次のように用語を定義しておきます。

IME98辞書テキストファイル
=MS-IME98の辞書ユーティリティが吐き出したユーザ辞書テキスト・ファイル
OAK辞書テキストファイル
=OAK の「辞書管理/抽出ファイルからの登録」 によって,読み込む対象となるテキスト・ファイル

手順の概略を示します。

  1. IME98の辞書ユーティリティを使って,IME98辞書テキストファイルを書き出す。
  2. IME98辞書テキストファイルの「品詞名」をOAKのものに置換してOAK辞書テキストファイルを生成させる。ここで sed を使う。
  3. 2の作業ののち,OAK の「辞書管理/抽出ファイルからの登録」によって,作成したOAK辞書テキストファイルを読み込む。

それでは具体的に作業手順を紹介します。

1. MS-IME98 辞書テキストファイルの書き出し

まずIME98の辞書のうち,ユーザ登録した単語をIME98の「辞書ツール/一覧の出力」の機能でテキストファイルに書き出します。この操作方法についてはIME98のヘルプで「目次/IME辞書ツールの使い方/登録した単語や用例をテキスト形式で保存するには⇒表示」とたどって調べてください。(下の画面図を参照)

IME98のヘルプ目次画面の図

このツールで一覧出力させたテキストファイルが「IME98辞書テキスト」となります。以下の説明では ime98dic.txt という名前のファイルがこの「IME98辞書テキスト」です。ご自分が分かりやすいように,一覧出力させる際にファイル名を付けて下さい。

2. sed を使って品詞名を OAK 用のものに置換する

具体的な作業は次の三段階に分かれます。

では,詳しく作業手順を説明しましょう。

2-1. sed スクリプト"ime98_to_oak"を用意する

私が使用した sed の *原始的* スクリプトを以下に公開します。このスクリプトは,複製・転載・改変自由とします。どこかのパワーユーザが下記のスクリプトを参考に,きちんとしたコンバート・ツールを公開してくれることを期待します。

このスクリプト(=「ここから」「ここまで」と記した部分)を,クリップボード経由でテキストエディタ[*注]に貼り付けて下さい。そののち,ファイル名を ime98_to_oak (すべて半角文字で拡張子なし)と付けて,スクリプトをファイルに保存して下さい。

[*注] 使用する「テキストエディタ」としては,ウィンドウズ付属の「メモ帳」で十分です。

ここで,Cygwin の GNU sed (Ver. 3.02)をお使いの場合には,注意点が一つあります。(他方,上記 GNU sed for Win 32 (マルチバイト拡張版)の場合には以下の注意点は無視してください。)

注意点(Cygwin の GNU sed を使う場合)

下記のスクリプト内コメントの■注意■という箇所に注目。Cygwin 付属の GNU sed を使う場合には,ハイフンによる「全角文字」の範囲指定が正常に機能しないようです。恐れ入りますが,Cygwin の sed をお使いの場合は,■注意■が示す1行をコメントアウトして下さい。GNU sed /Win32 (マルチバイト拡張版)を使った場合と出力ファイルを比較検討した結果,これ以外の点については正常に動作しているようです。

私は,Cygwin 1.1 (ネットインストール版) の GNU sed Ver. 3.02 がマルチバイト対応であるかどうかを知りません。私が試したところでは,インプットファイル・スクリプトファイルとも,文字エンコーディングを euc-japan (改行LF)とすることによって,ここで紹介するスクリプトも,■注意■が示す1行のほかは正常に走っているようです。この場合は,sed がはきだしたアウトプットファイルのエンコーディングを shift-jis に書き換えてやる必要があります。

なお,問題のコマンドをコメントアウトした場合,sed による置換作業後に, 「レコード冒頭が『かな』文字以外の登録語をレコードごと削除」するという作業を手動で行う必要があります。しかし,そのようなレコードはファイル先頭に集まっていますので,手動削除作業は簡単に行えます。

他方,今回使用した GNU sed /Win32 (マルチバイト拡張版)ではコメントアウトの必要はありません。

------ここから------
# ime98_to_oak 
# (MS-IME98/2000 --> OAK/Japanist 辞書コンバート用 sed スクリプト・ファイル)
# 作者:ソヤネン 2001年11月11日 Ver. 0.93 公開
# 原本公開場所:
# http://homepage1.nifty.com/cura/oya/transporting_ime98dic_to_oakwin.html
# このスクリプトは「複製・転載・改変すべて自由」とする。
#
#### レコード冒頭が「かな」文字以外の登録語をレコードごと削除。
/^[^ぁ-ん]/d
# ■注意■前行(↑)の sed コマンドが、Cygwin の GNU sed では
# 正常に動作しないようです。Cygwin の sed をお使いの場合は、
# 上の一行をコメントアウトしスクリプトを走らせたあと、出力ファイル
# の先頭に集まっている該当レコードを手動削除して下さい。
#
#### 改行文字だけの空行を削除。
/^$/d
# 
# なお、「読み[tab]単語[tab]品詞名[改行]」という三つのフィールドで
# 構成される各レコードのうち、品詞名のみを置換の対象とするために、
# [改行]の直前にある文字列のみを置換対象とする。
#
#### 名詞・サ変動詞類
## 『品詞名内包対策』
## 一部の品詞名は他の品詞名を内に含む。そこで「後方一致検索」で
## 区別できるように一工夫する。IME98の場合,「*名詞」を語尾にもつ
## 品詞名が後方一致検索で重複してしまう。
s/さ変名詞$/サ変名詞だ/
s/ざ変名詞$/サ変名詞だ/
# 注:OAK には「ザ変名詞」がない。
s/固有名詞$/固有名詞だ/
#
## 次の「接頭語つき」への置換はかなり強引である。
s/さ変形動名詞$/形容動詞{お\/ご}/
s/形動名詞$/形容動詞{お\/ご}/
# 次は,試みに「副詞」に置換。
s/副詞的名詞$/副詞/
#
## OAK/Japanistの「一般名詞」の接頭語の扱いをどうするべきか。
## 次では一応,「接頭語なし」としている。
s/名詞$/一般名詞/
## 次は「接頭語つき」だ。上行とどちらか一方をコメントアウトすべし。
#s/名詞$/一般名詞{お\/ご\/数}/
s/サ変名詞だ$/サ変名詞/
#
#### 形容詞・形容動詞
# MS-IME98 では「ク活用形容詞」と「シク活用形容詞」を区別
# しないようである。そこですべて「ク活用」に変換してみる。
# OAK/Japanist 特有の接頭語つき変換の取り扱いをどうするか……。
# ここでは強引に接頭語つきに置換してみた。
s/形容詞$/ク活用形容詞{お}/
s/形容動詞$/形容動詞{お\/ご}/
#
#### 次は,置換無し
# s/副詞$/副詞/
# s/連体詞$/連体詞/
# s/接続詞$/接続詞/
# s/感動詞$/感動詞/
#
#### 固有名詞類
# ここでも接頭語つきに置換してみた。
s/固有名詞だ$/一般名詞{お\/ご}/
s/人名$/人物{お\/ご}/
s/物品$/一般名詞{お\/ご\/数}/
s/組織$/組織名/
# 「地名」はOAKでは「市町村つき」とそうでないものに分かれている。
# 次ではすべて「地名(市町村つき)」で置換してみた。
s/地名その他$/地名(市町村つき)/
# 次は,置換無し。
# s/姓$/姓/
# s/名$/名/
# 
#### 動詞
## (MS-IME98には「ハ行四段」はないようだ。)
s/あわ行五段$/ワ行五段/
s/か行五段$/カ行五段/
s/が行五段$/ガ行五段/
s/さ行五段$/サ行五段/
s/た行五段$/タ行五段/
s/な行五段$/ナ行五段/
s/ば行五段$/バ行五段/
s/ま行五段$/マ行五段/
s/ら行五段$/ラ行五段/
s/一段動詞$/一段/
# 
#### 接頭語・接尾語
# s/接頭語$/接頭語/
s/姓名接頭語$/接頭語/
s/地名接頭語$/接頭語/
s/固有接頭語$/接頭語/
# s/接尾語$/接尾語/
s/姓名接尾語$/接尾語/
s/地名接尾語$/接尾語/
s/固有接尾語$/接尾語/
#
#### その他の品詞
# 次は,OAKに該当品詞無し。試みに「副詞」に置換。
s/慣用句$/副詞/
# s/冠数詞$/冠数詞/
s/単漢字$/接続なし/
s/独立語$/接続なし/
s/助数詞$/単位/
s/顔文字$/接続なし/
------ここまで------

2-2. sed を使った実際の置換作業に入る

手順 1 で生成した「IME98辞書テキスト(ime98dic.txt)」と,手順 2-1で作成した sed スクリプト ime98_to_oak とを同じディレクトリー(フォルダ)に置く(=コピーする)。以下の説明では D:\HOME というディレクトリー(フォルダ)になっています。この D:\HOME の部分をご自分の実際の環境に合わせて読み替えて下さい。

MS-DOSプロンプト(コマンドプロンプト)を開いたら,> のプロンプトのあとに正しくコマンドを入力して D:\HOME(=先に ime98dic.txtime98_to_oak をコピーしたフォルダ) へ移って下さい。参考までに,二つほどこのディレクトリー変更例を示します。斜体 で示した文字列が実際にプロンプトで入力するコマンドです。[Enter] のところで Enter キーを打鍵します。

C:\WINDOWS から C:\HOME に移る場合の一例
C:\WINDOWS>CD \HOME[Enter]
C:\HOME>
C:\WINDOWS から D:\HOME に移る場合の一例
C:\WINDOWS>D:[Enter]
D:\>CD HOME[Enter]
D:\HOME>

以下の作業はすべてこのディレクトリー(以下の画面例では D:\HOME)を作業ディレクトリーとして行います。

次に,以下のようにプロンプトでタイプして下さい。

sed -f ime98_to_oak ime98dic.txt > oakdic.txt

このコマンドによって,カレント・ディレクトリ(今の例では D:\HOME)に oakdic.txt が生成されます。インプットファイルが ime98dic.txt で,これIME98が吐き出したテキストファイルです。出力をリダイレクトして oakdic.txt というテキストファイルを書き出しています。この oakdic.txt が OAK 側で読み込むべき辞書ファイルとなります。

次に紹介する画面例は,Windows 98 のMS-DOS プロンプト上で sed を実行している様子です。sed スクリプトは 上の 2-1 で ime98_to_oak という名で保存したものです。

MS-DOSプロンプトでSEDを実行している様子

なお,上の sed スクリプトは,OAK辞書テキスト oakdic.txt の先頭に集まっている「読みがかなで始まっていない登録単語」------すなわち「読み」が「数字」・「英字」などで始まっている「登録単語」を自動削除します。なぜなら,OAKでは「読み」の先頭1文字は必ず「ひらがな」である必要があるからです。IME98から辞書移行する場合,「数字」や「英字」で読みが始まる単語が登録語に含まれている可能性があります。

2-3. OAK辞書テキストの先頭にヘッダを書き加える

OAK辞書テキストの先頭には「ヘッダ」と呼ばれる情報が一行必要です。そこで,ここまでの手順で生成された oakdic.txt をメモ帳などのテキストエディタで開き,テキスト先頭にこのヘッダを一行書き加えたのち,oakdic.txt を上書き保存します。

OAK V6のヘッダの例
登録単語ファイル V02.00

たとえば,"登録単語ファイル V02.00"という文字列を,oakdic.txt の先頭に追加するのです。ヘッダ行の末端で改行してください。

3. OAK側で「抽出ファイルからの登録」を行う

最後に OAK の「辞書管理/抽出ファイルからの登録」によって,この OAK辞書テキスト"oakdic.txt"から登録を行います。 「抽出ファイルからの登録」ダイアログボックスの「ファイル名」で,上で作成した OAK辞書テキストのファイル名を絶対パスとともに指定してください。次の図は,"D:\HOME\"に保存された"oakdic.txt"を登録元ファイルとして指定している様子を示しています。

OAKの「抽出ファイル」読み込み先を指定している様子

私の場合,この方法で1500語程度のユーザ登録単語を移行できました。

変更履歴

なお,今回は GNU sed for Win32 を使いました。上の方法を試される場合は,Shift-JIS漢字コード環境で sed が使える環境であれば大丈夫です。なお,私は Cygwin という Unix 環境を Win32 に移植した環境でも試行してみました。しかし,上述の通り,ハイフンによる文字範囲指定がうまく動作しません。しかし,この点をスキップさせれば,その他の点については GNU sed /Win32 と置換結果が同じとなることを私の辞書テキスト置換で確認しています。けれども,Shift-JIS コードへの対応は GNU sed /Win32 の方が優れているようですので,そちらを利用することをお薦めします。

以上,ご参考まで。


[このページの先頭へ戻る↑]