[掲示板へもどる]
一括表示

  [No.139] 解析量について 投稿者:李在鎬  投稿日:2006/03/10(Fri) 07:07:14

お世話になります。李在鎬と申します。
テキストエディターで約60,000文あることを確認した
テキストデータを前処理をしました。が、KHcoderの文章の単純集計では
1,303文しかないことになっています。実際茶せんで解析したファイルを見ても、
全文は解析されていないようですが、どう対処したら良いのでしょうか。
よろしくお願いします。


  [No.140] Re: 解析量について 投稿者:HIGUCHI Koichi  《URL》   投稿日:2006/03/10(Fri) 17:27:09

お世話になります樋口です。書き込みありがとうございます。
ひとまず、下記をご確認いただけますでしょうか。

分析対象ファイルと同じフォルダに、coder_dataというフォルダが
あり、その中に、ファイル名が「_mph.txt」で終わっているファイ
ルが作成されていると思います。

このファイルには、ちゃんと約60,000文入っていますでしょうか?


  [No.141] Re: 解析量について 投稿者:李在鎬  投稿日:2006/03/12(Sun) 10:31:21

お返事遅くなりました。李です。
> > このファイルには、ちゃんと約60,000文入っていますでしょうか?
いいえ、約1200文入っています。
よろしくお願いします。


  [No.142] Re: 解析量について 投稿者:HIGUCHI Koichi  《URL》   投稿日:2006/03/12(Sun) 18:03:04

こんにちは、樋口です。

もしできましたら、分析対象ファイルと「強制抽出する語の指定」
内容をメールでお送りいただけないでしょうか。お送りいただいた
データは、KH Coderの動作確認以外の用途には一切用いませんので、
ご検討をいただけましたら幸いです。

お送りいただくのが難しい場合には、1200文へ減少した際に、ある
部分以降が途切れているのか、それともランダムに抜け落ちている
ような感じなのかをご確認いただけますでしょうか。もし、ある部
分以降が抜け落ちているようでしたら、その部分に何か不都合が起
こりそうな点が無いかどうかご確認下さい。この場合ですと、デー
タをお送りいただかなくても対処できる可能性があります。

その他には、「強制抽出する語の指定」をいったんカラにして再度
前処理を行ってみていただけますでしょうか。これでうまくいくよ
うであれば「強制抽出する語の指定」内容だけをお知らせいただけ
ば、おそらく対処できると思います。


  [No.143] 制御文字と文字化け 投稿者:HIGUCHI Koichi  《URL》   投稿日:2006/03/14(Tue) 00:38:10

こんにちは、樋口です。

今回はKH Coderの動作確認のために、大切なデータを拝見させていただき
まして、大変ありがとうございました。おそらく、問題は解決したと思い
ますので、お送りいただいたデータは削除させていただきました。
(もし解決していなかった場合には再度ご連絡下さいませ)

データファイル中に制御文字や文字化け箇所があると、トラブルが生じる
場合があるわけですが、以下に、自分の備忘用途もかねて、今回使用した
Perlスクリプトを貼っておきます。改行文字を除く制御文字を半角スペー
スに置換し、文字化けを含む行を削除するというものです。文字化け箇所
を完全に取り除くことはできていないと思いますが、文字コード判別に影
響を及ぼすような"致命的"な部分は削除できると思います。
(利用にはPerlが必要になります)

------------------------------------------------------------------
# ユーザー設定
my $file_in  = "hoge.txt";              # 入力ファイル(S-JIS)
my $file_out = "hoge_ed.txt";           # 出力ファイル

# 設定
use strict;
use Jcode;
my $ascii           = '[\x00-\x7F]';
my $twoBytes        = '[\x8E\xA1-\xFE][\xA1-\xFE]';
my $threeBytes      = '\x8F[\xA1-\xFE][\xA1-\xFE]';
my $ctrl            = '[[:cntrl:]]';                         # 制御文字
my $rep             = ' ';                                   # 制御文字の置換用
my $character_undef = '(?:[\xA9-\xAF\xF5-\xFE][\xA1-\xFE]|'  # 9-15,85-94区
	. '\x8E[\xE0-\xFE]|'                                     # 半角カタカナ
	. '\xA2[\xAF-\xB9\xC2-\xC9\xD1-\xDB\xEB-\xF1\xFA-\xFD]|' # 2区
	. '\xA3[\XA1-\xAF\xBA-\xC0\xDB-\xE0\xFB-\xFE]|'          # 3区
	. '\xA4[\xF4-\xFE]|'                                     # 4区
	. '\xA5[\xF7-\xFE]|'                                     # 5区
	. '\xA6[\xB9-\xC0\xD9-\xFE]|'                            # 6区
	. '\xA7[\xC2-\xD0\xF2-\xFE]|'                            # 7区
	. '\xA8[\xC1-\xFE]|'                                     # 8区
	. '\xCF[\xD4-\xFE]|'                                     # 47区
	. '\xF4[\xA7-\xFE]|'                                     # 84区
	. '\x8F[\xA1-\xFE][\xA1-\xFE])';                         # 3バイト文字

# 処理の開始
open (OUT,">$file_out") or die;
open (IN,$file_in) or die;
binmode (IN);
my $n = 0;                              # 文字化けのあった行を数えるカウンタ
while (<IN>){
	chomp;
	my $t = Jcode->new($_,'sjis')->h2z->euc;
	if (
		$t =~ /^(?:$ascii|$twoBytes|$threeBytes)*?(?:$character_undef)/
	) {                                 # 文字化けがあった場合
		# ファイルには出力せずにカウント
		print "$_\n";
		++$n;
	} else {                            # 文字化けがなかった場合
		# 制御文字を置換して出力
		$t =~ s/\G((?:$ascii|$twoBytes|$threeBytes)*?)(?:$ctrl)/$1$rep/g;
		print OUT Jcode->new($t,'euc')->sjis,"\n";
	}
}
close (IN);
close (OUT);
print "lines deleted: $n\n";