0

Java プログラムから CRF++ ツールキットを呼び出したい。次のように入力します。

Process process = runtime.exec("/home/toshiba/Bureau/CRF++-0.54/.libs/lt-crf_learn  /home/toshiba/Bureau/CRF++-0.54/example/atb/template /home/toshiba/Bureau/CRF++-0.54/example/atb/tr_java.data");
process.waitFor();

しかし、次のエラーがあります。

CRF++: Yet Another CRF Tool Kit
Copyright (C) 2005-2009 Taku Kudo, All rights reserved.

Usage: /home/toshiba/Bureau/CRF++-0.54/.libs/lt-crf_learn [options] files
-f, --freq=INT              use features that occuer no less than INT(default 1)
-m, --maxiter=INT           set INT for max iterations in LBFGS routine(default 10k)
-c, --cost=FLOAT            set FLOAT for cost parameter(default 1.0)
-e, --eta=FLOAT             set FLOAT for termination criterion(default 0.0001)
-C, --convert               convert text model to binary model
-t, --textmodel             build also text model file for debugging
-a, --algorithm=(CRF|MIRA)  select training algorithm
-p, --thread=INT            number of threads(default 1)
-H, --shrinking-size=INT    set INT for number of iterations variable needs to  be     optimal before considered for shrinking. (default 20)
-v, --version               show the version and exit
-h, --help                  show this help and exit

誰かが私を助けることができるかどうか疑問に思っていますか?

4

2 に答える 2

0

コマンドラインから実行できるので、CRF++ のバグではないと思います。したがって、実際の問題は、Runtime.exec() を使用してプロセスを開始するときに引数を適切に渡す方法です。次のことを試すことをお勧めします。

String[] cmd = {"/home/toshiba/Bureau/CRF++-0.54/.libs/lt-crf_learn",
    "/home/toshiba/Bureau/CRF++-0.54/example/atb/template",
    "/home/toshiba/Bureau/CRF++-0.54/example/atb/tr_java.data"};
Process p = Runtime.getRuntime().exec(cmd);

これは、Runtime.exec() がかなり奇妙な方法でコマンド ラインを引数に分割することがあるため、役立つ場合があります。

別の潜在的な問題がここで言及されています: Java Runtime.exec()

于 2012-10-17T15:20:54.283 に答える
0

これには簡単な解決策があります。コマンドを一時ファイルに書き込み、そのファイルを として実行するだけですRuntime.getRuntime.exec("sh <temp-filename>")。後でこのファイルを削除できます。この解決策がうまくいく場合は、この背後にある理由を説明します。

于 2012-12-03T17:57:09.810 に答える