Yet Another ルー語変換

last update: 8 Jun 2007

home

Yet Another ルー語変換



1.1 はじめに
いまさらですが、ルー語変換です。
オリジナルは

こちら

新人研修のネタで、PHPでルー語変換が作れないか、ちょっと考えて半日で作ってみました。 結局、研修には使わなかったのですが。

1.2 しくみ
サイトは

http://www.buena-idea.net/~hironobu/Lou/YetAnother-LouTranc.html

このhtmlファイルは、文字列をlou.phpに送り込むだけです。

<html><head>
<meta http-equiv="Content-Type" content="text/html;"><title>Yet Another ルー語変換</title>
</head><body>
<center>
<h1 class="center">Yet Another ルー語変換</h1>

<form method="post" action="./lou.php">
<textarea name="comment" rows="10" cols="64"></textarea>
<br>
<input type="submit" value="送信" /> 
<input type="reset" value="取り消し" />

</p>
</form>
</center>
</body></html>

YetAnother-LouTranc.html


lou.phpは、まずはじめに変換辞書"Lou-dict3"を連想配列に読み込み、 送り込まれた文字列に対して、str_replace()を使ってルー語に変換するというシンプルなものです。

<html>
<head><meta http-equiv="Content-Type" content="text/html;">
<title>Yet Another ルー語変換</title></head>
<body>

<?php
$fp = fopen("./Lou-dict3", "r");
while(!feof($fp)) {
  $line = fgets($fp, 256);
  $line = chop ($line);
  $list = split('	', $line);
  $dict{$list[0]} = $list[1];
}
fclose ($fp);

##
##

$comment = $HTTP_POST_VARS["comment"];

print "$comment\n";
print "<br>";
print "<hr>";
print "<br>";

foreach ($dict as $key => $val) {
    $comment = str_replace ($key, $val, $comment);
  }

print "$comment";

?>
<br>
<br>
<center>
<a href="./YetAnother-LouTranc.html">ワンスモア!</a>
</center>
</body>
</html>

lou.php


1.3 変換辞書の作り方
ということで、ルー語変換の肝は変換辞書作りにあるので、簡単に手順を示します。
というか、変換辞書作りのアイディアが浮かんだからPHPでルー語変換をやろうと思った。

直接ダウンロードしたい場合はこちら(305Kbyte):
http://www.buena-idea.net/~hironobu/Lou/Lou-dict3

  1. 元辞書入手
    とりあえず、日本語辞書が必要です。 私はedict.gzを使いました。
    http://ftp.monash.edu.au/pub/nihongo/edict.gz

  2. 元辞書の加工
    edict.gzは展開すると、次のようなファイルなので、
    
    …
    
    2000年対応 [にせんねんたいおう] /(exp) Y2K compliant/
    2000年問題 [にせんねんもんだい] /(n) Y2K bug/year 2000 problem/
    2000年問題対応 [にせんねんもんだいたいおう] /(exp) Y2K compliant/
    2000年問題対策済み [にせんねんもんだいたいさくずみ] /(n) Y2K compliant/
    2等 [にとう] /(n) second class/
    2等軍曹 [にとうぐんそう] /(n) staff sergeant/
    2等車 [にとうしゃ] /(n) second class carriage/
    2等賞 [にとうしょう] /(n) second prize/
    2等親 [にとうしん] /(n) second-degree relative/
    
    …
         

    awkを使って第一列の単語だけ切り出します。
      % awk '{print $1}' edict > edict2

    
    …
    
    2000年対応
    2000年問題
    2000年問題対応
    2000年問題対策済み
    2等
    2等軍曹
    2等車
    2等賞
    2等親
    
    …
         

  3. edict2をhtmlファイル化
    だんだん見えてきましたね。

    上で作った単語リストをhtmlファイル化します。ただし、一つのhtmlファイルにすると長すぎるので、 10000語程度毎に分割してhtmlファイルにします。

  4. htmlファイルをサイトにアップし、…
    上の方法で作ったhtmlファイル群をどこかWEBサイトにアップし、 オリジナルの
    ルー語変換
    で変換します。
  5. オリジナルの単語リストedict2と、変換後のファイルの比較
    オリジナルの単語リストedict2と、変換後のファイルを比較して、変換されたものだけ抽出します。
    perlあたりが得意の処理ですね。
  6. ひたすら加工
    上の手法で変換辞書はできますが、大きすぎるなどいろいろ問題があります。
    sed、awk、perl、uniq、sortなど、Unixのツール使いまくりでなんとか305Kbyte程度までにします。


home