use encoding "UTF-8"; $jionfile="jiontan.txt"; $kunyomifile="sei-kunyomilist.txt"; $tanfile="tan.txt"; $outfile="outtest4.txt"; %hm = ("ふ","う","くゎ","か","ぐゎ","が","ゐ","い","ゑ","え","を","お","ぢ","じ","づ","ず"); %ho = ("いう","ゆう","きう","きゅう","しう","しゅう","ちう","ちゅう","にう","にゅう","ひう","ひゅう","みう","みゅう","りう","りゅう","ぎう","ぎゅう","じう","じゅう","びう","びゅう","きゃう","きょう","けう","きょう","ぎゃう","ぎょう","げう","ぎょう","しゃう","しょう","せう","しょう","じゃう","じょう","ぜう","じょう","ちゃう","ちょう","てう","ちょう","でう","じょう","にゃう","にょう","ねう","にょう","ひゃう","ひょう","へう","ひょう","びゃう","びょう","べう","びょう","みゃう","みょう","めう","みょう","やう","よう","えう","よう","りゃう","りょう","れう","りょう","あう","おう","かう","こう","さう","そう","たう","とう","なう","のう","はう","ほう","まう","もう","らう","ろう","わう","おう","がう","ごう","ざう","ぞう","だう","どう","ばう","ぼう"); %hd = ("か","が","き","ぎ","く","ぐ","け","げ","こ","ご","さ","ざ","し","じ","す","ず","せ","ぜ","そ","ぞ","た","だ","ち","ぢ","つ","づ","て","で","と","ど","は","ば","ひ","び","ふ","ぶ","へ","べ","ほ","ぼ"); %hp = ("ば","ぱ","び","ぴ","ぶ","ぷ","べ","ぺ","ぼ","ぽ"); $jionkanji=""; $max=0; $hiragana="あいうえおぁぃぅぇぉかきくけこがぎぐげごさしすせそざじずぜぞたちつてとだぢづでどなにぬねのはひふへほばびぶべぼぱぴぷぺぽまみむめもやゆよゃゅょらりるれろわゎゐゑをんっ"; $katakana="アイウエオァィゥェォカキクケコガギグゲゴサシスセソザジズゼゾタチツテトダヂヅデドナニヌネノハヒフヘホバビブベボパピプペポマミムメモヤユヨャュョラリルレロワヮヰヱヲンッ"; binmode (STDOUT); $mes="字音リスト作成中...\n"; &comhyoji; open IN, "<:utf8", $jionfile; $count=0; while() { @t=split('\t'); $i=$t[0]; while (($a, $b) = each(%hm)) { $i=~ s/$a/$b/; } while (($a, $b) = each(%ho)) { $i=~ s/$a/$b/; } if (($i ne $t[0]) and ($jionkanji !~ /($t[1])/)) {$jionkanji.=$t[1];} push (@{$hyon{$t[1]}},$i); push (@{$jion{$t[1]}},$t[0]); $max++; #ふくつちき $pkonj=$t[0]; $pkonh=$i; $pkknj=$t[1]; &pkt; #濁音化 $dkonj=$t[0]; $dkonh=$i; $dkknj=$t[1]; &dkon; #カウント $count++; if (($count % 100)==0) {print "$count\n";} } close IN; open IN, "<:utf8", $kunyomifile; while() { @t=split('\t'); if ($jionkanji !~ /($t[0])/) {$jionkanji.=$t[0];} #既に登錄したのは除く $chksum=0; for ($i=0; $i<=$#{$jion{$t[0]}}; $i++) { if (($jion{$t[0]}[$i] eq $t[2]) or ($hyon{$t[0]}[$i] eq $t[1])) { $chksum=1; last; } } if ($chksum==0) { push (@{$hyon{$t[0]}},$t[1]); push (@{$jion{$t[0]}},$t[2]); $max++; #濁音化 $dkknj=$t[0]; $dkonh=$t[1]; $dkonj=$t[2]; &dkon; } } close IN; $mes="完了\n"; &comhyoji; open OUT,">:utf8","jionkanjilisttest.txt"; print OUT $jionkanji; close OUT; $mes="表音リスト作成中...\n"; &comhyoji; open IN, "<:utf8", $tanfile; $count=0; while () { @t=split('\t'); $count++; if (($count % 1000)==0) {print "$count\n";} #二文字以上のは除く if (length($t[1])>1) {next;} #既に登錄したのは除く $chksum=0; for ($i=0; $i<=$#{$jion{$t[1]}}; $i++) { if (($jion{$t[1]}[$i] eq $t[0]) or ($hyon{$t[1]}[$i] eq $t[0])) { $chksum=1; last; } } if ($chksum==0) { push (@{$hyon{$t[1]}},$t[0]); push (@{$jion{$t[1]}},$t[0]); $max++; #ふくつちき $pkonj=$t[0]; $pkonh=$t[0]; $pkknj=$t[1]; &pkt; #濁音化 $dkknj=$t[1]; $dkonh=$t[0]; $dkonj=$t[0]; &dkon; } } close IN; $mes="完了\n"; &comhyoji; for ($i = 0; $i < length($hiragana); $i++) { $c = substr($hiragana, $i, 1); $d = substr($katakana, $i, 1); push (@{$hyon{$c}},$c); push (@{$jion{$c}},$c); $max++; push (@{$hyon{$d}},$c); push (@{$jion{$d}},$c); $max++; } push (@{$hyon{'ー'}},'ー'); push (@{$jion{'ー'}},'ー'); $max++; print "max = $max\n"; open OUT,">:utf8",$outfile; foreach $key(keys %jion){ for ($i=0; $i<=$#{$jion{$key}}; $i++) { print OUT "$key\t$hyon{$key}[$i]\t$jion{$key}[$i]\t\n"; } } close OUT; exit; sub comhyoji { print Encode::encode("shiftjis", $mes); } #ふくつちき sub pkt { if (length($pkonj)>1) { if (substr($pkonj,-1)=~ /[ふちつ]/) { substr($pkonj,-1)="っ"; substr($pkonh,-1)="っ"; push (@{$hyon{$pkknj}},$pkonh); push (@{$jion{$pkknj}},$pkonj); $max++; if ($pkonj ne $pkonh) { push (@{$hyon{$pkknj}},$pkonj); push (@{$jion{$pkknj}},$pkonj); $max++; } } elsif (substr($pkonj,-1)=~ /[きく]/) { substr($pkonh,-1)="っ"; push (@{$hyon{$pkknj}},$pkonh); push (@{$jion{$pkknj}},$pkonj); $max++; } } } #濁音化 sub dkon { $h=substr($dkonh,0,1); $j=substr($dkonj,0,1); while (($a, $b) = each(%hd)) { $h=~ s/$a/$b/; $j=~ s/$a/$b/; } if ($h ne substr($dkonh,0,1)) { substr($dkonh,0,1)=$h; substr($dkonj,0,1)=$j; push (@{$hyon{$dkknj}},$dkonh); push (@{$jion{$dkknj}},$dkonj); $max++; #ふくつちき $pkonj=$dkonj; $pkonh=$dkonh; $pkknj=$dkknj; &pkt; #更にぱぴぷぺぽ while (($c, $d) = each(%hp)) { $h=~ s/$c/$d/; $j=~ s/$c/$d/; } if ($h ne substr($dkonh,0,1)) { substr($dkonh,0,1)=$h; substr($dkonj,0,1)=$j; push (@{$hyon{$dkknj}},$dkonh); push (@{$jion{$dkknj}},$dkonj); $max++; #ふくつちき $pkonj=$dkonj; $pkonh=$dkonh; $pkknj=$dkknj; &pkt; } } }