Java stanford parse bash脚本错误-linux bash
有人能帮我检查一下bash脚本吗?我正在尝试向斯坦福解析器提供一个.txt文件目录(http://nlp.stanford.edu/software/pos-tagger-faq.shtml)但我不能让它工作。我正在开发ubuntu 10.10 循环正在工作并通过以下方式读取正确的文件:Java stanford parse bash脚本错误-linux bash,java,bash,nlp,stanford-nlp,Java,Bash,Nlp,Stanford Nlp,有人能帮我检查一下bash脚本吗?我正在尝试向斯坦福解析器提供一个.txt文件目录(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/segme
#!/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
如果 您 在 新加坡 只 能 前往 一 间 俱乐部 , 祖卡 酒吧 必然 是 您 的 不二 选择 。
作为 或许 是 新加坡 唯一 一 家 国际 知名 的 夜店 , 祖卡 既 是 一 个 公共 机构 , 也 是 狮城 年轻人 选择 进行 成人 礼等 庆祝 的 不二场所 。 您可以尝试:
for file in *
do
$HOME/segment.sh ctb "$file" UTF-8
done
所以有两件事需要纠正:
- 不要使用
在for语句之后,使用:
代码>或换行符
- 在
对象周围加引号,以允许在文件名中使用空格“$file”
- 如果您想在放置
的位置使用命令,则应使用'dir-d*'
或角度等式标记``$(dir-d*)
for file in *
do
$HOME/segment.sh ctb "$file" UTF-8
done
所以有两件事需要纠正:
- 不要使用
在for语句之后,使用:
代码>或换行符
- 在
对象周围加引号,以允许在文件名中使用空格“$file”
- 如果您想在放置
的位置使用命令,则应使用'dir-d*'
或角度等式标记``$(dir-d*)
-x
作为选项添加到shebang中:
#!/bin/bash -x
错误将更容易发现
你用了冒号而不是分号
如果您想要轻松调试,可以将-x
作为选项添加到shebang中:
#!/bin/bash -x
错误将更容易发现。以及
:
(冒号),冒号应该是
或一个新行,'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 *`
。。。它仍然有资格获得;)
更新:最初我忘了引用
$file
,正如在另一个答案中指出的那样,还有:
(冒号),应该是
或一个新行,'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 *`
。。。它仍然有资格获得;)
更新:最初我忘了引用
$file
,正如在另一个答案中指出的那样,换句话说,:
在最初的帖子中是错误的-他也可以把它改成代码>是的,现在bash是正确的,但是'dir-d'与segment.sh命令的my options标志混淆了。啊哈,有角度的引号混淆了命令中的dir!!解决了的。带角度的引号可以正确读取目录dir-d*
是完全多余的。您只需要像@MarkLongair的答案一样,*
中的文件使用。仍然需要更正--进程替换的语法是$(dir-d)
而不是${dir-d}
。但这不是偏好的问题;这完全是错误的(不能正确处理带有空格的文件名等)。换句话说,原始帖子中的:
是错误的-他也可以将其更改为代码>是的,现在bash是正确的,但是'dir-d'与segment.sh命令的my options标志混淆了。啊哈,有角度的引号混淆了命令中的dir!!解决了的。带角度的引号可以正确读取目录dir-d*
是完全多余的。您只需要像@MarkLongair的答案一样,*
中的文件使用。仍然需要更正--进程替换的语法是$(dir-d)
而不是${dir-d}
。但这不是偏好的问题;这完全是错误的(不能正确处理带有空格的文件名等)。