Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java stanford parse bash脚本错误-linux bash_Java_Bash_Nlp_Stanford Nlp - Fatal编程技术网

Java stanford parse bash脚本错误-linux bash

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

有人能帮我检查一下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/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}
。但这不是偏好的问题;这完全是错误的(不能正确处理带有空格的文件名等)。