我已经有8年没有使用Java了,但是我不记得有人谈论过jar文件。
我正在尝试像链接NER example java code那样进行NER过程。我在链接处复制了示例Java类NERPipelineDemo。当我尝试编译NERPipelineDemo时,它出现了错误,并且看起来需要我从网站上下载NER软件包。我从download stanford corenlp(红色下载按钮)下载了该文件,然后打包了一个非常大的jar文件。我将jar文件复制到NERPipelineDemo.java所在的目录中,并在顶部添加了一个导入。这是在示例链接中找到的程序的顶部,并为我添加的导入行添加了注释。
package edu.stanford.nlp.examples;
import stanford-english-corenlp-2018-10-05-models.*; //I added this line to example found online
import edu.stanford.nlp.pipeline.*;
import java.util.Properties;
import java.util.stream.Collectors;
public class NERPipelineDemo {
public static void main(String[] args) {
// set up pipeline properties
Properties props = new Properties();
props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner");
// example customizations (these are commented out but you can uncomment them to see the results
// disable fine grained ner
// props.setProperty("ner.applyFineGrained", "false");
// customize fine grained ner
// props.setProperty("ner.fine.regexner.mapping", "example.rules");
// props.setProperty("ner.fine.regexner.ignorecase", "true");
// add additional rules, customize TokensRegexNER annotator
// props.setProperty("ner.additional.regexner.mapping", "example.rules");
// props.setProperty("ner.additional.regexner.ignorecase", "true");
// add 2 additional rules files ; set the first one to be case-insensitive
// props.setProperty("ner.additional.regexner.mapping", "ignorecase=true,example_one.rules;example_two.rules");
// set document date to be a specific date (other options are explained in the document date section)
// props.setProperty("ner.docdate.useFixedDate", "2019-01-01");
// only run rules based NER
// props.setProperty("ner.rulesOnly", "true");
// only run statistical NER
// props.setProperty("ner.statisticalOnly", "true");
// set up pipeline
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
// make an example document
CoreDocument doc = new CoreDocument("Joe Smith is from Seattle.");
// annotate the document
pipeline.annotate(doc);
// view results
System.out.println("---");
System.out.println("entities found");
for (CoreEntityMention em : doc.entityMentions())
System.out.println("\tdetected entity: \t"+em.text()+"\t"+em.entityType());
System.out.println("---");
System.out.println("tokens and ner tags");
String tokensAndNERTags = doc.tokens().stream().map(token -> "("+token.word()+","+token.ner()+")").collect(
Collectors.joining(" "));
System.out.println(tokensAndNERTags);
}
}
下载.jar文件后,我根本没有处理它,因为我在线搜索了,看来我只能在Java程序中引用它。
所以当我尝试编译程序时,我现在有4个错误,而不是6个错误:
NERPipelineDemo.java:3: error: '.' expected
import stanford-english-corenlp-2018-10-05-models.*;
^
NERPipelineDemo.java:3: error: ';' expected
import stanford-english-corenlp-2018-10-05-models.*;
^
NERPipelineDemo.java:3: error: class, interface, or enum expected
import stanford-english-corenlp-2018-10-05-models.*;
^
NERPipelineDemo.java:3: error: class, interface, or enum expected
import stanford-english-corenlp-2018-10-05-models.*;
^
4 errors
我在弄清楚缺少的“。”时遇到了麻烦。是。文件名是stanford-english-corenlp-2018-10-05-models.jar。
我完全按照所示从NER网站复制了示例代码。
有什么想法吗?
更新:我确实找到了另外一个question online for stanford corenlp,并且我尝试做他们所做的事情,并得到了错误
"Could not find or load main class NERPipelineDemo.java"
我也看到了steps to use official release,但他们不是在谈论我在下载链接/按钮上获得的jar文件。我认为他们在谈论的是github zip下载。
** Update2(项目构建/设置信息): 在C:\ Users \ Michele \ Documents中,我有:
stanford-english-corenlp-2018-10-05-models.jar (downloaded from link above, red button)
NERPipelineDemo.java (copied exactly from https://stanfordnlp.github.io/CoreNLP/ner.html and named as shown)
在“文档”目录命令提示符下,我尝试了javac NERPipelineDemo.java,但第一个错误列表是
C:\Users\Michele\Documents>javac NERPipelineDemo.java
NERPipelineDemo.java:4: error: package edu.stanford.nlp.pipeline does not exist
import edu.stanford.nlp.pipeline.*;
^
NERPipelineDemo.java:41: error: cannot find symbol
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
^
symbol: class StanfordCoreNLP
location: class NERPipelineDemo
NERPipelineDemo.java:41: error: cannot find symbol
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
^
symbol: class StanfordCoreNLP
location: class NERPipelineDemo
NERPipelineDemo.java:43: error: cannot find symbol
CoreDocument doc = new CoreDocument("Joe Smith is from Seattle.");
^
symbol: class CoreDocument
location: class NERPipelineDemo
NERPipelineDemo.java:43: error: cannot find symbol
CoreDocument doc = new CoreDocument("Joe Smith is from Seattle.");
^
symbol: class CoreDocument
location: class NERPipelineDemo
NERPipelineDemo.java:49: error: cannot find symbol
for (CoreEntityMention em : doc.entityMentions())
^
symbol: class CoreEntityMention
location: class NERPipelineDemo
6 errors
那是我尝试添加 //导入stanford-english-corenlp-2018-10-05-models。*; //添加到NERPipelineDemo.java
然后在该问题的主题中出现错误:
C:\Users\Michele\Documents>javac NERPipelineDemo.java
NERPipelineDemo.java:3: error: '.' expected
import stanford-english-corenlp-2018-10-05-models.*;
^
NERPipelineDemo.java:3: error: ';' expected
import stanford-english-corenlp-2018-10-05-models.*;
^
NERPipelineDemo.java:3: error: class, interface, or enum expected
import stanford-english-corenlp-2018-10-05-models.*;
^
NERPipelineDemo.java:3: error: class, interface, or enum expected
import stanford-english-corenlp-2018-10-05-models.*;
^
4 errors
然后我以为我没有正确使用jar,所以我尝试了Documents命令行中stackoverflow链接上的建议,
java -cp .;stanford-english-corenlp-2018-10-05-models.jar edu.stanford.nlp.pipeline
并获得
Error: Could not find or load main class edu.stanford.nlp.pipeline
由于我很生疏,所以我不确定使用jar文件和/或使用Java的过程如何,而且我在这里还不习惯使用很多新的api。 / p>
我只是试图将一个字符串输入斯坦福大学图书馆,以获取经过nlp处理的字符串作为可用输出(NERPipelineDemo,令牌和ner标签)。
*** Update3(响应后) 我将添加的导入内容删除到NERPipelineDemo.java并进行编译,并得到错误,并更正了Update2中的命令:
javac -cp .;stanford-english-corenlp-2018-10-05-models.jar NERPipelineDemo.java
NERPipelineDemo.java:4: error: package edu.stanford.nlp.pipeline does not exist
import edu.stanford.nlp.pipeline.*;
^
NERPipelineDemo.java:41: error: cannot find symbol
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
^
symbol: class StanfordCoreNLP
location: class NERPipelineDemo
NERPipelineDemo.java:41: error: cannot find symbol
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
^
symbol: class StanfordCoreNLP
location: class NERPipelineDemo
NERPipelineDemo.java:43: error: cannot find symbol
CoreDocument doc = new CoreDocument("Joe Smith is from Seattle.");
^
symbol: class CoreDocument
location: class NERPipelineDemo
NERPipelineDemo.java:43: error: cannot find symbol
CoreDocument doc = new CoreDocument("Joe Smith is from Seattle.");
^
symbol: class CoreDocument
location: class NERPipelineDemo
NERPipelineDemo.java:49: error: cannot find symbol
for (CoreEntityMention em : doc.entityMentions())
^
symbol: class CoreEntityMention
location: class NERPipelineDemo
6 errors
我不确定该怎么办。我不习惯使用api。我需要为该jar文件添加多个cp吗?一个cp不应该全部覆盖吗?