stanford 解析 bash 脚本错误 - linux bash

发布于 2024-10-21 13:32:36 字数 1975 浏览 6 评论 0原文

有人可以帮我检查我的 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
如果 您 在 新加坡 只 能 前往 一 间 俱乐部 , 祖卡 酒吧 必然 是 您 的 不二 选择 。

是新加坡 唯一一家国际 知名夜店 , 祖卡 既是一个公共机构,也是狮城当地人选择进行成人礼等庆祝的不二场所。

Can someone help me check my bash script? i'm trying to feed a directory of .txt files to the stanford parser (http://nlp.stanford.edu/software/pos-tagger-faq.shtml) but i can't get it to work. i'm working on ubuntu 10.10

the loop is working and reading the right files with:

#!/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

but with

#!/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

i'm getting this error:

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.

the following command works:

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

and output this

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
如果 您 在 新加坡 只 能 前往 一 间 俱乐部 , 祖卡 酒吧 必然 是 您 的 不二 选择 。

作为 或许 是 新加坡 唯一 一 家 国际 知名 的 夜店 , 祖卡 既 是 一 个 公共 机构 , 也 是 狮城 年轻人 选择 进行 成人 礼等 庆祝 的 不二场所 。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我们只是彼此的过ke 2024-10-28 13:32:36

:(冒号)一样,它应该是 ; 或新行,'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 *`

...它仍然符合 无用地使用 ls * Award ;)

更新:原来我忘了引用 $file,正如另一个答案中指出的

As well as the : (colon), which should be a ; or a new line, the 'dir -d *' doesn't do what you think it does - the loop will just have one iteration, where file is a long string beginning with dir -d and with all your files afterwards. Also, you initially change to a path based on $file but then reuse the variable file in your loop, which is suspect. I'm having to guess somewhat about your intent, but it can be much simpler, e.g.:

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

Even if you used the (more correct) version with backticks:

for file in `dir -d *`

... it would still qualify for a Useless Use of ls * Award ;)

Update: originally I forgot to quote $file, as pointed out in another answer

久而酒知 2024-10-28 13:32:36

您可以尝试:

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

因此,有几件事需要纠正:

  • 不要在 for 语句后使用 :,使用 ; 或换行符
  • "$file" 对象允许文件名中包含空格
  • 如果您想使用放置 'dir -d *' 的命令,您应该使用 $(dir -d *) 或角引号代替 ``

You could try:

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

So there were a couple of things to correct:

  • Don't use : after the for statement, use ; or a newline
  • Put quotation marks around the "$file" object to allow whitespaces in file name
  • If you want to use a command where you put 'dir -d *' you should use $(dir -d *) or angle quation marks instead ``
执妄 2024-10-28 13:32:36
for file in 'dir -d *': do

您输入了冒号而不是分号。

如果您想要轻松调试,可以将 -x 作为选项添加到 shebang 中:

#!/bin/bash -x

错误将更容易发现。

for file in 'dir -d *': do

You've put a colon instead of a semicolon.

If you want an easy debugging, you can add -x as an option to your shebang :

#!/bin/bash -x

The errors will be easier to spot.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文