---------------------------------------------------------------------------- 辞書メンテナンスツール dm Ver0.60 '99. 9. 5 ------------------ Programmed by dopp / dopp@ugtop.com --------------------- (1)辞書メンテナンスツール「dm」について アレなことをするために辞書を育成する訳ですが、これはそのためのツールです。 メンテナンスという言葉はちょっと大袈裟ですけど(苦笑)。 まぁ、文字列整形コマンド程度のものと思ってください。 (2)「dm」の機能 辞書のファイルに対して以下の処理を行うことができます。 1)辞書中に含まれる不適切なコードの削除(標準機能) 拾ってきた辞書にありがちですが、辞書中にTABやら00hやらffhなど文字としては 不適切なコードが混ざっていることがよくありますが、これを削除します。 削除の対象となるのは、キャラクタコードで「0ah,0dh,20h〜7eh」以外のコードです。 ちなみに20h〜7ehのキャラクターコードは下記[ ]内のとおりです。 [ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~] しかし、これでは漢字コードが含まれている場合、漢字コードの1byte目のみが 削除され、2byte目がゴミとして残る可能性がありますので、漢字コードを検出した 場合、2byte併せて削除します。 (1byte目が「81h〜fch」かつ 2byte目が「40h〜fch」の場合を漢字コードとみなして います。) 2)不正な改行コードの修正(標準機能) これも拾ってきた辞書にありがちですが、改行コードがUNIX形式(LF)だったり、 MAC形式(CR)だったりすることがあるので、これをdos形式(CR+LF)に変換します。 また、改行コードのみの空行については削除するようにしています。 3)重複単語の削除(/W) このオプションによって、重複する単語を削除することができます。 なお、このオプションの使用にあたっては、事前に辞書がソートされている必要が あります。 ソートはdosのsortコマンドが便利です。(sort dic.txt > dic2.txt とすれば良い。) (巨大ファイルを高速にソートするプログラムを作るのは非常に難しいので、ソート機能 は永遠に内蔵しないと思います(苦笑)) 4)小文字変換(/S) このオプションによって、すべてのアルファベットを小文字に変換します。 5)大文字変換(/L) このオプションによって、すべてのアルファベットを大文字に変換します。 6)キャピタル変換(/C) このオプションによって、先頭のアルファベットを大文字に変換し、それ以外の アルファベットを小文字に変換します。 (普通rulesを使うから5),6)の機能は必要ないですけどね。) 7)文字数制限(上限)(/Un)(n=1〜99) このオプションによって、単語の文字数を制限し、それ以上の文字を削除します。 普通は/U8でしょうかねぇ。 (注:このオプションを付けない場合でも文字数は250文字までに制限しています) 8)文字数制限(下限)(/Vm)(m=1〜n) このオプションによって、指定の文字数に満たない単語を削除します。 9)先頭&末尾のスペースのみ削除(/-) このオプションによって、単語の先頭&末尾のスペースを削除します。 10)全てのスペースの削除(/=) このオプションによって、全てのスペースを削除します。 11)アルファベット以外の文字の削除(/A) このオプションによって、アルファベット以外の文字を削除します。 (スペースは削除しませんので、必要に応じて( /- or /= )のオプション を使用して下さい。 12)アルファベット以外の文字の削除(/B) このオプションによって、アルファベット&数字以外の文字を削除します。 (スペースは削除しませんので、必要に応じて( /- or /= )のオプション を使用して下さい。 13)ローマ字変換(/R) このオプションによって、全角のひらがな&カタカナを半角のローマ字に変換 します。(半角カタカナには対応していません。) ※文末に「dm」における変換テーブルを記載していますので、参考にしてください。 14)数字&記号の半角変換(/H) このオプションによって、全角の数字&記号を半角に変換します。 (ローマ字変換とセットで使うのが一般的かな?) ※文末に「dm」における変換テーブルを記載していますので、参考にしてください。 15)ATOKの辞書出力から半角アルファベット辞書生成(/T) ※ 新機能 ※ このオプションによって、ATOKの辞書ユーティリティーの単語出力機能で出力された ATOK辞書の内容を半角アルファベットの辞書に変換します。(漢字や品詞等の余分な データは削除すると共に、重複データも削除しています) これによって、一気に十数万語の国内用辞書が出来上がることでしょう(笑)。 16)パスワード抽出(/P) ←この機能の名称に過剰な期待をしてはいけません(笑)。 このオプションによって、Johnの-showオプションによる出力ファイルや、 john.pod / jack.podからパスワードを抽出することができます。 ヒットした単語を収集するためのオプションとして利用して下さい。 17)UNIX形式の改行コードへの変換(/X) このオプションによって、改行コードをUNIX形式(LF)に変換します。 18)Mac形式の改行コードへの変換(/M) このオプションによって、改行コードをMac形式(CR)に変換します。 (私には不要ですが...(笑)) 19)その他 機能についての補足説明 10MB超とか100MB超とかの巨大辞書を育成されている猛者もおられますが、 「dm」はこんな巨大辞書にもちゃんと対応しています。 ただし、1単語の長さが255文字を超えるような、非常識な(笑)単語が含まれて いる辞書では正常に動作しませんのでご注意を。(仕様です。対応するつもりはあり ません)。 (3)使い方 下記のとおりです。(ロングファイルネームには対応してませんのであしからず) dm [ファイル名][オプション] オプション:/W or /w 重複単語の削除(事前にSORTが必要です) /S or /s 小文字変換 /L or /l 大文字変換 /C or /c キャピタル変換 /Un or /un 文字数上限値(n=1〜99)(nを超える文字は削除) /Vm or /vm 文字数下限値(m=1〜n)(mに満たない単語は削除) /- 単語の先頭&末尾のスペースを削除 /= 単語中の全てのスペースを削除 /A or /a アルファベット以外を削除 /B or /b アルファベット&数字以外を削除 /R or /r 全角のかな&カナのローマ字変換 /H or /h 全角の数字&記号の半角変換 /T or /t ATOKの辞書出力から半角アルファベット辞書生成 /P or /p パスワード抽出 /X or /x UNIX形式の改行コードに変換 /M or /m Mac 形式の改行コードに変換 /1 メタオプション1 ( /w /s /- /u8 と同一機能) /2 メタオプション2 ( /w /s /- と同一機能) (辞書の育成方針については各人様々でしょうが、おそらく( /w /s /- /u8 )か、 あるいは( /w /s /- )で使用されるケースが多いと思いますので、そのための メタオプション /1,/2 も用意しました。(ちなみに私は /1 の方です)) 実行結果は標準出力(つまりディスプレイ)に出力されます。 ファイルに落とすには、リダイレクトを利用して下さい。 使用例:dm dic.txt /w /s /u8 > mydic.txt (dic.txtの内容に対して、重複単語削除&小文字変換&8文字制限を行い、 mydic.txtのファイルとして出力) (4)使用条件をずらずらと...。 「dm」の著作権は私doppが有しています(こんなモノにも著作権を主張(笑))。 「dm」はフリーウェアです。頒布・転載等はご自由に行って頂いて構いません。 「dm」に対して逆アセンブル等を行うことを固く禁じます!! (だって私のプログラミングスキルがバレるじゃん。(苦笑)) 「dm」は、国内法に基づき、法令の定める範囲内で使用する事を推奨します。 「dm」を所持あるいは使用することによって生じる損害等について、私doppは一切責任 を負いません。 --------------- バージョンアップ遍歴 (アプリに歴史あり...(笑)) ------------------- Ver0.10 昔作った重複単語削除プログラムと文字数制限プログラムを統合してみた Ver0.20 それっぽい機能を追加して、とりあえず初公開 Ver0.30 スペースの削除を2通りに細分化 メタオプションの追加 Ver0.40 漢字コードを正確に削除できるように対応 文字数下限機能追加 アルファベット・数字以外の削除機能追加 全体のルーチンを見直し、再構築 Ver0.50 ローマ字変換機能追加 数字&記号の半角変換機能追加 パスワード抽出機能追加 オプションの記号変更 ( /_ → /= ) ファイル名を正しく認識しないバグの修正 デフォルトの文字数制限を128文字から250文字に変更してみる Ver0.50a ドキュメントを書き換えて、一般公開。 Ver0.60 ATOKの辞書出力から半角アルファベット辞書を生成する機能追加 ---------------------------------------------------------------------------- 以下、参考までに...   ひらがな&カタカナのローマ字変換ってかなりやっかいですねぇ。  ローマ字標記の方法も様々ですし(例:「し」→「si」or「shi」)、  そもそも変換困難なもの(例:「あっ」→「???」)もあります。  好みの問題でもある訳ですが、とりあえず、「dm」では下記の変換テーブル  に示すルールで変換しています。  (この辺、ユーザー定義出来るようにすると良いのかもしれませんが、   そこまではやっていません。) ;----------------------------------------------------------- ; 文字変換テーブル ;----------------------------------------------------------- TBL_CODEW DB '0/1/2/3/4/5/6/7/8/9/' DB ' /,/./:/;/?/!/´/`/^/ ̄/_///|/‘/’/“/”/' DB '(/)/〔/〕/[/]/{/}/【/】/' DB '+/−/=/</>/¥/$/%/#/&/*/@/' DB 'A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/' DB 'a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z#' TBL_CODEH DB '0/1/2/3/4/5/6/7/8/9/' DB ' /,/./:/;/?/!/`/`/^/~/_///|/'/'"/"/' DB '(/)/[/]/[/]/{/}/[/]/' DB '+/-/=//\/$/%/#/&/*/@/' DB 'A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/' DB 'a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/' TBL_KATA DB 'ア/イ/ウ/エ/オ/' DB 'カ/キ/ク/ケ/コ/' DB 'サ/シ/ス/セ/ソ/' DB 'タ/チ/ツ/テ/ト/' DB 'ナ/ニ/ヌ/ネ/ノ/' DB 'ハ/ヒ/フ/ヘ/ホ/' DB 'マ/ミ/ム/メ/モ/' DB 'ヤ/ユ/ヨ/' DB 'ラ/リ/ル/レ/ロ/' DB 'ワ/ヲ/ン/' DB 'ガ/ギ/グ/ゲ/ゴ/' DB 'ザ/ジ/ズ/ゼ/ソ/' DB 'ダ/ヂ/ヅ/デ/ド/' DB 'バ/ビ/ブ/ベ/ボ/' DB 'パ/ピ/プ/ペ/ポ/' DB 'ァ/ィ/ゥ/ェ/ォ/' DB 'ッ/ャ/ュ/ョ/ヮ/' DB 'ヰ/ヱ/ヴ/ヵ/ヶ#' TBL_HIRA DB 'あ/い/う/え/お/' DB 'か/き/く/け/こ/' DB 'さ/し/す/せ/そ/' DB 'た/ち/つ/て/と/' DB 'な/に/ぬ/ね/の/' DB 'は/ひ/ふ/へ/ほ/' DB 'ま/み/む/め/も/' DB 'や/ゆ/よ/' DB 'ら/り/る/れ/ろ/' DB 'わ/を/ん/' DB 'が/ぎ/ぐ/げ/ご/' DB 'ざ/じ/ず/ぜ/ぞ/' DB 'だ/ぢ/づ/で/ど/' DB 'ば/び/ぶ/べ/ぼ/' DB 'ぱ/ぴ/ぷ/ぺ/ぽ/' DB 'ぁ/ぃ/ぅ/ぇ/ぉ/' DB 'っ/ゃ/ゅ/ょ/ゎ/' DB 'ゐ/ゑ/う゛/か/け/' TBL_KANA DB 'っか/っき/っく/っけ/っこ/' DB 'っさ/っし/っす/っせ/っそ/' DB 'った/っち/っつ/って/っと/' DB 'っが/っぎ/っぐ/っげ/っご/' DB 'っざ/っじ/っず/っぜ/っぞ/' DB 'っだ/っぢ/っづ/っで/っど/' DB 'っば/っび/っぶ/っべ/っぼ/' DB 'っぱ/っぴ/っぷ/っぺ/っぽ/' DB 'う゛ぁ/う゛ぃ/う゛/う゛ぇ/う゛ぉ/' DB 'うぁ/うぃ/うぅ/うぇ/うぉ/' DB 'てぃ/でぃ/' DB 'きゃ/きぃ/きゅ/きぇ/きょ/' DB 'しゃ/しぃ/しゅ/しぇ/しょ/' DB 'ちゃ/ちぃ/ちゅ/ちぇ/ちょ/' DB 'にゃ/にぃ/にゅ/にぇ/にょ/' DB 'ひゃ/ひぃ/ひゅ/ひぇ/ひょ/' DB 'みゃ/みゅ/みょ/' DB 'りゃ/りぃ/りゅ/りぇ/りょ/' DB 'ぎゃ/ぎぃ/ぎゅ/ぎぇ/ぎょ/' DB 'じゃ/じぃ/じゅ/じぇ/じょ/' DB 'ぢゃ/ぢぃ/ぢゅ/ぢぇ/ぢょ/' DB 'びゃ/びぃ/びゅ/びぇ/びょ/' DB 'ぴゃ/ぴぃ/ぴゅ/ぴぇ/ぴょ/' DB 'ふぁ/ふぃ/ふぅ/ふぇ/ふぉ/' DB 'あ/い/う/え/お/' DB 'か/き/く/け/こ/' DB 'さ/し/す/せ/そ/' DB 'た/ち/つ/て/と/' DB 'な/に/ぬ/ね/の/' DB 'は/ひ/ふ/へ/ほ/' DB 'ま/み/む/め/も/' DB 'や/ゆ/よ/' DB 'ら/り/る/れ/ろ/' DB 'わ/を/ん/' DB 'が/ぎ/ぐ/げ/ご/' DB 'ざ/じ/ず/ぜ/ぞ/' DB 'だ/ぢ/づ/で/ど/' DB 'ば/び/ぶ/べ/ぼ/' DB 'ぱ/ぴ/ぷ/ぺ/ぽ/' DB 'ぁ/ぃ/ぅ/ぇ/ぉ/' DB 'っ/ゃ/ゅ/ょ/ゎ/' DB 'ゐ/ゑ/' DB 'aー/iー/uー/eー/oー#' TBL_ROME DB 'kka/kki/kku/kke/kko/' DB 'ssa/ssi/ssu/sse/sso/' DB 'tta/tti/ttu/tte/tto/' DB 'gga/ggi/ggu/gge/ggo/' DB 'zza/jji/zzu/zze/zzo/' DB 'dda/jji/ddu/dde/ddo/' DB 'bba/bbi/bbu/bbe/bbo/' DB 'ppa/ppi/ppu/ppe/ppo/' DB 'va/vi/vu/ve/vo/' DB 'wa/wi/wu/we/wo/' DB 'tyi/dyi/' DB 'kya/kyi/kyu/kye/kyo/' DB 'sha/shi/shu/she/sho/' DB 'cha/chi/chu/che/cho/' DB 'nya/nyi/nyu/nye/nyo/' DB 'hya/hyi/hyu/hye/hyo/' DB 'mya/myu/myo/' DB 'rya/ryi/ryu/rye/ryo/' DB 'gya/gyi/gyu/gye/gyo/' DB 'ja/ji/ju/je/jo/' DB 'ja/ji/ju/je/jo/' DB 'bya/byi/byu/bye/byo/' DB 'pya/pyi/pyu/pye/pyo/' DB 'fa/fi/fu/fe/fo/' DB 'a/i/u/e/o/' DB 'ka/ki/ku/ke/ko/' DB 'sa/shi/su/se/so/' DB 'ta/chi/tsu/te/to/' DB 'na/ni/nu/ne/no/' DB 'ha/hi/fu/he/ho/' DB 'ma/mi/mu/me/mo/' DB 'ya/yu/yo/' DB 'ra/ri/ru/re/ro/' DB 'wa/o/n/' DB 'ga/gi/gu/ge/go/' DB 'za/ji/zu/ze/zo/' DB 'da/ji/zu/de/do/' DB 'ba/bi/bu/be/bo/' DB 'pa/pi/pu/pe/po/' DB 'a/i/u/e/o/' DB 'tu/ya/yu/yo/wa/' DB 'i/e/' DB 'aa/ii/uu/ee/oh/' --- 以上 --