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

  [No.776] スクリプトにより実行の自動化 投稿者:アリ  投稿日:2011/05/16(Mon) 16:37:21

樋口先生、お世話になっとります。アリです。

いつもご教授を頂き、ありがとうございます。

以前お話をしましたが、KHCoderがGUIではなく、スクリプトにより実行自動化をしようと思っていますが、Perl開発については、本当に素人なので、いろんなことを教えて頂きたいです。

以前、教えて頂いたKHCoderのソース体系によって、新たなプロジェクトを作成する時、ソース実行は次のように呼び出しされると思います。

gui_window::project_new.pm の Sub(_make_new)
→ kh_project::new と kh_projectsのreadとadd_new

早速ですが、
例えば、GUIによりではなく、khcoder\下に新たなnewprojec.plを作成して、perl newproject.plにより新規プロジェクトの作成をできるようにしたいですが。
プロジェクトの分析対象ファイルは固定ファイル(例:c:\khcoder\inputfile\sample.txt)となります。

newproject.plの開発はいろいろ試しましたが、実行エラーでうまく行っていないです。
もし先生より開発方法や簡単なソースサンプルを頂ければ、大変助かると思いますが、よろしくお願い致します。


  [No.777] Re: スクリプトにより実行の自動化 投稿者:HIGUCHI Koichi  投稿日:2011/05/16(Mon) 17:58:40

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

そうですね、まずは、コマンドラインからの実行(perl kh_coder.pl)で、正
常に新規プロジェクトの作成、前処理の実行、抽出語リストの作成などができ
ることを確認しておくとよいでしょう。

その上で、「kh_coder.pl」を「newproject.pl」という名前のファイルにコピ
ーします。そして「newproject.pl」を編集するのですが、「__END__」という
行以降はすべてコメントとみなされることに注意して下さい。

で、「__END__」の手前に「MainLoop;」という行があると思います。この行の
直前に空きを作って、そこに自動実行したい処理を入れます。例えば、以下
のような感じです。以下の例では、特定のファイルをプロジェクトととして登
録し、前処理を行い、抽出語リストを作成しています。その後、不要になった
プロジェクトを削除して、KH Coderを終了しています。

なお、'c:\khcoder\inputfile\sample.txt'がすでにプロジェクトとして登録さ
れているとエラーになりますのでご注意下さい。

#---------------------------------------------------------------------

# ファイル名指定
my $file_target = 'c:\khcoder\inputfile\sample.txt';

# プロジェクト新規作成
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 a new project\n");

# 新規作成したプロジェクトを開く
$new->open or die;
$::main_gui->close_all;
$::main_gui->menu->refresh;
$::main_gui->inner->refresh;

# 前処理実行
mysql_ready->first;

# 頻出150語の表を作成して開く
my $file_wordlist = mysql_words->word_list_custom(
type => 'def',
num => 'tf',
ftype => 'xls',
);
gui_OtherWin->open($file_wordlist);

# GUI経由で新規作成したプロジェクトを閉じる
$::main_gui->{menu}->mc_close_project;

# GUI経由で新規作成したプロジェクトを削除
#(正確には最後に追加したプロジェクトを削除)
gui_window::project_open->open;
my $win_opn = $::main_gui->get('w_open_pro');
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;

# KH Coder 終了
exit;

#---------------------------------------------------------------------


  [No.778] Re: スクリプトにより実行の自動化 投稿者:アリ  投稿日:2011/05/17(Tue) 11:42:18

樋口先生、お世話になっております。アリです。

詳細なサンプルと説明を頂き、大変助かりました。どうもありがとうございました。

新たなnewproject.plがうまく動きました。

次は、クラスタ分析という機能が実行続けるようにしたいですが、
menu.pmによって、クラスタ分析が「gui_window::doc_cls->open」というメソッドによって、GUIオプション画面が表示され、いくつかの引数(集計単位、品詞選択、クラスタ数など)を定義し、「OK」ボタンを押して実行すると思いますが。
スクリプトの場合は、doc_cls->calcを直接に実行しますが、
事前定義の引数(集計単位、品詞選択、クラスタ数)がどうやって渡せますか、またクラスタ分析の結果も外部ファイルに出力したいですが。
例えば、集計単位が<h2>の場合、クラスター1に4つの文書があり、それぞれ文書の<H2>タイトルの情報が外部ファイルに格納したいです。
どうやって実現できるか教えて頂けませんか。
よろしくお願い致します。