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

  [No.2699] 語の取捨選択を実行するコマンド 投稿者:Kurosawa  投稿日:2016/11/01(Tue) 11:58:32

樋口先生. お世話になっております.

ソースコード版にて前処理を行う前に「語の取捨選択」の設定を行うことを試みているのですが, 記述の仕方がわからなく困っています.
自動実行で実装しようとしており, auto_run.pmのrunメソッド内に以下のような記述を行いました.


my $new = kh_project->new(

target => $file_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);

これにより, 自動でプロジェクトを登録して前処理を行うことができています.
(この後関連語検索を行いプロジェクトを閉じて終了する処理を記述していますが今回は割愛)
前処理を行う前に, GUIでいうところの「語の取捨選択」の「強制抽出する語の指定」の設定を行いたいと思っていますが, 相当するメソッドと記述方法がわかりませんでした. この方法についてご教授願います.

環境はMac OS X となっております. よろしくお願いします.


  [No.2702] Re: 語の取捨選択を実行するコマンド 投稿者:HIGUCHI Koichi  投稿日:2016/11/01(Tue) 17:36:50

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

自動化したい操作をGUIで行なっている箇所のソースを見ながら、あれこれお
試しいただくのが良いかと存じます。すなわち、「語の取捨選択」画面を作成
し、この画面の操作に対応するためのソースをご覧ください。

このソースを探すためには、下記の書籍がご参考になるのではないかと思いま
す。

『Rのパッケージおよびツールの作成と応用』
http://amzn.to/1w4Fe4Z

まずは当該のソースがどのファイルに含まれるかをお探しいただくと、いかが
でしょう。


  [No.3106] Re: 語の取捨選択を実行するコマンド 投稿者:Masahiko Nomura  投稿日:2017/08/24(Thu) 23:42:09

樋口先生、
語の取捨選択(ファイル使用)の自動化を試みていますがうまくいかないためこのスレッドに便乗して質問させていただきます。
強制抽出する語リストのファイル: mark.txt
強制抽出する語リストのファイル: stop.txt
として、これらを読み込んで前処理を実行したいと思っています。該当するモジュールはgui_window::dictionary (dictionary.pm)にありそうで、語の取捨選択の"ファイルから読み込み"にチェックして、ファイル名(フルパス)で指定して、$win->save;を呼び出したところ、コマンドラインで以下のエラーが表示されて終了してしまいました。どのパラメーターが不足しているのか私の力ではこれ以上解明できなかったため質問させていただきます。下記コードにどのようなコードを追加すれば(あるいは変更すれば)所望の動作が得られるでしょうか?
よろしくお願いいたします。

1) エラーコード(コマンドプロンプト)
Can't call method "refresh" on an undefined value at /<C:\khcoder\kh_coder.exe>gui_window/dictionary.pm line 479.

2) auto_run.pmの、#前処理実行"直前に追加したコード
#追加コードスタート-----------------------------
# ここで強制抽出語と非抽出語を指定したい
#-----------------------------------------------


my $file_mark = 'C:\khcoder\mark.txt';


my $file_stop = 'C:\khcoder\stop.txt';



# 語句の取捨選択メニューオープン


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



# 強制抽出・ファイル設定


$win->{config}->{ff_mark_check_v}=1;


$win->{config}->{ff_mark_entry}=$file_mark;



# 使用しない語・ファイル設定


$win->{config}->{ff_stop_check_v}=1;


$win->{config}->{ff_stop_entry}=$file_stop;


$win->save;
#追加コード終了-----------------------------------



# 前処理実行


my $wait_window = gui_wait->start;


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


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

以上です。
---


  [No.3107] Re: プラグイン(auto_run.pm)で分析を自動実行する時に「語の取捨選択」を 投稿者:HIGUCHI Koichi  投稿日:2017/08/25(Fri) 01:09:43

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

プラグイン(plugin_jp\auto_run.pm)を使えば、プロジェクト作成・前処理
・分析を自動実行できます。この際に「語の取捨選択」を行なうにはどうする
か、というご質問ですね。

まさしく試みていただいたように、プラグイン・ファイル(plugin_jp\auto_run.pm)
を開いて、「# 前処理実行」の手前に、「語の取捨選択」の処理を入れること
になります。そして、

> my $win = gui_window::dictionary->open;
によって「語の取捨選択」画面を開き、設定を変更してから、

> $win->save;
で変更内容を保存するのもOKです。

しかし「語の取捨選択」画面は、変更の保存時にKH Coderのメイン画面を更新
しようとします。ところが自動実行プラグインではメイン画面を描画しないまま
に処理を進めているので、エラーが出てしまっています。保存前に、以下の2行
でメイン画面を描画してやればエラーを回避できるはずです。なおこの2行を
追加しなくとも、KH Coder 3.Alpha.09h以降では正常に動作するようにしてお
きました。

> $::main_gui->{inner} = 'gui_window::main::inner'->make($::main_gui->{win_obj});
> *gui_window::main::inner::make = sub{ $::main_gui->{inner} };


それから、エラーとは関係がないのですが、「$win->save;」で保存する前に、
意図したような変更を行なえているかどうか「語の取捨選択」画面を見て確認
しておいた方が良いでしょう。「$win->save;」の直前に「return undef;」を
加えれば、「語の取捨選択」画面を見ることができます。


  [No.3108] Re: プラグイン(auto_run.pm)で分析を自動実行する時に「語の取捨選択」を 投稿者:Masahiko Nomura  投稿日:2017/08/25(Fri) 12:07:07

樋口先生、
早速のご返答ありがとうございます。ご質問させていただいた野村です。
教えていただいた「メイン画面の描画」を追加することでエラーが出なくなりました。
前のコードでは辞書をうまく読み込めず、下記のようにしてようやくファイルからの辞書読み込みに成功しました。ちょっとした達成感がありますね。。。

まだよくわかっていない部分(insert(0, 'text')とinsert('end', 'text')の使い分けなど)がありますが、とりあえず第一目標だった頻出語リストの作成まで漕ぎ着けました、
それに加えて、「return undef;」を使ってデバッグする方法を教えていただいたことが非常にありがたいです。こうすれば好きなところで動作を止めて確認できるんですね。

次は分析対象ファイルをテキストではなくexcel(*.xlsx)に変更したいと思っていますが(元のデータファイルがExcelなので)、これもなかなか苦労しています。
また質問させていただくかと思いますが、よろしくお願いいたします。

#追加コードスタート-----------------------------
#20170824 ここで強制抽出語と非抽出語を指定したい
#-----------------------------------------------


my $file_mark = 'C:\khcoder\mark.txt';


my $file_stop = 'C:\khcoder\stop.txt';



# 語句の取捨選択メニューオープン


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



# 強制抽出・ファイル設定


$win->{ff_mark_check_v} = 1;


# 「ファイルから読み込み」にチェック


$win->ff_mark_refresh;




# チェックマークを更新


$win->{ff_mark_entry}->insert(0,$win->gui_jchar($file_mark));



# 使用しない語・ファイル設定


$win->{ff_stop_check_v} = 1;


# 「ファイルから読み込み」にチェック


$win->ff_stop_refresh;




# チェックマークを更新


$win->{ff_stop_entry}->insert(0,$win->gui_jchar($file_stop));



$win->save;
#追加コード終了---------------------------------


  [No.3110] プラグイン(auto_run.pm)でexcelファイル(*.xlsx)を分析対象として分析を自動実行する 投稿者:Masahiko Nomura  投稿日:2017/08/25(Fri) 17:01:32

樋口先生、
何度も申し訳ありません。「語の取捨選択」の自動化のサポートをいただきありがうございました。
次のステップである、分析対象をテキストではなく、excelファイル (*.xlsx) にして分析を自動実行することを試みましたところ、「語の取捨選択」の際と同じrefreshのエラーが出ました。
教えていただいたメイン画面作成のための2行(下記)は入れてありますが、

$::main_gui->{menu} = 'gui_window::main::menu'->make($::main_gui->{win_obj});
*gui_window::main::menu::make = sub{ $::main_gui->{menu} };

innerではなく、$::main_gui->menu->refresh;の方でエラーになっているようです。
上記2行をコピーペーストして、'inner'を'menu'に変えることは試してみましたがうまく行きませんでした。
お手数をおかけして大変申し訳ありませんが、このエラーの解決方法をご教授いただけませんでしょうか?
よろしくお願いいたします。
KH Coderのversionは、2.00fです。

【エラー in command prompt】
Can't call method "refresh" on an undefined value at /<C:\khcoder\kh_coder.exe>gui_window/project_new.pm line 190.

【auto_run.pmのプロジェクト新規作成直前に入れたコード】
# プロジェクト新規作成
#変更部分 start----------------------------------------------
$::main_gui->{inner} = 'gui_window::main::inner'->make($::main_gui->{win_obj}); # メイン画面作成(refreshによるエラーを回避するため)
*gui_window::main::inner::make = sub{ $::main_gui->{inner} }; # 樋口先生に教えていただいた2行のコード

# 新規プロジェクト画面オープン
my $new = gui_window::project_new->open;
# 変数のセット
$new ->{e1}->insert(0,$win_project->gui_jchar($file_target)); # 分析対象ファイルのセット(GUIへの書き込み)
$new->{e2}->insert(0,$win_project->gui_jchar('auto_xlsx_test_111')); # コメントのセット(GUIへの書き込み)
$new->{icode} = 0; # 文字コードを自動判別にセット (0: auto_defect)
$new->_make_new; # 新規プロジェクト作成・登録

#comment-out#my $new = kh_project->new(
#comment-out#target => $file_target,
#comment-out#comment => 'auto',
#comment-out#) or die("could not create a project\n");
#comment-out#kh_projects->read->add_new($new) or die("could not save the project\n");
#変更部分 ends----------------------------------------------

# 新規作成したプロジェクトを開く
$new->open or die("could not open the project\n");

----
以上です
----


  [No.3111] Re: プラグイン(auto_run.pm)でexcelファイル(*.xlsx)を分析対象として分析を自動実行する 投稿者:HIGUCHI Koichi  投稿日:2017/08/25(Fri) 18:49:37

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

> Can't call method "refresh" on an undefined value at
> /<C:\khcoder\kh_coder.exe>gui_window/project_new.pm line 190.

このエラー対策については、前回の2行の後ろにもう一行付け加えておいてく
ださい。※メニューの更新については、ちょっとごまかしておく感じです。
> $::main_gui->{menu} = $::main_gui->{inner};


なお、エラーとは関係ありませんが、ファイル名を書き込んだ後は、カラム選
択ができるように以下を付け加えた方が良いかもです。
> $new->check_path($file_target);

またプロジェクトの新規作成画面を使う場合は、以下もコメントアウトして
置いた方が良いでしょう。
> # 新規作成したプロジェクトを開く
> $new->open or die("could not open the project\n");


  [No.3112] Re: プラグイン(auto_run.pm)でexcelファイル(*.xlsx)を分析対象として分析を自動実行する 投稿者:Masahiko Nomura  投稿日:2017/08/25(Fri) 19:41:23

樋口先生、
ご教授いただいた方法でうまく行きました!

- 分析対象としてexcelファイルを読み込み
- 語の取捨選択(辞書読み込み
- 抽出語リスト生成とファイルのセーブ
- 共起ネットワークの作成とセーブ

という一連の動作を自動化することができました。
引き続きコーディング関係の集計を自動化に取り込むべく作業中です。
お忙しい中大変ありがとうございました。


  [No.3117] プラグイン(auto_run.pm)でコーディング・単純集計を自動実行する方法 投稿者:Masahiko Nomura  投稿日:2017/08/30(Wed) 13:36:13

樋口先生、
auto_run.pmに「コーディング・単純集計」機能を追加しようとしてまた躓いてしまいました。
下のコードを追加して実行すると、単純集計画面のオープンはできるのですが、コーディングファイルを指定した(つもり)の個所 $win_cod->cfile=$file_cod;でエラーが出てしまいます。
Perlの勉強をしないといけないと痛感していますが、並行してこの作業を進める必要があるためお願いに上がりました。
お手数をおかけして大変申し訳ありませんが単純集計の実行方法をご教授いただけませんでしょうか?
よろしくお願いいたします。
KH Coderのversionは、2.00fです。

【auto_run.pmの前処理実行直後に入れたコード】
#-----------------------------------------------
#コーディング - 単純集計
#-----------------------------------------------
# コーディングルールファイル指定
my $file_cod = 'C:\khcoder\CodingRule.cod';

# コーディング・単純集計画面オープン
my $win_cod = gui_window::cod_count->open;

# 変数指定
$win_cod->cfile=$file_cod;
$win_cod->tani="h5";

# 集計実行
$win_cod->_calc;
#-----------------------------------------------

【エラー in command prompt】
Can't modify non-lvalue subroutine call at C:\khcoder/plugin_en/auto_run.pm line 162, <SOURCE> line 428.

----
以上です
----


  [No.3118] Re: プラグイン(auto_run.pm)でコーディング・単純集計を自動実行する方法 投稿者:HIGUCHI Koichi  投稿日:2017/09/01(Fri) 01:31:00

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

$win_cod->cfileは変数ではなくて、コーディングルールファイルのパスを返
すサブルーチン(メソッド)なので、変数のようにパスを代入することはでき
ません。

$win_cod->taniについても同様です。

このcfileやtaniというサブルーチンがどんなものかを見に行けばヒントが得
られそうですが、いかがでしょう?


  [No.3119] Re: プラグイン(auto_run.pm)でコーディング・単純集計を自動実行する方法 投稿者:Masahiko Nomura  投稿日:2017/09/01(Fri) 23:37:42

樋口先生、
お返事ありがとうございます。
もう少し基本的な勉強をしないといけないと痛感いたしました。ちょっと変えてみて動いたらよし、というやり方は結局時間がかかる上に応用が全く効かないです。
本当に申し訳ありませんでした。
出直してきます。


  [No.3121] Re: プラグイン(auto_run.pm)でコーディング・単純集計を自動実行する方法 投稿者:HIGUCHI Koichi  投稿日:2017/09/02(Sat) 13:42:48

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

そうですね、こうした自動化を行なうとなると、Perlを避けて通ることは難し
いですね。変数、サブルーチン、ハッシュといった、初歩については、知って
おいていただいた方が良いでしょう。もしできれば、ハッシュ・リファレンス
やクラスについても。

『初めてのPerl』とその続編は良い本と思います。
http://amzn.to/2ewVM4v
http://amzn.to/2wvaLQC