OSDN Git Service

どのパスでスクリプトを実行しても scripts/ODIC.pm を読めるように修正した。
[o-dic/o-dic.git] / script / oki2jis.pl
1 #!/usr/bin/perl
2 #
3 # oki2jis.pl - 沖縄辞書のファイルを JIS X 4062 の形式のテキストに変換する
4 #
5 #               $Id: oki2jis.pl,v 1.7 2006/09/01 18:20:06 void Exp $
6 #
7 # このスクリプトを使って、以下のように「okinawa.txt」を生成してください。
8 #     $ cat ../*.dic | script/oki2jis.pl | sort -u | nkf -s > okinawa.txt
9 # 後半のnkfのオプションは先方の都合に合わせて変更してください。
10
11 require 5.6.0;
12 use FindBin;
13 use lib $FindBin::Bin;  # For search scripts/ODIC.pm
14 require 'ODIC.pm';
15 use strict;
16 use Getopt::Long qw(:config posix_default no_ignore_case gnu_compat);
17
18 our $phonate;
19 our $word;
20 our $class;
21
22 my $help_only;
23 my $skip_geta;
24
25 GetOptions(
26     'help|h' => \$help_only,
27     'skip-geta|g' => \$skip_geta
28 );
29 if (defined($help_only)) {
30     print STDERR "usage: $0 [--help|-h] [--skip-geta|-g]\n";
31     exit 1;
32 }
33
34 &header;
35 while (<>) {
36         # JIS X 0208 に含まれていない文字を含む行を読み飛ばす
37         # 読み飛ばしにはコメントに「〓あり」マーカーが必要
38         next if (defined($skip_geta) && /〓あり/);
39
40         s/#.*$//;               # `#'以降を取り去る
41         next if (/^\s*$/);      # その結果空行になった行は読み飛ばす。
42         if (/(\S+)\s+(\S+)\s+(\S+)/) {
43                 $phonate = $1;  # 読み
44                 $word    = $2;  # 単語
45                 $class   = $3;  # 品詞
46                 ODIC::check_phonate($phonate);
47                 ODIC::check_word($word);
48                 &convert_class;
49         }
50         else {
51                 print STDERR "Error: $.: too few field number `$_'\n";
52                 print  "$_";
53         }
54 }
55 &version;
56 exit 0;
57
58
59 sub convert_class {
60         if ($class eq "普通名詞") {
61                 print "$phonate,$word,$class\n";        # !!!
62         }
63         elsif ($class eq "サ変名詞") {
64                 print "$phonate,$word,$class\n";
65         }
66         elsif ($class eq "形動名詞") {
67                 print "$phonate,$word,$class\n";
68         }
69         elsif ($class eq "姓") {
70                 print "$phonate,$word,$class\n";
71         }
72         elsif ($class eq "名") {
73                 print "$phonate,$word,$class\n";
74         }
75         elsif ($class eq "その他の人名") {
76                 print "$phonate,$word,$class\n";
77         }
78         elsif ($class eq "単純地名") {
79                 print "$phonate,$word,$class\n";
80         }
81         elsif ($class eq "接尾語付き地名") {
82                 print "$phonate,$word,$class\n";
83         }
84         elsif ($class eq "組織名") {
85                 print "$phonate,$word,$class\n";        # !!!
86         }
87         elsif ($class eq "その他固有名詞") {
88                 print "$phonate,$word,その他の固有名詞\n";
89         }
90         elsif ($class eq "副詞") {
91                 print "$phonate,$word,$class\n";
92         }
93         elsif ($class eq "接続詞") {
94                 print "$phonate,$word,$class\n";
95         }
96         elsif ($class eq "感動詞") {
97                 print "$phonate,$word,$class\n";
98         }
99         elsif ($class eq "形容詞") {
100                 print "$phonate,$word,$class\n";
101         }
102         elsif ($class eq "形容動詞") {
103                 print "$phonate,$word,$class\n";
104         }
105         elsif ($class eq "接頭語") {                 # !!!
106                 print "$phonate,$word,$class\n";
107         }
108         elsif ($class eq "数字列接頭語") {
109                 print "$phonate,$word,$class\n";
110         }
111         elsif ($class eq "接尾語") {
112                 print "$phonate,$word,$class\n";
113         }
114         elsif ($class eq "人名接尾語") {
115                 print "$phonate,$word,$class\n";
116         }
117         elsif ($class eq "地名接尾語") {
118                 print "$phonate,$word,$class\n";
119         }
120         elsif ($class eq "組織名接尾語") {
121                 print "$phonate,$word,$class\n";
122         }
123         elsif ($class eq "数字列接尾語") {
124                 print "$phonate,$word,$class\n";
125         }
126         elsif ($class eq "成句") {
127                 print "$phonate,$word,$class\n";        # !!!
128         }
129         elsif ($class eq "無品詞") {
130                 print "$phonate,$word,$class\n";
131         }
132         else {
133                 print STDERR "Error: $.: unknown class `$class': $phonate\t$word\n";
134                 print "$phonate,$word,$class\n";
135         }
136 }
137
138
139 sub header {
140         my($year, $mon, $mday);
141         my($hour, $min, $sec);
142
143         ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
144         $year += 1900;
145         $mon++;
146         print ",,\"適合規格=JIS X 4062:1998\"\n";
147         print ",,\"表題=沖縄辞書\"\n";
148         print ",,\"分野=琉球、沖縄\"\n";
149         print ",,\"版=第$year/$mon/$mday版\"\n";
150         print ",,\"編者=沖縄辞書プロジェクト\"\n";
151         print ",,\"作成日=$year-$mon-$mday\"\n";
152 }
153
154
155 sub version {
156         my $sec;
157         my $min;
158         my $hour;
159         my $mday;
160         my $mon;
161         my $year;
162
163         ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
164         $year += 1900;
165         $mon++;
166         print "おきなわじしょのひづけ,$year/$mon/$mday(沖縄辞書の日付け),無品詞\n";
167 }