OSDN Git Service

既存の変換コードをUTF-8形式の辞書に対応させた。
authorYAMASHIRO, Jun <yamajun@ofug.net>
Sun, 11 May 2014 04:52:20 +0000 (13:52 +0900)
committerYAMASHIRO, Jun <yamajun@ofug.net>
Sun, 11 May 2014 04:52:20 +0000 (13:52 +0900)
* スクリプトの文字コードの変更(EUC-JP -> UTF-8)
* JIS X 0208 に無い文字のフィルターを実装(「〓あり」コメントが必要)
* MS-IME: 辞書内へのコメントへの対応
* ATOK13, Canna(Anthy), MS-IME: UTF-8 出力への対応

script/ccount.pl
script/oki2atk.pl
script/oki2canna.pl
script/oki2cha.pl
script/oki2jis.pl
script/oki2kotoeri.pl
script/oki2msime.pl
script/oki2vje.pl

index 1b5c245..cfde7ab 100755 (executable)
@@ -1,25 +1,26 @@
 #!/usr/bin/perl
 #
-# ccount.pl - ²­Æì¼­½ñ¤ÎÉÊ»ì°À­¤ò¼ïÎऴ¤È¤Ë½¸·×
+# ccount.pl - 沖縄辞書の品詞属性を種類ごとに集計
 #
 #              $Id: ccount.pl,v 1.5 2002/06/16 04:31:52 void Exp $
 #
-#     $ nkf -e *.dic | ./ccount.pl | sort | uniq -c
+#     $ cat ../*.dic | ./ccount.pl | sort | uniq -c
 require 5.6.0;
+require 'ODIC.pm';
 use strict;
 our $phonate;
 our $word;
 our $class;
 
 while (<>) {
-       s/#.*$//;               # `#'°Ü¹Ô¤ò¼è¤êµî¤ë
-       next if (/^\s*$/);      # ¤½¤Î·ë²Ì¶õ¹Ô¤Ë¤Ê¤Ã¤¿¹Ô¤ÏÆɤßÈô¤Ð¤¹¡£
+       s/#.*$//;               # `#'以降を取り去る
+       next if (/^\s*$/);      # その結果空行になった行は読み飛ばす。
        if (/(\S+)\s+(\S+)\s+(\S+)/) {
-               $phonate  = $1; # Æɤß
-               $word = $2;     # Ã±¸ì
-               $class = $3;    # ÉÊ»ì
-               &check_phonate;
-               &check_word;
+               $phonate = $1;  # 読み
+               $word    = $2;  # 単語
+               $class   = $3;  # 品詞
+               ODIC::check_phonate($phonate);
+               ODIC::check_word($word);
                &check_class;
        }
        else {
@@ -30,99 +31,77 @@ while (<>) {
 exit 0;
 
 
-sub check_phonate
-{
-       if (length($phonate) > 40) {
-               print STDERR "Warning: $.: too long phonate `$phonate'\n";
-       }
-       if ($phonate =~ /[^¤¢¤¤¤¦¤¨¤ª¤«¤­¤¯¤±¤³¤µ¤·¤¹¤»¤½¤¿¤Á¤Ä¤Æ¤È¤Ê¤Ë¤Ì¤Í¤Î¤Ï¤Ò¤Õ¤Ø¤Û¤Þ¤ß¤à¤á¤â¤é¤ê¤ë¤ì¤í¤¬¤®¤°¤²¤´¤¶¤¸¤º¤¼¤¾¤À¤Â¤Å¤Ç¤É¤Ð¤Ó¤Ö¤Ù¤Ü¤¡¤£¤¥¤§¤©¤Ã¤ç¤ã¤å¤î¤Ñ¤Ô¤×¤Ú¤Ý¤ä¤æ¤è¤ï¤ò¤ó¥ô¡¼]/) {
-               print STDERR "Warning: $.: ilegal character in `$phonate'\n";
-       }
-}
-
-
-sub check_word
-{
-       if (length($word) > 64) {
-               print STDERR "Warning: $.: too long word `$word'\n";
-       }
-       if ($word =~ /[ \t",#]/) {
-               print STDERR "Warning: $.: ilegal character in `$word'\n";
-       }
-}
-
-
 sub check_class {
-       if ($class eq "ÉáÄÌ̾»ì") {
+       if ($class eq "普通名詞") {
                print "$class\n";
        }
-       elsif ($class eq "¥µÊÑ̾»ì") {
+       elsif ($class eq "サ変名詞") {
                print "$class\n";
        }
-       elsif ($class eq "·Áư̾»ì") {
+       elsif ($class eq "形動名詞") {
                print "$class\n";
        }
-       elsif ($class eq "À«") {
+       elsif ($class eq "") {
                print "$class\n";
        }
-       elsif ($class eq "̾") {
+       elsif ($class eq "") {
                print "$class\n";
        }
-       elsif ($class eq "¤½¤Î¾¤Î¿Í̾") {
+       elsif ($class eq "その他の人名") {
                print "$class\n";
        }
-       elsif ($class eq "ñ½ãÃÏ̾") {
+       elsif ($class eq "単純地名") {
                print "$class\n";
        }
-       elsif ($class eq "ÀÜÈø¸ìÉÕ¤­ÃÏ̾") {
+       elsif ($class eq "接尾語付き地名") {
                print "$class\n";
        }
-       elsif ($class eq "ÁÈ¿¥Ì¾") {
+       elsif ($class eq "組織名") {
                print "$class\n";
        }
-       elsif ($class eq "¤½¤Î¾¸Çͭ̾»ì") {
+       elsif ($class eq "その他固有名詞") {
                print "$class\n";
        }
-       elsif ($class eq "Éû»ì") {
+       elsif ($class eq "副詞") {
                print "$class\n";
        }
-       elsif ($class eq "Àܳ»ì") {
+       elsif ($class eq "接続詞") {
                print "$class\n";
        }
-       elsif ($class eq "´¶Æ°»ì") {
+       elsif ($class eq "感動詞") {
                print "$class\n";
        }
-       elsif ($class eq "·ÁÍÆ»ì") {
+       elsif ($class eq "形容詞") {
                print "$class\n";
        }
-       elsif ($class eq "·ÁÍÆÆ°»ì") {
+       elsif ($class eq "形容動詞") {
                print "$class\n";
        }
-       elsif ($class eq "ÀÜƬ¸ì") {
+       elsif ($class eq "接頭語") {
                print "$class\n";
        }
-       elsif ($class eq "¿ô»úÎóÀÜƬ¸ì") {
+       elsif ($class eq "数字列接頭語") {
                print "$class\n";
        }
-       elsif ($class eq "ÀÜÈø¸ì") {
+       elsif ($class eq "接尾語") {
                print "$class\n";
        }
-       elsif ($class eq "¿Í̾ÀÜÈø¸ì") {
+       elsif ($class eq "人名接尾語") {
                print "$class\n";
        }
-       elsif ($class eq "ÃÏ̾ÀÜÈø¸ì") {
+       elsif ($class eq "地名接尾語") {
                print "$class\n";
        }
-       elsif ($class eq "ÁÈ¿¥Ì¾ÀÜÈø¸ì") {
+       elsif ($class eq "組織名接尾語") {
                print "$class\n";
        }
-       elsif ($class eq "¿ô»úÎóÀÜÈø¸ì") {
+       elsif ($class eq "数字列接尾語") {
                print "$class\n";
        }
-       elsif ($class eq "À®¶ç") {
+       elsif ($class eq "成句") {
                print "$class\n";
        }
-       elsif ($class eq "̵ÉÊ»ì") {
+       elsif ($class eq "無品詞") {
                print "$class\n";
        }
        else {
index 4f1cc1d..37b5788 100755 (executable)
@@ -1,45 +1,71 @@
 #!/usr/bin/perl
 #
-# oki2atk.pl - ²­Æì¼­½ñ¤Î¥Õ¥¡¥¤¥ë¤òATOK13·Á¼°¤ËÊÑ´¹¤¹¤ë¡£
+# oki2atk.pl - 沖縄辞書のファイルをATOK13形式に変換する。
 #
 #                                                         yonesu@syon.co.jp
 #
-# ¤³¤Î¥¹¥¯¥ê¥×¥È¤ò»È¤Ã¤Æ¡¢°Ê²¼¤Î¤è¤¦¤Ë¡Öokinawa.txt¡×¤òÀ¸À®¤·¤Æ¤ª¤¤¤Æ¡¢
-#     $ nkf -e *.dic | ./oki2atk.pl | sort -u | nkf -s > okinawa.txt
-#  ATOK13¤Î¼­½ñ¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤òµ¯Æ°¤·¡¢
-# ¡Ö°ì³ç½èÍý]-¡Öñ¸ì°ì³ç½èÍý¡×¤Î¡Öñ¸ì¥Õ¥¡¥¤¥ë(T)¡×¤Ë
-#  okinawa.txt¤ò»ØÄꤷ¡¢¡ÖÅÐÏ¿¡×¤ò²¡²¼¤·¤Æ¤¯¤À¤µ¤¤¡£
+# このスクリプトを使って、以下のように「okinawa.txt」を生成しておいて、
+#     $ cat ../*.dic | ./oki2atk.pl -g | sort -u > okinawa.txt
+#  ATOK13の辞書ユーティリティを起動し、
+# 「一括処理]-「単語一括処理」の「単語ファイル(T)」に
+#  okinawa.txtを指定し、「登録」を押下してください。
+#
+#  「尚灝王」(しょうこうおう)など、JIS X 0208の範囲外の文字が含まれる単語を
+#  辞書にインポートする場合には、UTF-8 で出力してから、Notepad.exeなどで
+#  「Unicode」(UTF-16LE BOM付き)に変換してください。
 #
 #############################################################################
-#                          ATOK13¤Ç¤ÎÉÊ»ìÂηϠ                              #
-#1  Ì¾»ì       2  ¸ÇÍ­¿ÍÀ«     3  ¸ÇÍ­¿Í̾     4  ¸ÇÍ­¿Í¾     5  ¸ÇÍ­ÃÏ̾ #
-#6  ¸ÇÍ­ÁÈ¿¥   7  ¸ÇÍ­¾¦ÉÊ     8  ¸ÇÍ­°ìÈÌ     9  Ì¾»ì¥µÊÑ     10 Ì¾»ì¥¶ÊÑ #
-#11 Ì¾»ì·ÁÆ°   12 Ì¾¥µ·ÁÆ°     13 ¿ô»ì         14 Éû»ì         15 Ï¢Âλ젠 #
-#16 Àܳ»ì     17 ´¶Æ°»ì       18 ÆÈΩ¸ì       19 ÀÜƬ¸ì       20 ´§¿ô»ì   #
-#21 ÀÜÈø¸ì     22 ½õ¿ô»ì       23 ¥«¹Ô¸ÞÃÊ     24 ¥¬¹Ô¸ÞÃÊ     25 ¥µ¹Ô¸ÞÃÊ #
-#26 ¥¿¹Ô¸ÞÃÊ   27 ¥Ê¹Ô¸ÞÃÊ     28 ¥Ð¹Ô¸ÞÃÊ     29 ¥Þ¹Ô¸ÞÃÊ     30 ¥é¹Ô¸ÞÃÊ #
-#31 ¥ï¹Ô¸ÞÃÊ   32 ¥Ï¹Ô»ÍÃÊ     33 °ìÃÊÆ°»ì     34 ¥«ÊÑÆ°»ì     35 ¥µÊÑÆ°»ì #
-#36 ¥¶ÊÑÆ°»ì   37 ·ÁÍƻ젠     38 ·ÁÍƻ쥦     39 ·ÁÍÆÆ°»ì     40 ·ÁÆ°¥¿¥ê #
-#41 Ã±´Á»ú                                                                  #
+#                          ATOK13での品詞体系                               #
+#1  名詞     2  固有人姓 3  固有人名 4  固有人他 5  固有地名 #
+#6  固有組織       7  固有商品 8  固有一般 9  名詞サ変 10 名詞ザ変 #
+#11 名詞形動       12 名サ形動 13 数詞               14 副詞               15 連体詞   #
+#16 接続詞  17 感動詞    18 独立語    19 接頭語    20 冠数詞   #
+#21 接尾語  22 助数詞    23 カ行五段 24 ガ行五段 25 サ行五段 #
+#26 タ行五段       27 ナ行五段 28 バ行五段 29 マ行五段 30 ラ行五段 #
+#31 ワ行五段       32 ハ行四段 33 一段動詞 34 カ変動詞 35 サ変動詞 #
+#36 ザ変動詞       37 形容詞    38 形容詞ウ 39 形容動詞 40 形動タリ #
+#41 単漢字                                                                  #
 #############################################################################
 #
 require 5.6.0;
+require 'ODIC.pm';
 use strict;
+use Getopt::Long qw(:config posix_default no_ignore_case gnu_compat);
+
 our $phonate;
 our $word;
 our $class;
 
+my $help_only;
+my $skip_geta;
+my $utf8_output;
+
+GetOptions(
+    'help|h'      => \$help_only,
+    'skip-geta|g' => \$skip_geta,
+    'utf8|u'      => \$utf8_output
+);
+if (defined($help_only)) {
+    print STDERR "usage: $0 [--help|-h] [--skip-geta|-g] [--utf8-output|-u]\n";
+    exit 1;
+}
+
 &header;
 
 while (<>) {
-       s/#.*$//;               # `#'°Ü¹Ô¤ò¼è¤êµî¤ë
-       next if (/^\s*$/);      # ¤½¤Î·ë²Ì¶õ¹Ô¤Ë¤Ê¤Ã¤¿¹Ô¤ÏÆɤßÈô¤Ð¤¹¡£
+       # JIS X 0208 に含まれていない文字を含む行を読み飛ばす
+       # 読み飛ばしにはコメントに「〓あり」マーカーが必要
+       next if (defined($skip_geta) && /〓あり/);
+
+       s/#.*$//;               # `#'以降を取り去る
+       next if (/^\s*$/);      # その結果空行になった行は読み飛ばす。
+
        if (/(\S+)\s+(\S+)\s+(\S+)/) {
-               $phonate  = $1; # Æɤß
-               $word = $2;     # Ã±¸ì
-               $class = $3;    # ÉÊ»ì
-               &check_phonate;
-               &check_word;
+               $phonate = $1;  # 読み
+               $word    = $2;  # 単語
+               $class   = $3;  # 品詞
+               ODIC::check_phonate($phonate);
+               ODIC::check_word($word);
                &convert_class;
        }
        else {
@@ -51,106 +77,92 @@ while (<>) {
 exit 0;
 
 
-sub check_phonate
-{
-       if (length($phonate) > 40) {
-               print STDERR "Warning: $.: too long phonate `$phonate'\n";
-       }
-       if ($phonate =~ /[^¤¢¤¤¤¦¤¨¤ª¤«¤­¤¯¤±¤³¤µ¤·¤¹¤»¤½¤¿¤Á¤Ä¤Æ¤È¤Ê¤Ë¤Ì¤Í¤Î¤Ï¤Ò¤Õ¤Ø¤Û¤Þ¤ß
-¤à¤á¤â¤é¤ê¤ë¤ì¤í¤¬¤®¤°¤²¤´¤¶¤¸¤º¤¼¤¾¤À¤Â¤Å¤Ç¤É¤Ð¤Ó¤Ö¤Ù¤Ü¤¡¤£¤¥¤§¤©¤Ã¤ç¤ã¤å¤î¤Ñ¤Ô¤×¤Ú¤Ý¤ä¤æ
-¤è¤ï¤ò¤ó¥ô¡¼]/) {
-               print STDERR "Warning: $.: ilegal character in `$phonate'\n";
-       }
-}
-
-
-sub check_word
-{
-       if (length($word) > 64) {
-               print STDERR "Warning: $.: too long word `$word'\n";
-       }
-       if ($word =~ /[ \t",#]/) {
-               print STDERR "Warning: $.: ilegal character in `$word'\n";
-       }
-}
-
-
 sub convert_class {
-       if ($class eq "ÉáÄÌ̾»ì") {
-               print "$phonate\t$word\t 1 \n";
+       if ($class eq "普通名詞") {
+               $class = 1;
        }
-       elsif ($class eq "¥µÊÑ̾»ì") {
-               print "$phonate\t$word\t 9 \n";
+       elsif ($class eq "サ変名詞") {
+               $class = 9;
        }
-       elsif ($class eq "·Áư̾»ì") {
-               print "$phonate\t$word\t 11 \n";
+       elsif ($class eq "形動名詞") {
+               $class = 11;
        }
-       elsif ($class eq "À«") {
-               print "$phonate\t$word\t 2 \n";
+       elsif ($class eq "") {
+               $class = 2;
        }
-       elsif ($class eq "̾") {
-               print "$phonate\t$word\t 3 \n";
+       elsif ($class eq "") {
+               $class = 3;
        }
-       elsif ($class eq "¤½¤Î¾¤Î¿Í̾") {
-               print "$phonate\t$word\t 4 \n";
+       elsif ($class eq "その他の人名") {
+               $class = 4;
        }
-       elsif ($class eq "ñ½ãÃÏ̾") {
-               print "$phonate\t$word\t 5 \n";
+       elsif ($class eq "単純地名") {
+               $class = 5;
        }
-       elsif ($class eq "ÀÜÈø¸ìÉÕ¤­ÃÏ̾") {
-               print "$phonate\t$word\t 5 \n";
+       elsif ($class eq "接尾語付き地名") {
+               $class = 5;
        }
-       elsif ($class eq "ÁÈ¿¥Ì¾") {
-               print "$phonate\t$word\t 6 \n";
+       elsif ($class eq "組織名") {
+               $class = 6;
        }
-       elsif ($class eq "¤½¤Î¾¸Çͭ̾»ì") {
-               print "$phonate\t$word\t 7 \n";
+       elsif ($class eq "その他固有名詞") {
+               $class = 7;
        }
-       elsif ($class eq "Éû»ì") {
-               print "$phonate\t$word\t 14 \n";
+       elsif ($class eq "副詞") {
+               $class = 14;
        }
-       elsif ($class eq "Àܳ»ì") {
-               print "$phonate\t$word\t 16 \n";
+       elsif ($class eq "接続詞") {
+               $class = 16;
        }
-       elsif ($class eq "´¶Æ°»ì") {
-               print "$phonate\t$word\t 17 \n";
+       elsif ($class eq "感動詞") {
+               $class = 17;
        }
-       elsif ($class eq "·ÁÍÆ»ì") {
-               print "$phonate\t$word\t 37 \n";
+       elsif ($class eq "形容詞") {
+               $class = 37;
        }
-       elsif ($class eq "·ÁÍÆÆ°»ì") {
-               print "$phonate\t$word\t 39 \n";
+       elsif ($class eq "形容動詞") {
+               $class = 39;
        }
-       elsif ($class eq "ÀÜƬ¸ì") {
-               print "$phonate\t$word\t 19 \n";
+       elsif ($class eq "接頭語") {
+               $class = 19;
        }
-       elsif ($class eq "¿ô»úÎóÀÜƬ¸ì") {
-               print "$phonate\t$word\t 20 \n";
+       elsif ($class eq "数字列接頭語") {
+               $class = 20;
        }
-       elsif ($class eq "ÀÜÈø¸ì") {
-               print "$phonate\t$word\t 21 \n";
+       elsif ($class eq "接尾語") {
+               $class = 21;
        }
-       elsif ($class eq "¿Í̾ÀÜÈø¸ì") {
-               print "$phonate\t$word\t 21 \n";
+       elsif ($class eq "人名接尾語") {
+               $class = 21;
        }
-       elsif ($class eq "ÃÏ̾ÀÜÈø¸ì") {
-               print "$phonate\t$word\t 21 \n";
+       elsif ($class eq "地名接尾語") {
+               $class = 21;
        }
-       elsif ($class eq "ÁÈ¿¥Ì¾ÀÜÈø¸ì") {
-               print "$phonate\t$word\t 21 \n";
+       elsif ($class eq "組織名接尾語") {
+               $class = 21;
        }
-       elsif ($class eq "¿ô»úÎóÀÜÈø¸ì") {
-               print "$phonate\t$word\t 13 \n";
+       elsif ($class eq "数字列接尾語") {
+               $class = 13;
        }
-       elsif ($class eq "À®¶ç") {
-               print "$phonate\t$word\t 1 \n";
+       elsif ($class eq "成句") {
+               $class = 1;
        }
-       elsif ($class eq "̵ÉÊ»ì") {
-               print "$phonate\t$word\t 41 \n";
+       elsif ($class eq "無品詞") {
+               $class = 41;
        }
        else {
                print STDERR "Error: $.: unknown class `$class': $phonate\t$word\n";
-               print "$phonate\t$word\t¡Î¢®¡Ï\n";
+               if (defined($utf8_output)) {
+                       print "$phonate\t$word\t[〓]\r\n";
+               } else {
+                       print ODIC::to_shiftjis("$phonate\t$word\t[〓]\r\n");
+               }
+               return;
+       }
+       if (defined($utf8_output)) {
+               print "$phonate\t$word\t $class \r\n";
+       } else {
+               print ODIC::to_shiftjis("$phonate\t$word\t $class \r\n");
        }
 }
 
@@ -165,10 +177,14 @@ sub version {
        ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
        $year += 1900;
        $mon++;
-       print "¤ª¤­¤Ê¤ï¤¸¤·¤ç¤Î¤Ò¤Å¤±\t$year/$mon/$mday(²­Æì¼­½ñ¤ÎÆüÉÕ¤±)\t¡Î̾»ì¡Ï\n";
+       if (defined($utf8_output)) {
+               print "おきなわじしょのひづけ\t$year/$mon/$mday(沖縄辞書の日付け)\t 1 \r\n";
+       } else {
+               print ODIC::to_shiftjis("おきなわじしょのひづけ\t$year/$mon/$mday(沖縄辞書の日付け)\t 1 \r\n");
+       }
 }
 
 sub header {
-       print "!!DICUT16\n";
+       print "!!DICUT16\r\n";
 }
 
index 70e6cbf..2bfd101 100755 (executable)
 #!/usr/bin/perl
 #
-# oki2canna.pl - ²­Æì¼­½ñ¤Î¥Õ¥¡¥¤¥ë¤òCanna¤Ë»ý¤Ã¤Æ¹Ô¤¯¤¿¤á¤Î¥¹¥¯¥ê¥×¥È
-#                                                      ¿ð·ÄÍ÷ä
-#              $Id: oki2canna.pl,v 1.18 2005/11/03 01:49:40 void Exp $
-# »ÈÍÑÎã:
-#    $ nkf -e *.dic | ./oki2canna.pl | sort -u > okinawa.txt
+# oki2canna.pl - 沖縄辞書のファイルをCanna/Anthyに持って行くためのスクリプト
+#                                                      瑞慶覧辰
+#
+# 使用例:
+# Canna向け
+#    $ cat ../*.dic | ./oki2canna.pl -g | nkf -e | sort -u > okinawa.txt
 #    $ mkbindic okinawa.txt
-require 5.6.0;
+#
+# Anthyユーザー辞書向け
+#    $ cat ../*.dic | ./oki2canna.pl |
+#      env LANG=C sort -u > ~/.anthy/imported_words_default.d/okinawa.t
+#
+# 品詞一覧
+# anthy-9100h/src-worddic/wtab.h
+#
+# Canna37p3/cmd/wtoc/wtoc.c
+# Canna37p3/dic/ideo/grammar/main.code
+# Canna37p3/doc/man/guide/tex/hinshi.tex
+
+require 'ODIC.pm';
 use strict;
-our $phonate;
-our $word;
-our $class;
+use feature 'switch';
+use Getopt::Long qw(:config posix_default no_ignore_case gnu_compat);
+
+my $help_only;
+my $skip_geta;
+
+GetOptions(
+    'help|h' => \$help_only,
+    'skip-geta|g' => \$skip_geta
+);
+if (defined($help_only)) {
+    print STDERR "usage: $0 [--help|-h] [--skip-geta|-g]\n";
+    exit 1;
+}
 
 while (<>) {
-       s/#.*$//;               # `#'°Ê¹ß¤ò¼è¤êµî¤ë
-       next if (/^\s*$/);      # ¤½¤Î·ë²Ì¶õ¹Ô¤Ë¤Ê¤Ã¤¿¹Ô¤ÏÆɤßÈô¤Ð¤¹¡£
-       if (/(\S+)\s+(\S+)\s+(\S+)/) {
-               $phonate  = $1; # Æɤß
-               $word = $2;     # Ã±¸ì
-               $class = $3;    # ÉÊ»ì
-               &check_phonate;
-               &check_word;
-               &convert_class;
-       }
-       else {
-               print STDERR "Error: $.: too few field number `$_'\n";
-               print  "$_";
-       }
+    next if (/^\s*$|^\s*\#.*$/);       # 空行・コメントのみの行を読み飛ばす
+
+    # JIS X 0208 に含まれていない文字を含む行を読み飛ばす
+    # 読み飛ばしにはコメントに「〓あり」マーカーが必要
+    next if (defined($skip_geta) && /〓あり/);
+
+    if (/^(\S+)\s+(\S+)\s+(\S+)\s+#\s*([[:^cntrl:]]*).*$/) {
+       my $phonate = $1;       # 読み
+       my $word    = $2;       # 単語
+       my $class   = $3;       # 品詞
+
+       ODIC::check_phonate($phonate);
+       ODIC::check_word($word);
+       &print_dictionary($phonate, $word, $class);
+
+    } elsif (/^(\S+)\s+(\S+)\s+(\S+)/) {
+       my $phonate = $1;       # 読み
+       my $word    = $2;       # 単語
+       my $class   = $3;       # 品詞
+
+       ODIC::check_phonate($phonate);
+       ODIC::check_word($word);
+       &print_dictionary($phonate, $word, $class);
+
+    } else {
+       print STDERR "Error: $.: too few field number `$_'\n";
+       print  "$_";
+    }
 }
+
 &version;
 exit 0;
 
 
-sub check_phonate
-{
-       if (length($phonate) > 40) {
-               print STDERR "Warning: $.: too long phonate `$phonate'\n";
-       }
-       if ($phonate =~ /[^¤¢¤¤¤¦¤¨¤ª¤«¤­¤¯¤±¤³¤µ¤·¤¹¤»¤½¤¿¤Á¤Ä¤Æ¤È¤Ê¤Ë¤Ì¤Í¤Î¤Ï¤Ò¤Õ¤Ø¤Û¤Þ¤ß¤à¤á¤â¤é¤ê¤ë¤ì¤í¤¬¤®¤°¤²¤´¤¶¤¸¤º¤¼¤¾¤À¤Â¤Å¤Ç¤É¤Ð¤Ó¤Ö¤Ù¤Ü¤¡¤£¤¥¤§¤©¤Ã¤ç¤ã¤å¤î¤Ñ¤Ô¤×¤Ú¤Ý¤ä¤æ¤è¤ï¤ò¤ó¥ô¡¼]/) {
-               print STDERR "Warning: $.: ilegal character in `$phonate'\n";
-       }
-}
+sub print_dictionary {
+    my $phonate = shift;
+    my $word    = shift;
+    my $class   = shift;
 
+    given ($class) {
+       when ('普通名詞')   { $class = '#T35'; }
+       when ('サ変名詞')   { $class = '#T30'; }
+       when ('形動名詞')   { $class = '#T05'; }
+       when ('姓')            { $class = '#JNS'; }
+       when ('名')            { $class = '#JNM'; }
+       when ('その他の人名')     { $class = '#JN'; }
+       when ('単純地名')   { $class = '#CN'; }
+       when ('接尾語付き地名')  { $class = '#CNS'; }
+       when ('組織名')              { $class = '#KK'; }
+       when ('その他固有名詞')  { $class = '#KK'; }
+       when ('副詞')         { $class = '#F04'; }
+       when ('接続詞')              { $class = '#CJ'; }
+       when ('感動詞')              { $class = '#CJ'; }
+       when ('形容詞')              { $class = '#KY'; }
+       when ('形容動詞')   { $class = '#T05'; }
+       when ('接頭語')              { $class = '#PRE'; }
+       when ('数字列接頭語')     { $class = '#JS'; }
+       when ('接尾語')              { $class = '#SUC'; }
+       when ('人名接尾語')        { $class = '#JNSUC'; }
+       when ('地名接尾語')        { $class = '#CNSUC1'; }
+       when ('組織名接尾語')     { $class = '#SUC'; }
+       when ('数字列接尾語')     { $class = '#SUC'; }
+       when ('成句')         { $class = '#KJ'; }
+       when ('無品詞')              { $class = '#KJ'; }
+       default {
+           print STDERR "Error: $.: unknown class `$class': $phonate\t$word\n";
+           print "$phonate 〓 $word\n";
+       }
+    }
 
-sub check_word
-{
-       if (length($word) > 64) {
-               print STDERR "Warning: $.: too long word `$word'\n";
-       }
-       if ($word =~ /[ \t",#]/) {
-               print STDERR "Warning: $.: ilegal character in `$word'\n";
-       }
+    print "$phonate $class $word\n";
 }
 
+sub version {
+    my $class = shift;
 
-sub convert_class {
-       if ($class eq "ÉáÄÌ̾»ì") {
-               print "$phonate #T35 $word\n";
-       }
-       elsif ($class eq "¥µÊÑ̾»ì") {
-               print "$phonate #T30 $word\n";
-       }
-       elsif ($class eq "·Áư̾»ì") {
-               print "$phonate #T05 $word\n";
-       }
-       elsif ($class eq "À«") {
-               print "$phonate #JNS $word\n";
-       }
-       elsif ($class eq "̾") {
-               print "$phonate #JNM $word\n";
-       }
-       elsif ($class eq "¤½¤Î¾¤Î¿Í̾") {
-               print "$phonate #JN $word\n";
-       }
-       elsif ($class eq "ñ½ãÃÏ̾") {
-               print "$phonate #CN $word\n";
-       }
-       elsif ($class eq "ÀÜÈø¸ìÉÕ¤­ÃÏ̾") {
-               print "$phonate #CN $word\n";
-       }
-       elsif ($class eq "ÁÈ¿¥Ì¾") {
-               print "$phonate #KK $word\n";
-       }
-       elsif ($class eq "¤½¤Î¾¸Çͭ̾»ì") {
-               print "$phonate #T35 $word\n";          # !!! #CK?  #KK?
-       }
-       elsif ($class eq "Éû»ì") {
-               print "$phonate #F04 $word\n";
-       }
-       elsif ($class eq "Àܳ»ì") {
-               print "$phonate #F04 $word\n";
-       }
-       elsif ($class eq "´¶Æ°»ì") {
-               print "$phonate #CJ $word\n";
-       }
-       elsif ($class eq "·ÁÍÆ»ì") {
-               print "$phonate #T35 $word\n";          # !!!
-       }
-       elsif ($class eq "·ÁÍÆÆ°»ì") {
-               print "$phonate #T05 $word\n";
-       }
-       elsif ($class eq "ÀÜƬ¸ì") {
-               print "$phonate #PRE $word\n";
-       }
-       elsif ($class eq "¿ô»úÎóÀÜƬ¸ì") {
-               print "$phonate #PRE $word\n";
-       }
-       elsif ($class eq "ÀÜÈø¸ì") {
-               print "$phonate #T35 $word\n";          # !!!
-       }
-       elsif ($class eq "¿Í̾ÀÜÈø¸ì") {
-               print "$phonate #T35 $word\n";          # !!!
-       }
-       elsif ($class eq "ÃÏ̾ÀÜÈø¸ì") {
-               print "$phonate #T35 $word\n";          # !!!
-       }
-       elsif ($class eq "ÁÈ¿¥Ì¾ÀÜÈø¸ì") {
-               print "$phonate #T35 $word\n";          # !!!
-       }
-       elsif ($class eq "¿ô»úÎóÀÜÈø¸ì") {
-               print "$phonate #T35 $word\n";          # !!!
-       }
-       elsif ($class eq "À®¶ç") {
-               print "$phonate #T35 $word\n";          # !!!
-       }
-       elsif ($class eq "̵ÉÊ»ì") {
-               print "$phonate #KJ $word\n";
-       }
-       else {
-               print STDERR "Error: $.: unknown class `$class': $phonate\t$word\n";
-               print "$phonate ¢® $word\n";
-       }
-}
+    my $sec;
+    my $min;
+    my $hour;
+    my $mday;
+    my $mon;
+    my $year;
 
-sub version {
-       my $sec;
-       my $min;
-       my $hour;
-       my $mday;
-       my $mon;
-       my $year;
-
-       ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
-       $year += 1900;
-       $mon++;
-       print "¤ª¤­¤Ê¤ï¤¸¤·¤ç¤Î¤Ò¤Å¤± #T35 $year/$mon/$mday(²­Æì¼­½ñ¤ÎÆüÉÕ¤±)\n";       # !!!
+    ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
+    $year += 1900;
+    $mon++;
+    print "おきなわじしょのひづけ #T35 $year/$mon/$mday(沖縄辞書の日付け)\n";
 }
+
index de9caef..062be83 100755 (executable)
@@ -1,32 +1,50 @@
 #!/usr/bin/perl
 #
-# oki2cha.pl - ²­Æì¼­½ñ¤Î¥Õ¥¡¥¤¥ë¤òÃã䥤ǻȤ¨¤ë·Á¼°¤Î¥Æ¥­¥¹¥È¤ËÊÑ´¹¤¹¤ë
+# oki2cha.pl - 沖縄辞書のファイルを茶筌で使える形式のテキストに変換する
 #
 #              $Id: oki2cha.pl,v 1.3 2003/04/25 06:15:56 void Exp $
 #
-# ¤³¤Î¥¹¥¯¥ê¥×¥È¤ò»È¤Ã¤Æ¡¢°Ê²¼¤Î¤è¤¦¤Ë¡Öokinawa.dic¡×¤òÀ¸À®¤·¤Æ¤¯¤À¤µ¤¤¡£
-#     $ nkf -e *.dic | ./oki2cha.pl > okinawa.dic
+# このスクリプトを使って、以下のように「okinawa.dic」を生成してください。
+#     $ cat ../*.dic | ./oki2cha.pl > okinawa.dic
 #     $ /usr/local/libexec/chasen/makeint okinawa.dic > okinawa.txt
 #     $ /usr/local/libexec/chasen/sortdic okinawa.txt > okinawa.int
 #     $ /usr/local/libexec/chasen/pattool -F okinawa
 #     $ rm okinawa.txt
 require 5.6.0;
+require 'ODIC.pm';
 use strict;
+use Getopt::Long qw(:config posix_default no_ignore_case gnu_compat);
+
 our $phonate;
 our $word;
 our $class;
 
-&header;
+my $help_only;
+my $skip_geta;
+
+GetOptions(
+    'help|h' => \$help_only,
+    'skip-geta|g' => \$skip_geta
+);
+if (defined($help_only)) {
+    print STDERR "usage: $0 [--help|-h] [--skip-geta|-g]\n";
+    exit 1;
+}
+
 while (<>) {
-       next if (/@@@/);        # @@@¤Î¤¢¤ë¹Ô¤ÏÆɤßÈô¤Ð¤¹¡£
-       s/#.*$//;               # `#'°Ü¹Ô¤ò¼è¤êµî¤ë
-       next if (/^\s*$/);      # ¤½¤Î·ë²Ì¶õ¹Ô¤Ë¤Ê¤Ã¤¿¹Ô¤ÏÆɤßÈô¤Ð¤¹¡£
+       # JIS X 0208 に含まれていない文字を含む行を読み飛ばす
+       # 読み飛ばしにはコメントに「〓あり」マーカーが必要
+       next if (defined($skip_geta) && /〓あり/);
+
+       next if (/@@@/);        # @@@のある行は読み飛ばす。
+       s/#.*$//;               # `#'以降を取り去る
+       next if (/^\s*$/);      # その結果空行になった行は読み飛ばす。
        if (/(\S+)\s+(\S+)\s+(\S+)/) {
-               $phonate  = $1; # Æɤß
-               $word = $2;     # Ã±¸ì
-               $class = $3;    # ÉÊ»ì
-               &check_phonate;
-               &check_word;
+               $phonate = $1;  # 読み
+               $word    = $2;  # 単語
+               $class   = $3;  # 品詞
+               ODIC::check_phonate($phonate);
+               ODIC::check_word($word);
                &convert_class;
        }
        else {
@@ -38,124 +56,86 @@ while (<>) {
 exit 0;
 
 
-sub check_phonate
-{
-       if (length($phonate) > 40) {
-               print STDERR "Warning: $.: too long phonate `$phonate'\n";
-       }
-       if ($phonate =~ /[^¤¢¤¤¤¦¤¨¤ª¤«¤­¤¯¤±¤³¤µ¤·¤¹¤»¤½¤¿¤Á¤Ä¤Æ¤È¤Ê¤Ë¤Ì¤Í¤Î¤Ï¤Ò¤Õ¤Ø¤Û¤Þ¤ß¤à¤á¤â¤é¤ê¤ë¤ì¤í¤¬¤®¤°¤²¤´¤¶¤¸¤º¤¼¤¾¤À¤Â¤Å¤Ç¤É¤Ð¤Ó¤Ö¤Ù¤Ü¤¡¤£¤¥¤§¤©¤Ã¤ç¤ã¤å¤î¤Ñ¤Ô¤×¤Ú¤Ý¤ä¤æ¤è¤ï¤ò¤ó¥ô¡¼]/) {
-               print STDERR "Warning: $.: ilegal character in `$phonate'\n";
-       }
-}
-
-
-sub check_word
-{
-       if (length($word) > 64) {
-               print STDERR "Warning: $.: too long word `$word'\n";
-       }
-       if ($word =~ /[ \t",#]/) {
-               print STDERR "Warning: $.: ilegal character in `$word'\n";
-       }
-}
-
-
 sub convert_class {
-       if ($class eq "ÉáÄÌ̾»ì") {
-               print "(ÉÊ»ì (̾»ì °ìÈÌ)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       if ($class eq "普通名詞") {
+               print ODIC::to_eucjp("(品詞 (名詞 一般)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "¥µÊÑ̾»ì") {
-               print "(ÉÊ»ì (̾»ì ¥µÊÑÀܳ)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "サ変名詞") {
+               print ODIC::to_eucjp("(品詞 (名詞 サ変接続)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "·Áư̾»ì") {
-               print "(ÉÊ»ì (̾»ì ·ÁÍÆÆ°»ì¸ì´´)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "形動名詞") {
+               print ODIC::to_eucjp("(品詞 (名詞 形容動詞語幹)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "À«") {
-               print "(ÉÊ»ì (̾»ì ¸Çͭ̾»ì ¿Í̾ À«)) ((¸«½Ð¤·¸ì ($word 1000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "") {
+               print ODIC::to_eucjp("(品詞 (名詞 固有名詞 人名 姓)) ((見出し語 ($word 1000)) (読み $phonate))\n")
        }
-       elsif ($class eq "̾") {
-               print "(ÉÊ»ì (̾»ì ¸Çͭ̾»ì ¿Í̾ Ì¾)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "") {
+               print ODIC::to_eucjp("(品詞 (名詞 固有名詞 人名 名)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "¤½¤Î¾¤Î¿Í̾") {
-               print "(ÉÊ»ì (̾»ì ¸Çͭ̾»ì ¿Í̾ °ìÈÌ)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "その他の人名") {
+               print ODIC::to_eucjp("(品詞 (名詞 固有名詞 人名 一般)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "ñ½ãÃÏ̾") {
-               print "(ÉÊ»ì (̾»ì ¸Çͭ̾»ì ÃÏ°è °ìÈÌ)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "単純地名") {
+               print ODIC::to_eucjp("(品詞 (名詞 固有名詞 地域 一般)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "ÀÜÈø¸ìÉÕ¤­ÃÏ̾") {
-               print "(ÉÊ»ì (̾»ì ¸Çͭ̾»ì ÃÏ°è °ìÈÌ)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "接尾語付き地名") {
+               print ODIC::to_eucjp("(品詞 (名詞 固有名詞 地域 一般)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "ÁÈ¿¥Ì¾") {
-               print "(ÉÊ»ì (̾»ì ¸Çͭ̾»ì ÁÈ¿¥)) ((¸«½Ð¤·¸ì ($word 3000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "組織名") {
+               print ODIC::to_eucjp("(品詞 (名詞 固有名詞 組織)) ((見出し語 ($word 3000)) (読み $phonate))\n")
        }
-       elsif ($class eq "¤½¤Î¾¸Çͭ̾»ì") {
-               print "(ÉÊ»ì (̾»ì ¸Çͭ̾»ì °ìÈÌ)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "その他固有名詞") {
+               print ODIC::to_eucjp("(品詞 (名詞 固有名詞 一般)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "Éû»ì") {
-               print "(ÉÊ»ì (Éû»ì °ìÈÌ)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "副詞") {
+               print ODIC::to_eucjp("(品詞 (副詞 一般)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "Àܳ»ì") {
-               print "(ÉÊ»ì (Àܳ»ì)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "接続詞") {
+               print ODIC::to_eucjp("(品詞 (接続詞)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "´¶Æ°»ì") {
-               print "(ÉÊ»ì (´¶Æ°»ì)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "感動詞") {
+               print ODIC::to_eucjp("(品詞 (感動詞)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "·ÁÍÆ»ì") {
-               print "(ÉÊ»ì (·ÁÍƻ젼«Î©)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "形容詞") {
+               print ODIC::to_eucjp("(品詞 (形容詞 自立)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "·ÁÍÆÆ°»ì") {
-               print "(ÉÊ»ì (̾»ì ·ÁÍÆÆ°»ì¸ì´´)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "形容動詞") {
+               print ODIC::to_eucjp("(品詞 (名詞 形容動詞語幹)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "ÀÜƬ¸ì") {                    # !!!
-               print "(ÉÊ»ì (ÀÜƬ»ì Ì¾»ìÀܳ)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "接頭語") {                 # !!!
+               print ODIC::to_eucjp("(品詞 (接頭詞 名詞接続)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "¿ô»úÎóÀÜƬ¸ì") {
-               print "(ÉÊ»ì (ÀÜƬ»ì ¿ôÀܳ)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "数字列接頭語") {
+               print ODIC::to_eucjp("(品詞 (接頭詞 数接続)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "ÀÜÈø¸ì") {
-               print "(ÉÊ»ì (̾»ì ÀÜÈø °ìÈÌ)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "接尾語") {
+               print ODIC::to_eucjp("(品詞 (名詞 接尾 一般)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "¿Í̾ÀÜÈø¸ì") {
-               print "(ÉÊ»ì (̾»ì ÀÜÈø ¿Í̾)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "人名接尾語") {
+               print ODIC::to_eucjp("(品詞 (名詞 接尾 人名)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "ÃÏ̾ÀÜÈø¸ì") {
-               print "(ÉÊ»ì (̾»ì ÀÜÈø ÃÏ°è)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "地名接尾語") {
+               print ODIC::to_eucjp("(品詞 (名詞 接尾 地域)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "ÁÈ¿¥Ì¾ÀÜÈø¸ì") {
-               print "(ÉÊ»ì (̾»ì ÀÜÈø °ìÈÌ)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "組織名接尾語") {
+               print ODIC::to_eucjp("(品詞 (名詞 接尾 一般)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "¿ô»úÎóÀÜÈø¸ì") {
-               print "(ÉÊ»ì (̾»ì ÀÜÈø ½õ¿ô»ì)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "数字列接尾語") {
+               print ODIC::to_eucjp("(品詞 (名詞 接尾 助数詞)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "À®¶ç") {
-               print "(ÉÊ»ì (̾»ì °úÍÑʸ»úÎó)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "成句") {
+               print ODIC::to_eucjp("(品詞 (名詞 引用文字列)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
-       elsif ($class eq "̵ÉÊ»ì") {
-               print "(ÉÊ»ì (̾»ì °úÍÑʸ»úÎó)) ((¸«½Ð¤·¸ì ($word 2000)) (Æɤߠ$phonate))\n"
+       elsif ($class eq "無品詞") {
+               print ODIC::to_eucjp("(品詞 (名詞 引用文字列)) ((見出し語 ($word 2000)) (読み $phonate))\n")
        }
        else {
                print STDERR "Error: $.: unknown class `$class': $phonate\t$word\n";
-               print "$phonate,$word,$class\n";
+               print ODIC::to_eucjp("$phonate,$word,$class\n");
        }
 }
 
 
-sub header {
-#      my($year, $mon, $mday);
-#      my($hour, $min, $sec);
-
-#      ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
-#      $year += 1900;
-#      $mon++;
-#      print ",,\"Ŭ¹çµ¬³Ê=JIS X 4062:1998\"\n";
-#      print ",,\"ɽÂê=²­Æì¼­½ñ\"\n";
-#      print ",,\"ʬÌî=ΰµå¡¢²­Æì\"\n";
-#      print ",,\"ÈÇ=Âè$year/$mon/$mdayÈÇ\"\n";
-#      print ",,\"ÊÔ¼Ô=²­Æì¼­½ñ¥×¥í¥¸¥§¥¯¥È\"\n";
-#      print ",,\"ºîÀ®Æü=$year-$mon-$mday\"\n";
-}
-
-
 sub version {
        my $sec;
        my $min;
@@ -167,5 +147,5 @@ sub version {
        ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
        $year += 1900;
        $mon++;
-       print "(ÉÊ»ì (̾»ì °úÍÑʸ»úÎó)) ((¸«½Ð¤·¸ì ($year/$mon/$mday²­Æì¼­½ñ¤ÎÆüÉÕ¤± 2000)) (Æɤߠ¤ª¤­¤Ê¤ï¤¸¤·¤ç¤Î¤Ò¤Å¤±))\n"
+       print ODIC::to_eucjp("(品詞 (名詞 引用文字列)) ((見出し語 ($year/$mon/$mday沖縄辞書の日付け 2000)) (読み おきなわじしょのひづけ))\n")
 }
index 036c7d9..639760b 100755 (executable)
@@ -1,28 +1,47 @@
 #!/usr/bin/perl
 #
-# oki2jis.pl - ²­Æì¼­½ñ¤Î¥Õ¥¡¥¤¥ë¤ò JIS X 4062 ¤Î·Á¼°¤Î¥Æ¥­¥¹¥È¤ËÊÑ´¹¤¹¤ë
+# oki2jis.pl - 沖縄辞書のファイルを JIS X 4062 の形式のテキストに変換する
 #
 #              $Id: oki2jis.pl,v 1.7 2006/09/01 18:20:06 void Exp $
 #
-# ¤³¤Î¥¹¥¯¥ê¥×¥È¤ò»È¤Ã¤Æ¡¢°Ê²¼¤Î¤è¤¦¤Ë¡Öokinawa.txt¡×¤òÀ¸À®¤·¤Æ¤¯¤À¤µ¤¤¡£
-#     $ nkf -e *.dic | script/oki2vje.pl | sort -u | nkf -s > okinawa.txt
-# ¸åȾ¤Înkf¤Î¥ª¥×¥·¥ç¥ó¤ÏÀèÊý¤ÎÅÔ¹ç¤Ë¹ç¤ï¤»¤ÆÊѹ¹¤·¤Æ¤¯¤À¤µ¤¤¡£
+# このスクリプトを使って、以下のように「okinawa.txt」を生成してください。
+#     $ cat ../*.dic | script/oki2jis.pl | sort -u | nkf -s > okinawa.txt
+# 後半のnkfのオプションは先方の都合に合わせて変更してください。
 require 5.6.0;
+require 'ODIC.pm';
 use strict;
+use Getopt::Long qw(:config posix_default no_ignore_case gnu_compat);
+
 our $phonate;
 our $word;
 our $class;
 
+my $help_only;
+my $skip_geta;
+
+GetOptions(
+    'help|h' => \$help_only,
+    'skip-geta|g' => \$skip_geta
+);
+if (defined($help_only)) {
+    print STDERR "usage: $0 [--help|-h] [--skip-geta|-g]\n";
+    exit 1;
+}
+
 &header;
 while (<>) {
-       s/#.*$//;               # `#'°Ü¹Ô¤ò¼è¤êµî¤ë
-       next if (/^\s*$/);      # ¤½¤Î·ë²Ì¶õ¹Ô¤Ë¤Ê¤Ã¤¿¹Ô¤ÏÆɤßÈô¤Ð¤¹¡£
+       # JIS X 0208 に含まれていない文字を含む行を読み飛ばす
+       # 読み飛ばしにはコメントに「〓あり」マーカーが必要
+       next if (defined($skip_geta) && /〓あり/);
+
+       s/#.*$//;               # `#'以降を取り去る
+       next if (/^\s*$/);      # その結果空行になった行は読み飛ばす。
        if (/(\S+)\s+(\S+)\s+(\S+)/) {
-               $phonate  = $1; # Æɤß
-               $word = $2;     # Ã±¸ì
-               $class = $3;    # ÉÊ»ì
-               &check_phonate;
-               &check_word;
+               $phonate = $1;  # 読み
+               $word    = $2;  # 単語
+               $class   = $3;  # 品詞
+               ODIC::check_phonate($phonate);
+               ODIC::check_word($word);
                &convert_class;
        }
        else {
@@ -34,99 +53,77 @@ while (<>) {
 exit 0;
 
 
-sub check_phonate
-{
-       if (length($phonate) > 40) {
-               print STDERR "Warning: $.: too long phonate `$phonate'\n";
-       }
-       if ($phonate =~ /[^¤¢¤¤¤¦¤¨¤ª¤«¤­¤¯¤±¤³¤µ¤·¤¹¤»¤½¤¿¤Á¤Ä¤Æ¤È¤Ê¤Ë¤Ì¤Í¤Î¤Ï¤Ò¤Õ¤Ø¤Û¤Þ¤ß¤à¤á¤â¤é¤ê¤ë¤ì¤í¤¬¤®¤°¤²¤´¤¶¤¸¤º¤¼¤¾¤À¤Â¤Å¤Ç¤É¤Ð¤Ó¤Ö¤Ù¤Ü¤¡¤£¤¥¤§¤©¤Ã¤ç¤ã¤å¤î¤Ñ¤Ô¤×¤Ú¤Ý¤ä¤æ¤è¤ï¤ò¤ó¥ô¡¼]/) {
-               print STDERR "Warning: $.: ilegal character in `$phonate'\n";
-       }
-}
-
-
-sub check_word
-{
-       if (length($word) > 64) {
-               print STDERR "Warning: $.: too long word `$word'\n";
-       }
-       if ($word =~ /[ \t",#]/) {
-               print STDERR "Warning: $.: ilegal character in `$word'\n";
-       }
-}
-
-
 sub convert_class {
-       if ($class eq "ÉáÄÌ̾»ì") {
+       if ($class eq "普通名詞") {
                print "$phonate,$word,$class\n";        # !!!
        }
-       elsif ($class eq "¥µÊÑ̾»ì") {
+       elsif ($class eq "サ変名詞") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "·Áư̾»ì") {
+       elsif ($class eq "形動名詞") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "À«") {
+       elsif ($class eq "") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "̾") {
+       elsif ($class eq "") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "¤½¤Î¾¤Î¿Í̾") {
+       elsif ($class eq "その他の人名") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "ñ½ãÃÏ̾") {
+       elsif ($class eq "単純地名") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "ÀÜÈø¸ìÉÕ¤­ÃÏ̾") {
+       elsif ($class eq "接尾語付き地名") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "ÁÈ¿¥Ì¾") {
+       elsif ($class eq "組織名") {
                print "$phonate,$word,$class\n";        # !!!
        }
-       elsif ($class eq "¤½¤Î¾¸Çͭ̾»ì") {
-               print "$phonate,$word,¤½¤Î¾¤Î¸Çͭ̾»ì\n";
+       elsif ($class eq "その他固有名詞") {
+               print "$phonate,$word,その他の固有名詞\n";
        }
-       elsif ($class eq "Éû»ì") {
+       elsif ($class eq "副詞") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "Àܳ»ì") {
+       elsif ($class eq "接続詞") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "´¶Æ°»ì") {
+       elsif ($class eq "感動詞") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "·ÁÍÆ»ì") {
+       elsif ($class eq "形容詞") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "·ÁÍÆÆ°»ì") {
+       elsif ($class eq "形容動詞") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "ÀÜƬ¸ì") {                    # !!!
+       elsif ($class eq "接頭語") {                 # !!!
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "¿ô»úÎóÀÜƬ¸ì") {
+       elsif ($class eq "数字列接頭語") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "ÀÜÈø¸ì") {
+       elsif ($class eq "接尾語") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "¿Í̾ÀÜÈø¸ì") {
+       elsif ($class eq "人名接尾語") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "ÃÏ̾ÀÜÈø¸ì") {
+       elsif ($class eq "地名接尾語") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "ÁÈ¿¥Ì¾ÀÜÈø¸ì") {
+       elsif ($class eq "組織名接尾語") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "¿ô»úÎóÀÜÈø¸ì") {
+       elsif ($class eq "数字列接尾語") {
                print "$phonate,$word,$class\n";
        }
-       elsif ($class eq "À®¶ç") {
+       elsif ($class eq "成句") {
                print "$phonate,$word,$class\n";        # !!!
        }
-       elsif ($class eq "̵ÉÊ»ì") {
+       elsif ($class eq "無品詞") {
                print "$phonate,$word,$class\n";
        }
        else {
@@ -143,12 +140,12 @@ sub header {
        ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
        $year += 1900;
        $mon++;
-       print ",,\"Ŭ¹çµ¬³Ê=JIS X 4062:1998\"\n";
-       print ",,\"ɽÂê=²­Æì¼­½ñ\"\n";
-       print ",,\"ʬÌî=ΰµå¡¢²­Æì\"\n";
-       print ",,\"ÈÇ=Âè$year/$mon/$mdayÈÇ\"\n";
-       print ",,\"ÊÔ¼Ô=²­Æì¼­½ñ¥×¥í¥¸¥§¥¯¥È\"\n";
-       print ",,\"ºîÀ®Æü=$year-$mon-$mday\"\n";
+       print ",,\"適合規格=JIS X 4062:1998\"\n";
+       print ",,\"表題=沖縄辞書\"\n";
+       print ",,\"分野=琉球、沖縄\"\n";
+       print ",,\"版=第$year/$mon/$mday版\"\n";
+       print ",,\"編者=沖縄辞書プロジェクト\"\n";
+       print ",,\"作成日=$year-$mon-$mday\"\n";
 }
 
 
@@ -163,5 +160,5 @@ sub version {
        ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
        $year += 1900;
        $mon++;
-       print "¤ª¤­¤Ê¤ï¤¸¤·¤ç¤Î¤Ò¤Å¤±,$year/$mon/$mday(²­Æì¼­½ñ¤ÎÆüÉÕ¤±),̵ÉÊ»ì\n";
+       print "おきなわじしょのひづけ,$year/$mon/$mday(沖縄辞書の日付け),無品詞\n";
 }
index b57fee9..fcbd901 100755 (executable)
@@ -1,39 +1,44 @@
 #!/usr/bin/perl
 #
-# oki2kotoeri.pl - ²­Æì¼­½ñ¤Î¥Õ¥¡¥¤¥ë¤ò¤³¤È¤¨¤ê3.1¤ÇÆɤ߹þ¤á¤ë·Á¼°¤Î¥Æ¥­¥¹¥È¤ËÊÑ´¹
+# oki2kotoeri.pl - 沖縄辞書のファイルをことえり3.1で読み込める形式のテキストに変換
 #
 #              $Id: oki2kotoeri.pl,v 1.8 2006/09/01 18:20:06 void Exp $
 #
-# ¤³¤Î¥¹¥¯¥ê¥×¥È¤ò»È¤Ã¤Æ¡¢°Ê²¼¤Î¤è¤¦¤Ë¡Öokinawa.txt¡×¤òÀ¸À®¤·¤Æ¤¯¤À¤µ¤¤¡£
-#     $ nkf -e *.dic | script/oki2kotoeri.pl | sort -u | nkf -s > okinawa.txt
-# ÆɤߤÏ20ʸ»ú°ÊÆ⡢ñ¸ì¤Ï32ʸ»ú°ÊÆâ¤Ç¤¹¡£
+# このスクリプトを使って、以下のように「okinawa.txt」を生成してください。
+#     $ cat *.dic | script/oki2kotoeri.pl | sort -u > okinawa.txt
+# 読みは20文字以内、単語は32文字以内です。
 # 
-# ¥á¥Ë¥å¡¼¥Ð¡¼¤Î¤³¤È¤¨¤ê¥á¥Ë¥å¡¼¤«¤é[ñ¸ìÅÐÏ¿/¼­½ñÊÔ½¸...]¤òÁª¤Ó¡¢
-# ¡Ö¤³¤È¤¨¤êñ¸ìÅÐÏ¿¡×¥À¥¤¥¢¥í¥°¤ò½Ð¤¹¡£
-# ¥á¥Ë¥å¡¼¥Ð¡¼¤Î[¼­½ñ]¥á¥Ë¥å¡¼¤Î[¿·µ¬¥æ¡¼¥¶¼­½ñ¤ÎºîÀ®...]¤òÁª¤Ó
-# ÊÌ̾¤ÇÊݸÍó¤Ë¡Øokinawa.dic¡Ù¤Èµ­Æþ¡£
-# ¤³¤Î¤È¤­¤Ë[¾ì½ê]¤¬¡ØDictionaries¡Ù¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¤ò³Îǧ¤·¤Æ¡¢[Êݸ]¥Ü¥¿¥ó¤ò²¡¤¹¡£
-# (¤¹¤Ç¤ËƱ̾¤Î¥Õ¥¡¥¤¥ë¤¬¤¢¤ë¾ì¹ç¤ÏÊ̤Υǥ£¥ì¥¯¥È¥ê¡¼¤Ë¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢
-# Ê̤Υե¡¥¤¥ë̾¤Ë¤·¤Æ¤ª¤¤¤Æ¤¢¤È¤Ç¤Ê¤ó¤È¤«¤¹¤ë¡£¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¡¼¤¸¤ã¤Ê¤¤¤È¤¦¤Þ¤¯¤¤¤«¤Ê¤¤¤è¤¦¤À)
-# ¡Ø¥æ¡¼¥¶¡¼¼­½ñ¡Ù¡¢¡Ø»ØÄêÊÑ´¹¼­½ñ¡Ù¤Î»ØÄê¤Ïdefault¤Î¤Þ¤Þ¤ÇOK¡£
-# [¤³¤È¤¨¤êñ¸ìÅÐÏ¿]¥À¥¤¥¢¥í¥°¾åÉô¤Î[¼­½ñ]¤Î¤È¤³¤í¤Ç¡Øokinawa.dic¡Ù¤òÁª¤Ö¡£
-# ¥á¥Ë¥å¡¼¥Ð¡¼¤Î[¼­½ñ]¥á¥Ë¥å¡¼¤Î[¥Æ¥­¥¹¥È¤ä¼­½ñ¤«¤é¼è¤ê¹þ¤à...]¤òÁª¤Ó¡¢
-# ¤³¤³¤ÇÀè¤Û¤ÉÀ¸À®¤·¤Æ¤ª¤¤¤¿¡Øokinawa.txt¡Ù¤ò»ØÄê¡£(Áª¤ó¤Ç[³«¤¯]¤ò²¡¤¹)
+# メニューバーのことえりメニューから[単語登録/辞書編集...]を選び、
+# 「ことえり単語登録」ダイアログを出す。
+# メニューバーの[辞書]メニューの[新規ユーザ辞書の作成...]を選び
+# 別名で保存欄に『okinawa.dic』と記入。
+# このときに[場所]が『Dictionaries』になっていることを確認して、[保存]ボタンを押す。
+# (すでに同名のファイルがある場合は別のディレクトリーにするのではなく、
+# 別のファイル名にしておいてあとでなんとかする。そのディレクトリーじゃないとうまくいかないようだ)
+# 『ユーザー辞書』、『指定変換辞書』の指定はdefaultのままでOK。
+# [ことえり単語登録]ダイアログ上部の[辞書]のところで『okinawa.dic』を選ぶ。
+# メニューバーの[辞書]メニューの[テキストや辞書から取り込む...]を選び、
+# ここで先ほど生成しておいた『okinawa.txt』を指定。(選んで[開く]を押す)
 require 5.6.0;
+require 'ODIC.pm';
 use strict;
 our $phonate;
 our $word;
 our $class;
 
 while (<>) {
-       s/#.*$//;               # `#'°Ü¹Ô¤ò¼è¤êµî¤ë
-       next if (/^\s*$/);      # ¤½¤Î·ë²Ì¶õ¹Ô¤Ë¤Ê¤Ã¤¿¹Ô¤ÏÆɤßÈô¤Ð¤¹¡£
+       # JIS X 0208 に含まれていない文字を含む行を読み飛ばす
+       # 読み飛ばしにはコメントに「〓あり」マーカーが必要
+       next if (/〓あり/);
+
+       s/#.*$//;               # `#'以降を取り去る
+       next if (/^\s*$/);      # その結果空行になった行は読み飛ばす。
        if (/(\S+)\s+(\S+)\s+(\S+)/) {
-               $phonate  = $1; # Æɤß
-               $word = $2;     # Ã±¸ì
-               $class = $3;    # ÉÊ»ì
-               &check_phonate;
-               &check_word;
+               $phonate = $1;  # 読み
+               $word    = $2;  # 単語
+               $class   = $3;  # 品詞
+               ODIC::check_phonate($phonate);
+               ODIC::check_word($word);
                &convert_class;
        }
        else {
@@ -45,105 +50,62 @@ while (<>) {
 exit 0;
 
 
-sub check_phonate
-{
-       if (length($phonate) > 40) {
-               print STDERR "Warning: $.: too long phonate `$phonate'\n";
-       }
-       if ($phonate =~ /[^¤¢¤¤¤¦¤¨¤ª¤«¤­¤¯¤±¤³¤µ¤·¤¹¤»¤½¤¿¤Á¤Ä¤Æ¤È¤Ê¤Ë¤Ì¤Í¤Î¤Ï¤Ò¤Õ¤Ø¤Û¤Þ¤ß¤à¤á¤â¤é¤ê¤ë¤ì¤í¤¬¤®¤°¤²¤´¤¶¤¸¤º¤¼¤¾¤À¤Â¤Å¤Ç¤É¤Ð¤Ó¤Ö¤Ù¤Ü¤¡¤£¤¥¤§¤©¤Ã¤ç¤ã¤å¤î¤Ñ¤Ô¤×¤Ú¤Ý¤ä¤æ¤è¤ï¤ò¤ó¥ô¡¼]/) {
-               print STDERR "Warning: $.: ilegal character in `$phonate'\n";
-       }
-}
-
-
-sub check_word
-{
-       if (length($word) > 64) {
-               print STDERR "Warning: $.: too long word `$word'\n";
-       }
-       if ($word =~ /[ \t",#]/) {
-               print STDERR "Warning: $.: ilegal character in `$word'\n";
-       }
-}
-
-
 sub convert_class {
-       if ($class eq "ÉáÄÌ̾»ì") {                     # OK
-               print "$phonate,$word,$class\n";
+       if ($class eq "普通名詞") {                 # OK
        }
-       elsif ($class eq "¥µÊÑ̾»ì") {                  # OK
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "サ変名詞") {                      # OK
        }
-       elsif ($class eq "·Áư̾»ì") {
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "形動名詞") {
        }
-       elsif ($class eq "À«") {
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "姓") {
        }
-       elsif ($class eq "̾") {
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "名") {
        }
-       elsif ($class eq "¤½¤Î¾¤Î¿Í̾") {
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "その他の人名") {
        }
-       elsif ($class eq "ñ½ãÃÏ̾") {
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "単純地名") {
        }
-       elsif ($class eq "ÀÜÈø¸ìÉÕ¤­ÃÏ̾") {
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "接尾語付き地名") {
        }
-       elsif ($class eq "ÁÈ¿¥Ì¾") {
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "組織名") {
        }
-       elsif ($class eq "¤½¤Î¾¸Çͭ̾»ì") {
-               print "$phonate,$word,¤½¤Î¾¤Î¸Çͭ̾»ì\n";
+       elsif ($class eq "その他固有名詞") {
+               $class = 'その他の固有名詞';
        }
-       elsif ($class eq "Éû»ì") {
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "副詞") {
        }
-       elsif ($class eq "Àܳ»ì") {
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "接続詞") {
        }
-       elsif ($class eq "´¶Æ°»ì") {
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "感動詞") {
        }
-       elsif ($class eq "·ÁÍÆ»ì") {                    # OK
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "形容詞") {                 # OK
        }
-       elsif ($class eq "·ÁÍÆÆ°»ì") {                  # OK
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "形容動詞") {                      # OK
        }
-       elsif ($class eq "ÀÜƬ¸ì") {                    # *
-               print "$phonate,$word,ÉáÄÌ̾»ì\n";
+       elsif ($class eq "接頭語") {                 # *
+               $class = '普通名詞';
        }
-       elsif ($class eq "¿ô»úÎóÀÜƬ¸ì") {              # OK
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "数字列接頭語") {                # OK
        }
-       elsif ($class eq "ÀÜÈø¸ì") {                    # *
-               print "$phonate,$word,ÉáÄÌ̾»ì\n";
+       elsif ($class eq "接尾語") {                 # *
+               $class = '普通名詞';
        }
-       elsif ($class eq "¿Í̾ÀÜÈø¸ì") {
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "人名接尾語") {
        }
-       elsif ($class eq "ÃÏ̾ÀÜÈø¸ì") {
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "地名接尾語") {
        }
-       elsif ($class eq "ÁÈ¿¥Ì¾ÀÜÈø¸ì") {
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "組織名接尾語") {
        }
-       elsif ($class eq "¿ô»úÎóÀÜÈø¸ì") {
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "数字列接尾語") {
        }
-       elsif ($class eq "À®¶ç") {
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "成句") {
        }
-       elsif ($class eq "̵ÉÊ»ì") {                    # OK
-               print "$phonate,$word,$class\n";
+       elsif ($class eq "無品詞") {                 # OK
        }
        else {
                print STDERR "Error: $.: unknown class `$class': $phonate\t$word\n";
-               print "$phonate,$word,$class\n";
        }
+       print ODIC::to_shiftjis("$phonate,$word,$class\r\n");
 }
 
 
@@ -158,5 +120,5 @@ sub version {
        ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
        $year += 1900;
        $mon++;
-       print "¤ª¤­¤Ê¤ï¤¸¤·¤ç¤Î¤Ò¤Å¤±,$yearǯ$mon·î$mdayÆü(²­Æì¼­½ñ¤ÎÆüÉÕ¤±),̵ÉÊ»ì\n";
+       print ODIC::to_shiftjis("おきなわじしょのひづけ,$year年$mon月$mday日(沖縄辞書の日付け),無品詞\r\n");
 }
index 9117c60..97bd0c0 100755 (executable)
 #!/usr/bin/perl
 #
-# oki2msime.pl - ²­Æì¼­½ñ¤Î¥Õ¥¡¥¤¥ë¤òMS-IME¤Ç¼è¤ê¹þ¤á¤ë¥Æ¥­¥¹¥È·Á¼°¤ËÊÑ´¹¤¹¤ë¥¹¥¯¥ê¥×¥È
+# oki2msime.pl - 沖縄辞書のファイルをMS-IMEで取り込めるテキスト形式に変換するスクリプト
 #                                                      GANAHA Makoto makoto@ganaha.org
 #              $Id: oki2msime.pl,v 1.5 2008/01/16 02:26:58 ga2 Exp $
-# »ÈÍÑÎã:
-#    °Ê²¼¤ÎÍͤˡÖokinawa.txt¡×¤òºîÀ®¤·
-#    $ nkf -e *.dic | script/oki2msime.pl | sort -u | nkf -s > okinawa.txt
-#    ¥æ¡¼¥¶¡¼¼­½ñ¤Ë¼è¤ê¹þ¤à¾ì¹ç
-#     ¡ÖMicrosoft IME ¼­½ñ¥Ä¡¼¥ë 2000¡×¤òµ¯Æ°¤·¡Ö¥Ä¡¼¥ë(T)¡×->¡Ö¥Æ¥­¥¹¥È ¥Õ¥¡¥¤¥ë¤«¤é¤ÎÅÐÏ¿(T)¡×¤«¤é¡Öokinawa.txt¡×¤ò¼è¤ê¹þ¤ó¤Ç²¼¤µ¤¤¡£
-#    ¥·¥¹¥Æ¥à¼­½ñ¤òºîÀ®¤¹¤ë¾ì¹ç
-#     ¡ÖMicrosoft IME ¼­½ñ¥Ä¡¼¥ë 2000¡×¤òµ¯Æ°¤·¡Ö¥Õ¥¡¥¤¥ë(F)¡×->¡Ö¿·µ¬ºîÀ®(N)¡×¤è¤ê¥À¥ß¡¼¤Î¥æ¡¼¥¶¡¼¼­½ñ¤òºîÀ®¤·¤Þ¤¹¡£
-#     ¡Ö¥Ä¡¼¥ë(T)¡×->¡Ö¥Æ¥­¥¹¥È ¥Õ¥¡¥¤¥ë¤«¤é¤ÎÅÐÏ¿(T)¡×¤«¤é¡Öokinawa.txt¡×¤ò¼è¤ê¹þ¤ó¤Ç²¼¤µ¤¤¡£
-#     ¡Ö¥Ä¡¼¥ë(T)¡×->¡Ö¥·¥¹¥Æ¥à¼­½ñ¤ÎºîÀ®(S)¡×¤«¤é¥·¥¹¥Æ¥à¼­½ñ¤òºîÀ®¤·¤Þ¤¹¡£
-#     ¥À¥ß¡¼¤Î¥æ¡¼¥¶¡¼¼­½ñ¤Ï¤¤¤ê¤Þ¤»¤ó¤Î¤Çºï½ü¤·¤Æ¤¯¤À¤µ¤¤¡£
+# 使用例:
+#    以下の様に「okinawa.txt」を作成し
+#    $ cat ../*.dic | ./oki2msime.pl -g | sort -u > okinawa.txt
+#    ユーザー辞書に取り込む場合
+#     「Microsoft IME 辞書ツール 2000」を起動し「ツール(T)」->「テキスト ファイルからの登録(T)」から「okinawa.txt」を取り込んで下さい。
+#    システム辞書を作成する場合
+#     「Microsoft IME 辞書ツール 2000」を起動し「ファイル(F)」->「新規作成(N)」よりダミーのユーザー辞書を作成します。
+#     「ツール(T)」->「テキスト ファイルからの登録(T)」から「okinawa.txt」を取り込んで下さい。
+#     「ツール(T)」->「システム辞書の作成(S)」からシステム辞書を作成します。
+#     ダミーのユーザー辞書はいりませんので削除してください。
+#
+#  「尚灝王」(しょうこうおう)など、JIS X 0208の範囲外の文字が含まれる単語を
+#  辞書にインポートする場合には、UTF-8 で出力してから、Notepad.exeなどで
+#  「Unicode」(UTF-16LE BOM付き)に変換してください。
 #
 require 5.6.0;
+require 'ODIC.pm';
 use strict;
-our $phonate;
-our $word;
-our $class;
+use feature 'switch';
+use Getopt::Long qw(:config posix_default no_ignore_case gnu_compat);
 
-while (<>) {
-       s/#.*$//;               # `#'°Ê¹ß¤ò¼è¤êµî¤ë
-       next if (/^\s*$/);      # ¤½¤Î·ë²Ì¶õ¹Ô¤Ë¤Ê¤Ã¤¿¹Ô¤ÏÆɤßÈô¤Ð¤¹¡£
-       if (/(\S+)\s+(\S+)\s+(\S+)/) {
-               $phonate  = $1; # Æɤß
-               $word = $2;     # Ã±¸ì
-               $class = $3;    # ÉÊ»ì
-               &check_phonate;
-               &check_word;
-               &convert_class;
-       }
-       else {
-               print STDERR "Error: $.: too few field number `$_'\n";
-               print  "$_";
-       }
+my $with_comment;
+my $help_only;
+my $skip_geta;
+my $utf8_output;
+
+GetOptions(
+    'with-comment|c' => \$with_comment,
+    'help|h' => \$help_only,
+    'skip-geta|g' => \$skip_geta,
+    'utf8|u'      => \$utf8_output
+);
+if (defined($help_only)) {
+    print STDERR "usage: $0 [--with-comment|-c] [--help|-h] [--skip-geta|-g] [--utf8-output|-u]\n";
+    exit 1;
 }
-&version;
-exit 0;
 
+while (<>) {
+    next if (/^\s*$|^\s*\#.*$/);       # 空行・コメントのみの行を読み飛ばす
 
-sub check_phonate
-{
-       if (length($phonate) > 40) {
-               print STDERR "Warning: $.: too long phonate `$phonate'\n";
-       }
-       if ($phonate =~ /[^¤¢¤¤¤¦¤¨¤ª¤«¤­¤¯¤±¤³¤µ¤·¤¹¤»¤½¤¿¤Á¤Ä¤Æ¤È¤Ê¤Ë¤Ì¤Í¤Î¤Ï¤Ò¤Õ¤Ø¤Û¤Þ¤ß¤à¤á¤â¤é¤ê¤ë¤ì¤í¤¬¤®¤°¤²¤´¤¶¤¸¤º¤¼¤¾¤À¤Â¤Å¤Ç¤É¤Ð¤Ó¤Ö¤Ù¤Ü¤¡¤£¤¥¤§¤©¤Ã¤ç¤ã¤å¤î¤Ñ¤Ô¤×¤Ú¤Ý¤ä¤æ¤è¤ï¤ò¤ó¥ô¡¼]/) {
-               print STDERR "Warning: $.: ilegal character in `$phonate'\n";
+    # JIS X 0208 に含まれていない文字を含む行を読み飛ばす
+    # 読み飛ばしにはコメントに「〓あり」マーカーが必要
+    next if (defined($skip_geta) && /〓あり/);
+
+    if (/^(\S+)\s+(\S+)\s+(\S+)\s+#\s*([[:^cntrl:]]*).*$/) {
+       my $phonate = $1;       # 読み
+       my $word    = $2;       # 単語
+       my $class   = $3;       # 品詞
+       my $comment = '';       # コメント
+       if (defined($with_comment)) {
+           my $comment = $4;   # 必要な時にはコメントを付けられる
        }
-}
 
+       ODIC::check_phonate($phonate);
+       ODIC::check_word($word);
+       &print_dictionary($phonate, $word, $class, $comment);
 
-sub check_word
-{
-       if (length($word) > 64) {
-               print STDERR "Warning: $.: too long word `$word'\n";
-       }
-       if ($word =~ /[ \t",#]/) {
-               print STDERR "Warning: $.: ilegal character in `$word'\n";
-       }
+    } elsif (/^(\S+)\s+(\S+)\s+(\S+)/) {
+       my $phonate = $1;       # 読み
+       my $word    = $2;       # 単語
+       my $class   = $3;       # 品詞
+       my $comment = '';       # コメント
+
+       ODIC::check_phonate($phonate);
+       ODIC::check_word($word);
+       &print_dictionary($phonate, $word, $class, $comment);
+
+    } else {
+       print STDERR "Error: $.: too few field number `$_'\n";
+       print  "$_";
+    }
 }
+&version;
+exit 0;
 
 
-sub convert_class {
-       if ($class eq "ÉáÄÌ̾»ì") {
-               print "$phonate\t$word\t̾»ì\n";
-       }
-       elsif ($class eq "¥µÊÑ̾»ì") {
-               print "$phonate\t$word\t¤µÊÑ̾»ì\n";
-       }
-       elsif ($class eq "·Áư̾»ì") {
-               print "$phonate\t$word\t·Áư̾»ì\n";
-       }
-       elsif ($class eq "À«") {
-               print "$phonate\t$word\tÀ«\n";
-       }
-       elsif ($class eq "̾") {
-               print "$phonate\t$word\t̾\n";
-       }
-       elsif ($class eq "¤½¤Î¾¤Î¿Í̾") {
-               print "$phonate\t$word\t¿Í̾\n";
-       }
-       elsif ($class eq "ñ½ãÃÏ̾") {
-               print "$phonate\t$word\tÃÏ̾¤½¤Î¾\n";
-       }
-       elsif ($class eq "ÀÜÈø¸ìÉÕ¤­ÃÏ̾") {
-               print "$phonate\t$word\tÃÏ̾ÀÜÈø¸ì\n";
-       }
-       elsif ($class eq "ÁÈ¿¥Ì¾") {
-               print "$phonate\t$word\t¸Çͭ̾»ì\n";
-       }
-       elsif ($class eq "¤½¤Î¾¸Çͭ̾»ì") {
-               print "$phonate\t$word\t¸Çͭ̾»ì\n";
-       }
-       elsif ($class eq "Éû»ì") {
-               print "$phonate\t$word\tÉû»ì\n";
-       }
-       elsif ($class eq "Àܳ»ì") {
-               print "$phonate\t$word\tÀܳ»ì\n";
-       }
-       elsif ($class eq "´¶Æ°»ì") {
-               print "$phonate\t$word\t´¶Æ°»ì\n";
-       }
-       elsif ($class eq "·ÁÍÆ»ì") {
-               print "$phonate\t$word\t·ÁÍÆ»ì\n";
-       }
-       elsif ($class eq "·ÁÍÆÆ°»ì") {
-               print "$phonate\t$word\t·ÁÍÆÆ°»ì\n";
-       }
-       elsif ($class eq "ÀÜƬ¸ì") {
-               print "$phonate\t$word\tÀÜƬ¸ì\n";
-       }
-       elsif ($class eq "¿ô»úÎóÀÜƬ¸ì") {
-               print "$phonate\t$word\tÀÜƬ¸ì\n";
-       }
-       elsif ($class eq "ÀÜÈø¸ì") {
-               print "$phonate\t$word\tÀÜÈø¸ì\n";
-       }
-       elsif ($class eq "¿Í̾ÀÜÈø¸ì") {
-               print "$phonate\t$word\tÀ«Ì¾ÀÜÈø¸ì\n";
-       }
-       elsif ($class eq "ÃÏ̾ÀÜÈø¸ì") {
-               print "$phonate\t$word\tÃÏ̾ÀÜÈø¸ì\n";
-       }
-       elsif ($class eq "ÁÈ¿¥Ì¾ÀÜÈø¸ì") {
-               print "$phonate\t$word\tÀÜÈø¸ì\n";
-       }
-       elsif ($class eq "¿ô»úÎóÀÜÈø¸ì") {
-               print "$phonate\t$word\tÀÜÈø¸ì\n";
-       }
-       elsif ($class eq "À®¶ç") {
-               print "$phonate\t$word\t̾»ì\n";
-       }
-       elsif ($class eq "̵ÉÊ»ì") {
-               print "$phonate\t$word\t̾»ì\n";
-       }
-       else {
-               print STDERR "Error: $.: unknown class `$class': $phonate\t$word\n";
-               print "$phonate\t$word\t¢®\n";
-       }
+sub print_dictionary {
+    my $phonate = shift;
+    my $word    = shift;
+    my $class   = shift;
+    my $comment = shift;
+
+    given ($class) {
+       when ('普通名詞')   { $class = '名詞'; }
+       when ('サ変名詞')   { $class = 'さ変名詞'; }
+       when ('その他の人名')     { $class = '人名'; }
+       when ('単純地名')   { $class = '地名その他'; }
+       when ('接尾語付き地名')  { $class = '地名接尾語'; }
+       when ('組織名')              { $class = '固有名詞'; }
+       when ('その他固有名詞')  { $class = '固有名詞'; }
+       when ('数字列接頭語')     { $class = '接頭語'; }
+       when ('人名接尾語')        { $class = '姓名接尾語'; }
+       when ('組織名接尾語')     { $class = '接尾語'; }
+       when ('数字列接尾語')     { $class = '接尾語'; }
+       when ('成句')         { $class = '名詞'; }
+       when ('無品詞')              { $class = '名詞'; }
+       default {
+           # 形動名詞、姓、名、副詞、接続詞、感動詞、形容詞、
+           # 接頭語、接尾語、地名接尾語
+       }
+    }
+
+    if (defined($utf8_output)) {
+       print "$phonate\t$word\t$class\t$comment\r\n";
+    } else {
+       print ODIC::to_shiftjis("$phonate\t$word\t$class\t$comment\r\n");
+    }
 }
 
 sub version {
-       my $sec;
-       my $min;
-       my $hour;
-       my $mday;
-       my $mon;
-       my $year;
+    my $sec;
+    my $min;
+    my $hour;
+    my $mday;
+    my $mon;
+    my $year;
 
-       ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
-       $year += 1900;
-       $mon++;
-       print "¤ª¤­¤Ê¤ï¤¸¤·¤ç¤Î¤Ò¤Å¤±\t$year/$mon/$mday(²­Æì¼­½ñ¤ÎÆüÉÕ¤±)\t̾»ì\n";     # !!!
+    ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
+    $year += 1900;
+    $mon++;
+    if (defined($utf8_output)) {
+       print "おきなわじしょのひづけ\t$year/$mon/$mday(沖縄辞書の日付け)\t名詞\r\n";
+    }  else {
+       print ODIC::to_shiftjis("おきなわじしょのひづけ\t$year/$mon/$mday(沖縄辞書の日付け)\t名詞\r\n");
+    }
 }
index 276bffe..9a6096f 100755 (executable)
@@ -1,29 +1,34 @@
 #!/usr/bin/perl
 #
-# oki2vje.pl - ²­Æì¼­½ñ¤Î¥Õ¥¡¥¤¥ë¤òVJE-Delta¤Ë»ý¤Ã¤Æ¹Ô¤¯¥Æ¥­¥¹¥È¤ËÊÑ´¹¤¹¤ë
+# oki2vje.pl - 沖縄辞書のファイルをVJE-Deltaに持って行くテキストに変換する
 #
 #              $Id: oki2vje.pl,v 1.16 2006/09/01 18:20:06 void Exp $
 #
-# ¤³¤Î¥¹¥¯¥ê¥×¥È¤ò»È¤Ã¤Æ¡¢°Ê²¼¤Î¤è¤¦¤Ë¡Öokinawa.txt¡×¤òÀ¸À®¤·¤Æ¤ª¤¤¤Æ¡¢
-#     $ nkf -e *.dic | script/oki2vje.pl | sort -u | nkf -s > okinawa.txt
-#  VJE-Delta¤Î¼­½ñ¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤òµ¯Æ°¤·¡¢
-# ¤¢¤é¤«¤¸¤á¡Ö¥Õ¥¡¥¤¥ë¡×-¡Ö¿·µ¬ºîÀ®¡×¤ò¤ä¤Ã¤Æ¤«¤é
-# ¡Ö¥Õ¥¡¥¤¥ë]-¡Ö¥Æ¥­¥¹¥È¤ÎÅÐÏ¿/ºï½ü¡×¤Ëokinawa.txt¤ò¿©¤ï¤»¤Æ¤¯¤À¤µ¤¤¡£
+# このスクリプトを使って、以下のように「okinawa.txt」を生成しておいて、
+#     $ cat ../*.dic | script/oki2vje.pl | sort -u > okinawa.txt
+#  VJE-Deltaの辞書ユーティリティを起動し、
+# あらかじめ「ファイル」-「新規作成」をやってから
+# 「ファイル]-「テキストの登録/削除」にokinawa.txtを食わせてください。
 require 5.6.0;
+require 'ODIC.pm';
 use strict;
 our $phonate;
 our $word;
 our $class;
 
 while (<>) {
-       s/#.*$//;               # `#'°Ü¹Ô¤ò¼è¤êµî¤ë
-       next if (/^\s*$/);      # ¤½¤Î·ë²Ì¶õ¹Ô¤Ë¤Ê¤Ã¤¿¹Ô¤ÏÆɤßÈô¤Ð¤¹¡£
+       # JIS X 0208 に含まれていない文字を含む行を読み飛ばす
+       # 読み飛ばしにはコメントに「〓あり」マーカーが必要
+       next if (/〓あり/);
+
+       s/#.*$//;               # `#'以降を取り去る
+       next if (/^\s*$/);      # その結果空行になった行は読み飛ばす。
        if (/(\S+)\s+(\S+)\s+(\S+)/) {
-               $phonate  = $1; # Æɤß
-               $word = $2;     # Ã±¸ì
-               $class = $3;    # ÉÊ»ì
-               &check_phonate;
-               &check_word;
+               $phonate = $1;  # 読み
+               $word    = $2;  # 単語
+               $class   = $3;  # 品詞
+               ODIC::check_phonate($phonate);
+               ODIC::check_word($word);
                &convert_class;
        }
        else {
@@ -35,105 +40,85 @@ while (<>) {
 exit 0;
 
 
-sub check_phonate
-{
-       if (length($phonate) > 40) {
-               print STDERR "Warning: $.: too long phonate `$phonate'\n";
-       }
-       if ($phonate =~ /[^¤¢¤¤¤¦¤¨¤ª¤«¤­¤¯¤±¤³¤µ¤·¤¹¤»¤½¤¿¤Á¤Ä¤Æ¤È¤Ê¤Ë¤Ì¤Í¤Î¤Ï¤Ò¤Õ¤Ø¤Û¤Þ¤ß¤à¤á¤â¤é¤ê¤ë¤ì¤í¤¬¤®¤°¤²¤´¤¶¤¸¤º¤¼¤¾¤À¤Â¤Å¤Ç¤É¤Ð¤Ó¤Ö¤Ù¤Ü¤¡¤£¤¥¤§¤©¤Ã¤ç¤ã¤å¤î¤Ñ¤Ô¤×¤Ú¤Ý¤ä¤æ¤è¤ï¤ò¤ó¥ô¡¼]/) {
-               print STDERR "Warning: $.: ilegal character in `$phonate'\n";
-       }
-}
-
-
-sub check_word
-{
-       if (length($word) > 64) {
-               print STDERR "Warning: $.: too long word `$word'\n";
-       }
-       if ($word =~ /[ \t",#]/) {
-               print STDERR "Warning: $.: ilegal character in `$word'\n";
-       }
-}
-
-
 sub convert_class {
-       if ($class eq "ÉáÄÌ̾»ì") {
-               print "$phonate\t$word\t¡Î̾»ì¡Ï\n";
+       if ($class eq "普通名詞") {
+               $class = '名詞';
        }
-       elsif ($class eq "¥µÊÑ̾»ì") {
-               print "$phonate\t$word\t¡Î̾¥µ¡Ï\n";
+       elsif ($class eq "サ変名詞") {
+               $class = '名サ';
        }
-       elsif ($class eq "·Áư̾»ì") {
-               print "$phonate\t$word\t¡Î̾·Á¡Ï\n";
+       elsif ($class eq "形動名詞") {
+               $class = '名形';
        }
-       elsif ($class eq "À«") {
-               print "$phonate\t$word\t¡Î¿ÍÀ«¡Ï\n";
+       elsif ($class eq "") {
+               $class = '人姓';
        }
-       elsif ($class eq "̾") {
-               print "$phonate\t$word\t¡Î¿Í̾¡Ï\n";
+       elsif ($class eq "") {
+               $class = '人名';
        }
-       elsif ($class eq "¤½¤Î¾¤Î¿Í̾") {
-               print "$phonate\t$word\t¡Î¿Í̾¡Ï\n";
+       elsif ($class eq "その他の人名") {
+               $class = '人名';
        }
-       elsif ($class eq "ñ½ãÃÏ̾") {
-               print "$phonate\t$word\t¡ÎÃÏ̾¡Ï\n";
+       elsif ($class eq "単純地名") {
+               $class = '地名';
        }
-       elsif ($class eq "ÀÜÈø¸ìÉÕ¤­ÃÏ̾") {
-               print "$phonate\t$word\t¡ÎÃÏ̾¹ÔÀ¯¶èʬ¡Ï\n";
+       elsif ($class eq "接尾語付き地名") {
+               $class = '地名行政区分';
        }
-       elsif ($class eq "ÁÈ¿¥Ì¾") {
-               print "$phonate\t$word\t¡ÎÁÈ¿¥¡Ï\n";
+       elsif ($class eq "組織名") {
+               $class = '組織';
        }
-       elsif ($class eq "¤½¤Î¾¸Çͭ̾»ì") {
-               print "$phonate\t$word\t¡Î¸Ç̾¡Ï\n";
+       elsif ($class eq "その他固有名詞") {
+               $class = '固名';
        }
-       elsif ($class eq "Éû»ì") {
-               print "$phonate\t$word\t¡ÎÉû»ì¡Ï\n";
+       elsif ($class eq "副詞") {
+               $class = '副詞';
        }
-       elsif ($class eq "Àܳ»ì") {
-               print "$phonate\t$word\t¡ÎÀܳ¡Ï\n";
+       elsif ($class eq "接続詞") {
+               $class = '接続';
        }
-       elsif ($class eq "´¶Æ°»ì") {
-               print "$phonate\t$word\t¡Î´¶Æ°¡Ï\n";
+       elsif ($class eq "感動詞") {
+               $class = '感動';
        }
-       elsif ($class eq "·ÁÍÆ»ì") {
-               print "$phonate\t$word\t¡Î·ÁÍÆ¡Ï\n";
+       elsif ($class eq "形容詞") {
+               $class = '形容';
        }
-       elsif ($class eq "·ÁÍÆÆ°»ì") {
-               print "$phonate\t$word\t¡Î·ÁÆ°¡Ï\n";
+       elsif ($class eq "形容動詞") {
+               $class = '形動';
        }
-       elsif ($class eq "ÀÜƬ¸ì") {
-               print "$phonate\t$word\t¡ÎÀÜƬ¡Ï\n";
+       elsif ($class eq "接頭語") {
+               $class = '接頭';
        }
-       elsif ($class eq "¿ô»úÎóÀÜƬ¸ì") {
-               print "$phonate\t$word\t¡Î´§¿ô¡Ï\n";
+       elsif ($class eq "数字列接頭語") {
+               $class = '冠数';
        }
-       elsif ($class eq "ÀÜÈø¸ì") {
-               print "$phonate\t$word\t¡ÎÀÜÈø¡Ï\n";
+       elsif ($class eq "接尾語") {
+               $class = '接尾';
        }
-       elsif ($class eq "¿Í̾ÀÜÈø¸ì") {
-               print "$phonate\t$word\t¡ÎÀÜÈø¿Í̾¡Ï\n";
+       elsif ($class eq "人名接尾語") {
+               $class = '接尾人名';
        }
-       elsif ($class eq "ÃÏ̾ÀÜÈø¸ì") {
-               print "$phonate\t$word\t¡ÎÀÜÈøÃÏ̾¡Ï\n";
+       elsif ($class eq "地名接尾語") {
+               $class = '接尾地名';
        }
-       elsif ($class eq "ÁÈ¿¥Ì¾ÀÜÈø¸ì") {
-               print "$phonate\t$word\t¡ÎÀÜÈø¡Ï\n";
+       elsif ($class eq "組織名接尾語") {
+               $class = '接尾';
        }
-       elsif ($class eq "¿ô»úÎóÀÜÈø¸ì") {
-               print "$phonate\t$word\t¡Î½õ¿ô¡Ï\n";
+       elsif ($class eq "数字列接尾語") {
+               $class = '助数';
        }
-       elsif ($class eq "À®¶ç") {
-               print "$phonate\t$word\t¡Î̾»ì¡Ï\n";
+       elsif ($class eq "成句") {
+               $class = '名詞';
        }
-       elsif ($class eq "̵ÉÊ»ì") {
-               print "$phonate\t$word\t¡Îñ´Á¡Ï\n";
+       elsif ($class eq "無品詞") {
+               $class = '単漢';
        }
        else {
                print STDERR "Error: $.: unknown class `$class': $phonate\t$word\n";
-               print "$phonate\t$word\t¡Î¢®¡Ï\n";
+               $class = '〓';
        }
+
+       print ODIC::to_eucjp("$phonate\t$word\t[$class]\n");
 }
 
 sub version {
@@ -147,5 +132,5 @@ sub version {
        ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
        $year += 1900;
        $mon++;
-       print "¤ª¤­¤Ê¤ï¤¸¤·¤ç¤Î¤Ò¤Å¤±\t$year/$mon/$mday(²­Æì¼­½ñ¤ÎÆüÉÕ¤±)\t¡Î̾»ì¡Ï\n";
+       print ODIC::to_eucjp("おきなわじしょのひづけ\t$year/$mon/$mday(沖縄辞書の日付け)\t[名詞]\n");
 }