#!/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 {
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 {
#!/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 {
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";
}
#!/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";
}
+
#!/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 {
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;
($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");
}
#!/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 {
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 {
($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";
}
($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
$year += 1900;
$mon++;
- print "¤ª¤¤Ê¤ï¤¸¤·¤ç¤Î¤Ò¤Å¤±,$year/$mon/$mday(²Æì¼½ñ¤ÎÆüÉÕ¤±),̵ÉÊ»ì\n";
+ print "おきなわじしょのひづけ,$year/$mon/$mday(沖縄辞書の日付け),無品詞\n";
}
#!/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 {
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");
}
($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");
}
#!/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");
+ }
}
#!/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 {
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 {
($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");
}