2007/03/12

stardictで生物学辞典第四版(EPWINGデータ)を使う

ポスト @ 23:45:23 | IT系

StarDictという辞書ソフトがあります。特に他と比べてこれが良いというわけではありませんが、今使っているDebianのapt-getでインストールできるので楽チンです。

っというわけで、今までWindowsでDDWinを使っていたのでEPWING形式データを扱っていましたが、StarDict形式へ変換する必要が出てきました。

このStarDictの良いところは、起動して知りたい単語を選択すると自動的に辞書を検索してくれるところです。論文を読み進めるのに、結構便利。

海ずかんのデータで百科事典データを作って提供したいので、URLリンクや画像を使える辞書型式があればそちらに移る予定ですが。。。


まず、先人の教えどおりDDWinを使いテキスト形式で保存しなおし

得られたテキストファイルをDebianへ移動させ、nkfでUTFへ変換。

nkf --utf8 -Lu biology.txt > biology.utf8

UTFへ変換したファイルをPHPで編集。ソースは下の通りです。
#!/usr/local/bin/php
<?PHP
$chkmode=FALSE;
$fnr="./biology.utf8";
# file open
$fpr=fopen($fnr,"r");
# read file
$iflag_sep=-1;
$istr="";
$ititle="";
$icont="";
$iline=0;
$ierror[0]=0;
$c ="";
$c1="";
$c2="";
while(!feof($fpr)){
  $c2=$c1; $c1=$c; $c=fgetc($fpr);
  if(feof($fpr)) break;
  if($c=="\n") $iline++;
  if($c1=="\n" && $c!=" " && $c!="\n"){
    # found data separator
    $iflag_sep=$iflag_sep*-1;
    if($iflag_sep>0){
      $ititle=$istr;
      $istr=$c;
    }
    else{
      $icont=$istr;
      $istr=$c;
      if(strlen($ititle)>strlen($icont)){
        #break;
        $ierror[++$ierror[0]]="up side down: line ".$iline;
        if($chkmode==TRUE) echo $iline."\n";
        $ititle=$icont;
        $iflag_sep=$iflag_sep*-1;
      }
      else{
        #write out
        if($chkmode!=TRUE) echo $ititle."\n".$icont."\n\n";
      }
    }
  }
  else{
    if($c!="\n") $istr.=$c;
  }
}
if($chkmode==TRUE){
  #echo "############ error found ##############\n";
  #for($irow=1;$irow<count($ierror);$irow++){
  #  echo $ierror[$irow]."\n";
  #}
  echo (count($ierror)-1)." data were in wrong format!\n";
}
?>

ファイルを眺めながら規則性を探したので、本当にこれで良いのかわかりません。特に人名の項は特殊で、形式エラーになるのでほとんどオミットされてしまっています。

変換したファイルを「stardict-editor」でBabylon型式として読み込むとStarDict型式の辞書ファイルができます。出てきたファイルを「/usr/share/stardict/dic/」以下へ移動すると使えるようになります。



Trackback

No Trackbacks

Track from Your Website

http://blog.bddb.org/trackback/tb.php?id=240
(言及リンクのないトラックバックは無視されます)

Comment

No Comments

Post Your Comment


*は入力必須です。E-Mailは公開されません。