1

誰かが私のbashスクリプトをチェックするのを手伝ってもらえますか?.txtファイルのディレクトリをスタンフォードパーサー(http://nlp.stanford.edu/software/pos-tagger-faq.shtml)にフィードしようとしていますが、動作させることができません。私はubuntu10.10に取り組んでいます

ループは機能しており、次のコマンドで適切なファイルを読み取っています。

#!/bin/bash -x
cd $HOME/path/to
for file in 'dir -d *'
do
#       $HOME/chinesesegmenter-2006-05-11/segment.sh ctb $file UTF-8
        echo $file
done

しかし、

#!/bin/bash -x
cd $HOME/yoursing/sentseg_zh
for file in 'dir -d *'
do
#       echo $file
        $HOME/chinesesegmenter-2006-05-11/segment.sh ctb $file UTF-8
done

このエラーが発生します:

alvas@ikoma:~/chinesesegmenter-2006-05-11$ bash segchi.sh
Standard: CTB
File: dir
Encoding: -d
-------------------------------
Exception in thread "main" java.lang.NoClassDefFoundError: edu/stanford/nlp/ie/crf/CRFClassifier
Caused by: java.lang.ClassNotFoundException: edu.stanford.nlp.ie.crf.CRFClassifier
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: edu.stanford.nlp.ie.crf.CRFClassifier. Program will exit.

次のコマンドが機能します。

~/chinesesegmenter-2006-05-11/segment.sh ctb ~/path/to/input.txt UTF-8

これを出力します

alvas@ikoma:~/chinesesegmenter-2006-05-11$ ./segment.sh ctb ~/path/to/input.txt UTF-8
Standard: CTB
File: /home/alvas/path/to/input.txt
Encoding: UTF-8
-------------------------------
Loading classifier from data/ctb.gz...done [1.5 sec].
Using ChineseSegmenterFeatureFactory
Reading data using CTBSegDocumentReader
Sequence tagging 7 documents
如果 您 在 新加坡 只 能 前往 一 间 俱乐部 , 祖卡 酒吧 必然 是 您 的 不二 选择 。

成人式または成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人式成人用

4

3 に答える 3

3

:(コロン)と同様に、;または新しい行である必要が'dir -d *'ありますが、はあなたが思っていることをしません-ループは1回の反復で、その後はすべてのファイルでfile始まる長い文字列になります。dir -dまた、最初はに基づいたパスに変更しますが、ループ内で$file変数を再利用しfileます。これは疑わしいものです。私はあなたの意図についていくらか推測する必要がありますが、それははるかに簡単な場合があります。例:

#!/bin/bash
cd ~/path/to/whereever
for file in *
do
     ~/chinesesegmenter-2006-05-11/segment.sh ctb "$file" UTF-8
done

バックティック付きの(より正確な)バージョンを使用した場合でも:

for file in `dir -d *`

...それでもls*アワードの無用な使用の資格があります;)

$file更新:別の回答で指摘されているように、もともと私は引用するのを忘れていました

于 2011-03-11T08:39:39.233 に答える
2

あなたは試すことができます:

for file in *
do
    $HOME/segment.sh ctb "$file" UTF-8
done

したがって、修正することがいくつかありました。

  • :forステートメント、use ;、または改行の後に使用しないでください
  • オブジェクトの前後に引用符を付けて"$file"、ファイル名に空白を入れます
  • 配置したコマンドを使用する場合は、代わりに引用符を'dir -d *'使用するか、角度を付ける必要があります」$(dir -d *)
于 2011-03-11T08:29:27.717 に答える
1
for file in 'dir -d *': do

セミコロンの代わりにコロンを配置しました。

簡単なデバッグが必要な場合は-x、オプションとしてシバンに追加できます。

#!/bin/bash -x

エラーを見つけやすくなります。

于 2011-03-11T08:34:29.970 に答える