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

  [No.2608] 関連語検索の失敗条件について 投稿者:Kurosawa  投稿日:2016/09/14(Wed) 12:57:13

樋口先生. お世話になっております. 黒澤と申します.

現在, Webサイトの本文とキーワードを用いて, 関連語を抽出することにより解析を行おうと試みております.

ソースコードの方を拝見させていただきまして,
自動実行のauto_run.pmを書き換えて関連語検索を外部スクリプトより実行しています.
その際に, 本文の内容によっては関連語検索の結果が表示されないことがあるという問題に直面しています.

word_ass.pm内の
if ($query_ok){}
という条件文内部でdisplay関数を呼び出すことにより結果を表示していると思われますが, この$query_okフラグが真にならないために結果が表示されてないと考えています.
おそらくは関連語検索がうまく行えなかったと考えておりますが, $query_okが真にならない場合はどのようなケースが考えられるのでしょうか. また, その対処法についてもご教授お願いいたします.


ちなみに, 検索対象の本文はKH Coderの形式(<H1>タグ等の付加, その他タグ等の排除済)にしております.


  [No.2609] Re: 関連語検索の失敗条件について 投稿者:Kurosawa  投稿日:2016/09/14(Wed) 13:04:33

以下, auto_run.pmのソースコードとなります.
search関数およびdisplay関数は必要に応じて修正させていただきました.
ディレクトリは伏せてあります.
-----------------------------------------------------------------------

package auto_run;

/* 略(データの入力部分) */

sub plugin_config{

&run;


sub run{


my $file_target = $path_list[0];


my $file_save = $path_list[1];


my $icon = $::main_gui->win_obj->Photo('window_icon',



-file => Tk->findINC('acre.gif')


);



my $new = kh_project->new(


target => $file_target,


comment => 'auto',


) or die("could not create a project\n");


kh_projects->read->add_new($new) or die("could not save the project\n");



$new->open or die("could not open the project\n");


my $wait_window = gui_wait->start;


&gui_window::main::menu::mc_morpho_exec;


$wait_window->end(no_dialog => 1);


my $win = gui_window::word_ass->open;


my $e_val = $path_list_d[0];


print $e_val;


$win->{direct_w_e}->insert('end', $win->gui_jchar($e_val) ); #japanese


&search_c($win);


#$win->search;


sleep 5;


$::main_gui->close_all;


undef $::project_obj;


my $win_opn = gui_window::project_open->open;


my $n = @{$win_opn->projects->list} - 1;


$win_opn->{g_list}->selectionClear(0);


$win_opn->{g_list}->selectionSet($n);


$win_opn->delete;


$win_opn->close;


exit;

}

return {


name => '...',

};
}

sub exec{

print "...";
}

sub search_c{

my $self = shift;

$self->{status_label}->configure(


-foreground => 'blue',


-text => '1'

);

$self->activate;

$self->{status_label}->configure(


-foreground => 'blue',


-text => '2'

);

# 選択のチェック

my @selected = $self->{clist}->info('selection');

unless (@selected){


my $win = $self->win_obj;


gui_errormsg->open(



type => 'msg',



msg => kh_msg->get('gui_window::doc_search->error_no_code'), # 'コードが選択されていません',



window => \$win,


);


return 0;

}

# ラベルの変更

$self->{hits_label}->configure(-text => kh_msg->get('hits0')); # 文書数: 0

$self->{status_label}->configure(


-foreground => 'red',


-text => 'Searching...'

);

$self->{rlist}->delete('all');

$self->win_obj->update;

sleep (0.01);

# 直接入力部分の読み込み

$self->{code_obj}->add_direct(


mode => $self->gui_jg( $self->{opt_direct} ),


raw => $self->gui_jg( $self->{direct_w_e}->get ),

);

$self->{status_label}->configure(


-foreground => 'blue',


-text => '3'

);

# 検索ロジックの呼び出し(検索実行)

my $query_ok = $self->{code_obj}->asso(


selected => \@selected,


tani => $self->tani,


method => $self->{opt_method1},

);

$self->{status_label}->configure(


-foreground => 'blue',


-text => 'Ready.'

);

if ($query_ok){


$self->{code_obj} = $query_ok;


&display_c($self);

}

else{


open(FH,"> /Users/***/Desktop/khcoder/exectest/ass_result.txt");


print FH "No Query. Couldn't search. (KH Coder error) \n";


close(FH);

}

return $self;
}

sub display_c{

my $self = shift;

unless ( $self->{code_obj} ) {return undef;}

unless ( $self->{code_obj}->doc_num ) {return undef;}

my $order_name = {


'fr' => kh_msg->get('fr'), # 共起


'sa' => kh_msg->get('sa'), # 確率差


'hi' => kh_msg->get('hi'), # 確率比


'jac' => 'Jaccard',


'ochi'=> 'Ochiai',


'dice'=> 'Dice',


'll' => 'Log Likelihood',

};

$filter = undef;

$filter->{limit} = 75; # LIMIT数

$filter->{min_doc} = 1; # 最低文書数

my $h = mysql_exec->select(" # 品詞によるフィルタ


SELECT name, khhinshi_id


FROM hselection


WHERE ifuse = 1

",1)->hundle;

while (my $i = $h->fetch){


if (



$i->[0] =~ /B$/



|| $i->[0] eq '否定助動詞'



|| $i->[0] eq '形容詞(非自立)'


){



$filter->{hinshi}{$i->[1]} = 0;


} else {



$filter->{hinshi}{$i->[1]} = 1;


}

}

# HListの更新

$self->{rlist}->headerConfigure(5,-text,$order_name->{$self->{opt_order}});

$self->{result} = $self->{code_obj}->fetch_results(


order => $self->{opt_order},


filter => $filter,

);

my $numb_style = $self->{rlist}->ItemStyle(


'text',


-anchor => 'e',


-background => 'white',


-font => "TKFN"

);

open(FH,"> /Users/***/Desktop/khcoder/exectest/ass_result.txt");

$self->{rlist}->delete('all');

if ($self->{result}){


my $row = 0;


foreach my $i (@{$self->{result}}){



$self->{rlist}->add($row,-at => "$row");



$self->{rlist}->itemCreate( # 順位




$row,




0,




-text => $row + 1,




-style => $numb_style



);



print FH $row + 1;



print FH " ";



$self->{rlist}->itemCreate( # 単語




$row,




1,




-text => $self->gui_jchar($i->[0]),



);



print FH $self->gui_jchar($i->[0]);



print FH " ";



$self->{rlist}->itemCreate( # 品詞




$row,




2,




-text => $self->gui_jchar($i->[1]),



);



print FH $self->gui_jchar($i->[1]);



print FH " ";



$self->{rlist}->itemCreate( # 全体




$row,




3,




-text => "$i->[2]"." ("."$i->[3]".")",




-style => $numb_style



);



print FH "$i->[2]"." ("."$i->[3]".")";



print FH " ";



$self->{rlist}->itemCreate( # 共起




$row,




4,




-text => "$i->[4]"." ("."$i->[5]".")",




-style => $numb_style



);



print FH "$i->[4]"." ("."$i->[5]".")";



print FH " ";



$self->{rlist}->itemCreate( # Sort




$row,




5,




-text => " ".sprintf("%.4f",$i->[6]),




-style => $numb_style



);



print FH $i->[6];



print FH "\n";



++$row;


}

} else {


$self->{result} = [];

}

close(FH);

# ラベルの更新

my $num_total = $self->{code_obj}->doc_num;

gui_hlist->update4scroll($self->{rlist});

$self->{hits_label}->configure(


-text => $self->gui_jchar(



kh_msg->get('hits') # 文書数:



.$num_total


)

);

return $self;
}

1;


  [No.2610] Re: 関連語検索の失敗条件について 投稿者:HIGUCHI Koichi  投稿日:2016/09/16(Fri) 17:49:14

こんにちは、樋口です。書き込みありがとうございます。

> 本文の内容によっては関連語検索の結果が表示されない

手動で検索した場合は、結果が出ますでしょうか。

単に、検索条件に合致する文書が無かったというようなことはないでしょうか。


  [No.2616] Re: 関連語検索の失敗条件について 投稿者:Kurosawa  投稿日:2016/09/20(Tue) 10:23:56

樋口先生 返信ありがとうございます.

自動で検索結果が出ない条件においては, 手動でも結果は出ませんでした.

キーワードによっては, 結果として共起の値が1.000で同率1位というものが複数現れることがありました.
そのため, 何かしらの結果は出るものかと思っていました.

>単に、検索条件に合致する文書が無かったというようなこと
とはどういうことでしょうか. 結果が表示されない場合は何かしらの理由があって, 上記のような結果になる場合とは異なる分岐条件があるということでしょうか.

お忙しいとは存じますが, ご教授願います.


  [No.2617] Re: 関連語検索の失敗条件について 投稿者:HIGUCHI Koichi  投稿日:2016/09/20(Tue) 10:43:48

こんにちは、樋口です。書き込みありがとうございます。

>> 単に、検索条件に合致する文書が無かったというようなこと
> とはどういうことでしょうか.

例えば「A」という語を検索したけれど、その語「A」がデータ中に無かったの
ではないかということです。

この場合は「A」に関連する語を検索することはできません。


  [No.2618] Re: 関連語検索の失敗条件について 投稿者:Kurosawa  投稿日:2016/09/20(Tue) 12:49:05

なるほど, 確かに検索対象の文章中にキーワードが存在していない場合に失敗していることがわかりました.

対象の文章によって検索の仕方を工夫しなければいけないみたいですね.
ありがとうございます.