有人可以帮我查看我的bash脚本吗?我正在尝试将.txt文件的目录提供给stanford解析器(http://nlp.stanford.edu/software/pos-tagger-faq.shtml),但我无法让它工作。我正在研究ubuntu 10.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
如果 您 在 新加坡 只 能 前往 一 间 俱乐部 , 祖卡 酒吧 必然 是 您 的 不二 选择 。
作为或许是新加坡唯一一家国际知名的夜店,祖卡既是一个公共机构,也是狮城年轻人选择进行成人礼等庆祝的不二场所。
答案 0 :(得分:3)
除了:
(冒号),它应该是;
或新行,'dir -d *'
不会按照您的想法执行 - 循环只会有一次迭代,其中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 *`
......它仍有资格获得Useless Use of ls * Award;)
更新:最初我忘了引用$file
,正如另一个回答中指出的
答案 1 :(得分:2)
你可以尝试:
for file in *
do
$HOME/segment.sh ctb "$file" UTF-8
done
所以有几件事要纠正:
:
,使用;
或换行符"$file"
对象周围加上引号以允许文件名中的空格'dir -d *'
的命令,则应使用$(dir -d *)
或角度等号来代替``答案 2 :(得分:1)
for file in 'dir -d *': do
你用冒号而不是分号。
如果您想进行简单的调试,可以添加-x
作为shebang的选项:
#!/bin/bash -x
错误将更容易被发现。