Hatena::Groupatokdirect

MediaLab Love Annex

2009-04-22

tansi_atok

単語の表記ゆれを表示する「たんし ATOKダイレクト」

| 10:34 |  単語の表記ゆれを表示する「たんし ATOKダイレクト」 - MediaLab Love Annex を含むブックマーク はてなブックマーク -  単語の表記ゆれを表示する「たんし ATOKダイレクト」 - MediaLab Love Annex

を作りました。ATOK 2009で漢字変換して、確定する前にCtrl + Insertを押せばその単語の表記ゆれ候補が、

  1. OR区切り(検索エンジン用)
  2. |記号区切り(正規表現用)
  3. その他、単語別

として出てきます。

ダウンロード(7.6MB) sourceforge.jp

ダウンロード後、

C:\Documents and Settings\WindowsログインID\Application Data\Justsystem\ATOK\ATOKRIRECT

(Windows XP)

に同梱のTANSI_v110.sqlite.dbを入れてください。これで準備完了です。Perlが必要なので、ActivePerlを入れてください。

Windows Vistaの方は未確認ですが、

C:\Users\WindowsログインID\AppData\Roaming

ATOKのフォルダがあると思われますので、そこに入れてください。

f:id:Koumei_S:20090422095931p:image

例えばアメリカと入力した場合、図のようになります。

  1. "アメリカ" OR "米" OR "亜米利加"
  2. アメリカ | 米 | 亜米利加
  3. (アメリカ | 米 | 亜米利加)
  4. アメリカ
  5. 亜米利加

イチョウと入力した場合は、

銀杏と入力した場合は

と言う風に2つの候補が出てきます。

f:id:Koumei_S:20090422095932p:image

f:id:Koumei_S:20090422095933p:image

元になっている辞書は私が作成している「たんし」です。

候補を増やしたいという方は、前述のTANSI_v110.sqlite.dbに単語とその候補を追加すればできます。SQLiteの操作ソフト、例えばSQLite Manager等を使用してください。

確認した環境

package Atok_plugin;

use strict;
use utf8;
#use Cwd;
#use Encode;
use DBI;
#use Data::Dumper;
#use MeCab;

#my $CD = Cwd::getcwd() . "/";
#my $temp_file = "temp";
my $database_file = "TANSI_v110.sqlite.db";

sub run_process
{
  my( $a_request_data ) = @_;

  my %result_data;

  my @candidate_array;
  my @yure_candidates = [];
  my @word_candidates;
    
  my $for_searchengines;
  my $for_regex;
  
  my $dbh = DBI->connect("dbi:SQLite:dbname=$database_file","","");

  my $sql_ref = $dbh -> selectall_arrayref('SELECT WORD, HINSI1, CANDIDATES, HINSI2 FROM TANSI WHERE WORD LIKE "' . $a_request_data->{ 'composition_string' } . '";');


  if($sql_ref){
    for(my $i = 0 ; $i < @$sql_ref ; $i++){
      @yure_candidates = split(/\//, @$sql_ref[$i]->[2]);
      $for_searchengines = '"' . join('" OR "',@yure_candidates) . '"';
      $for_regex = join(' | ',@yure_candidates);
      push(@word_candidates, @yure_candidates);
      push( @candidate_array , {'hyoki' => $for_searchengines,
                                'alternative' => @$sql_ref[$i]->[1] . @$sql_ref[$i]->[3],
                                'alternative_type' => 'definite_string'} );
      push( @candidate_array , {'hyoki' => $for_regex,
                                'alternative' => @$sql_ref[$i]->[1] . @$sql_ref[$i]->[3],
                                'alternative_type' => 'definite_string'} );
      push( @candidate_array , {'hyoki' => '(' . $for_regex . ')',
                                'alternative' => @$sql_ref[$i]->[1] . @$sql_ref[$i]->[3],
                                'alternative_type' => 'definite_string'} );
    }
    foreach my $j (@word_candidates){
        push( @candidate_array , {'hyoki' => $j } );
    }
  }

  if($@){
    $dbh -> disconnect;
    die "Error: $@";
  }
  
  #MeCab
  ###################################################################################
  #my $return_MORPHANA = system('mecab --node-format="%m\t%f[0]\t"' . $filepath);
  #my $return_MORPHANA = `mecab --node-format="%m\t%f[0]\t" $filepath`;
  #exec('mecab ' . $filepath . "> temp2");
  ###################################################################################

  $result_data{ 'candidate' } = \@candidate_array;

  return( %result_data );
}

1;