韓日ミニ辞典開発歴に戻る

メイン・モジュール

検索すべき文字列が入力されれば,最初に辞書データを検索します。
$found==0 の場合は,見出し項目に含まれていなかったことになります。
その時は,形態素解析を行います。
形態素解析ができなければ,「未知語です」と表示して終了します。

========= メイン・モジュールここから開始 ===========
<?php

# キーワード入力があれば検索開始
if ($_POST[ "KEYWORD" ] != "") {
  $word = $_POST[ "KEYWORD" ];

# ヒット位置を初期化
  $found=0;
  $f_line = 0;

# ディレクトリ/ファイル検索
  print "<hr>";
  $found = search_word($word);
  # 見つからなければ形態素解析を行う
  if ($found == 0) {
    print "【アルゴリズムによる形態素解析】<br>\n";
    echo("<font color=blue>");
    print "理論上の可能性を示しただけです。<br>\n";
    print "利用者の判断で取捨選択して下さい。</font><br><br>\n";
    #形態素解析の開始
    $found=Analyze($word);
      if ($found == 0) {
        echo("<font color=red>");
        echo($word);
        echo("は未知語です。</font>\n");
      }
    }
  }

形態素解析モジュール

文字列の長さを調べて全体を主要部と語末の1文字に分けます。
語末の1文字が母音か子音かで大きく2つの場合に分け,さらに
それぞれの場合で最後の1文字を調べます。

========= 形態素解析モジュールここから開始 ===========

$len_w = strlen($spel); # ハングル1文字=3バイト
$last_spel = substr($spel, $len_w-3, 3); #末尾の切り出し
$morph = substr($spel, 0, $len_w-3); #実辞の切り出し
$uniLast=Uni_conv($last_spel);
$len_U=strlen($uniLast);
$last_code = substr($uniLast,0,$len_U-1)-44032; #1 から 11172
$VowCons_code = $last_code % 28;
  switch($VowCons_code) {
  case 0: #母音終わり
    switch ($last_spel) {
    case "가":
      $last_morph = substr($morph, $len_w-6, 3);
      $found = Analyze_ga($morph, $last_morph, "", "");
      break;     case "과":
      $last_morph = substr($morph, $len_w-6, 3);
      $found = Analyze_gwa($morph, $last_morph, "", "");
      break;

    {中略}

    case 4: #N終わり
      switch($last_spel) {
      case "는":
        $last_morph = substr($morph, $len_w-6, 3);
        $found = Analyze_nyn($morph, $last_morph, "", "");
        break;
      case "만":
        $last_morph = substr($morph, $len_w-6, 3);
        $found = Analyze_man($morph, $last_morph, "", "");
        break;

    {以下略}

가の形態素解析

#------------------------#

#   gaの解析形態素解析   #

#------------------------#
function Analyze_ga($morph, $last_morph, $x, $y) {
 $found="";
 global $flag;
 global $script;
 global $pastSet;
 $uniLast=Uni_conv($last_morph);
 $len_U=strlen($uniLast);
 $last_code = substr($uniLast,0,$len_U-1)-44032;
 $VowCons_code = $last_code % 28;
 if ($VowCons_code == 0) { // 母音終わり,助詞や語尾に続く可能性もある
   $found+=1;
   $keyword = mb_convert_encoding($morph, 'UTF-8', 'auto') ;
   print "【解析".$found."】 <a href=\"$script?key=$keyword\">$morph</a>(体言)+";
   print "가(助詞)<br>";
 }
 return $found;
}

Unicode変換

function Uni_conv($word) {
 $Wlen=strlen($word);
 $h_code="";
 for ($i=0;$i<$Wlen;$i++){
   $fst=ord(substr( $word, $i, 1 ));
   $sec=ord(substr( $word, $i+1, 1 ));
   $trd=ord(substr( $word, $i+2, 1 ));
   $fst_code=($fst-224)*4096+floor*1*256;
   $sec_code=($sec-128)%4*64+($trd-128);
   $temp_code=$fst_code+$sec_code;
   $h_code=$h_code.$temp_code."@";
   $i=$i+2;
 }
 return $h_code;
}

韓日ミニ辞典開発歴に戻る


*1 ($sec-128)/4

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-06-23 (木) 11:13:14 (3412d)