樋口先生、お世話になっております。アリです。
KHCoderのクラスタ分析の手法と流れをご確認させていただきたいですが。
doc_cls.pmのsub cacl と sub cacl_execの中身を見ると、距離の計算とグループ分けはRの関数distとhclustを利用していると思います。
Rのdist関数を利用するため、分析対象ファイルのターム・文書行列(term-document matrix)というインプットファイルが必要だと思います。
KHCoderでどこでそのファイルを作成していますか?
sub cacl の「データ取り出し」ということだと思いますが、正しいでしょうか。
# データの取り出し
my $file_csv = $::project_obj->file_TempCSV;
mysql_crossout::csv->new(
file => $file_csv,
tani => $self->tani,
tani2 => $self->tani,
hinshi => $self->hinshi,
max => $self->max,
min => $self->min,
max_df => $self->max_df,
min_df => $self->min_df,
)->run;
もし、このところであれば、自分で作ったnewproject.plに追加して、単独的にそのterm-document matrixを外部に出力したいですが。
次のように、newproject.plに追加したましたが、hinshiという変数の定義でエラーが出て、なかなか動かないです。
# 新規作成したプロジェクトを開く
print "\nopen this new project\n";
$new->open or die;
$::main_gui->close_all;
$::main_gui->menu->refresh;
$::main_gui->inner->refresh;
#分析対象ファイルをチェックする
#use kh_datacheck;
#kh_datacheck->run;
#print '分析対象ファイルをチェックしました';
# 前処理実行
print "\nexecute pre-process\n";
mysql_ready->first;
#クラスタ分析
print "\ncluster analysis\n";
use gui_widget::tani;
use gui_widget::hinshi;
use mysql_crossout;
use gui_window::doc_cls;
# データの取り出し
my $file_csv = $::project_obj->file_TempCSV;
mysql_crossout::csv->new(
file => $file_csv,
tani => 'H2',
tani2 => 'H2',
hinshi => &hinshi,
max => '',
min => '1',
max_df => '',
min_df => '1',
)->run;
sub hinshi{
my $self = shift;
return $self->{words_obj}->hinshi;
}
・・・
・・・
「データ取り出し」ことはどうやって呼び出せるかご教授を頂ければ、大変助かると思います。
よろしくお願い致します。