[Home]POPFile/V0222jProblem

Amatubu_Wiki | POPFile | RecentChanges | Preferences

Showing revision 7

0.22.2 用の日本語パッチを適用すると分類に失敗することがある問題

問題が発生する環境・条件

問題の詳細

試したこと

問題の解決策(暫定)

問題検証のためのプログラム

スクリプトと同じディレクトリに、shiftjis、7bit-jis の混在したテキストファイル [test.txt] があるという条件で検証。 コメントアウトしてある行を元に戻すことにより、問題が発生しなくなることを確認。

#!/usr/bin/perl

use strict;
use Encode;
use Encode::Guess;

use Text::Kakasi;

my %encoding_candidates = (
    'Nihongo' => [ 'shiftjis', 'euc-jp', '7bit-jis' ]
);

# $Text::Kakasi::HAS_ENCODE = 0;

# パラメータを設定して辞書を開く
Text::Kakasi::getopt_argv("kakasi", "-w -ieuc -oeuc");

kakasi_test();

# 辞書を閉じる
Text::Kakasi::close_kanwadict();



sub kakasi_test {
    my $line;

    open(DB, "./test.txt");

    while (<DB>) {
        $line = $_;

        # 文字コードを euc-jp に変換する
        $line = convert_encoding( $line, '7bitjis', 'euc-jp', '7bitjis', @{$encoding_candidates{'Nihongo'}} );

        print $line;

        # 分かち書きを行う
        $line = Text::Kakasi::do_kakasi($line);

        print $line;
    }

    close(DB);
}

# 文字コードの変換
sub convert_encoding
{
    my ( $string, $from, $to, $default, @candidates ) = @_;

    require Encode;
    require Encode::Guess;

    # First, guess the encoding.

    my $enc = Encode::Guess::guess_encoding( $string, @candidates );

    if(ref $enc){
       $from= $enc->name;
	   print "Guessed encoding : $from\n";
    } else {

        # If guess does not work, check whether $from is valid.

        if (!(Encode::resolve_alias($from))) {

            # Use $default as $from when $from is invalid.

            $from = $default;
        }
    }

    # 以下のコメント部分を元に戻すことにより、テスト用ファイルにおける問題は解消される
#    if ( $from ne 'ascii' && $last_encoding ne $from ) {
#        $last_encoding = $from;
#
#        close_kakasi();
#        init_kakasi();
#    }

    unless ($from eq $to) {
        my ($orig_string) = $string;

        # Workaround for Encode::Unicode error bug.
        eval {
            Encode::from_to($string, $from, $to);
        };
        $string = $orig_string if ($@);
    }
    return $string;
}

Amatubu_Wiki | POPFile | RecentChanges | Preferences
This page is read-only | View other revisions | View current revision
Edited May 31, 2005 20:09 by Amatubu (diff)
Search:

Copyright (c) 1996-2019 naoki iimura e-mail