#!/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;
-#use strict;
-#our $phonate;
-#our $word;
-#our $class;
+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 {
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");
}
}
($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";
}