3

我正在使用使用 IKVM.NET 的 StandordCoreNLP。有没有办法指定解析器模型的路径

   var pipeLine = new StanfordCoreNLP(props);

抛出异常:

java.lang.RuntimeException: java.io.IOException: Unable to resolve
"edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger"
as either class path, filename or URL
4

4 回答 4

8

如果您没有在类路径中包含 models.jar,这是完整的属性集。

Properties props = new Properties();
String modPath = "<YOUR PATH TO MODELS>/models3.4/edu/stanford/nlp/models/";
props.put("pos.model", modPath + "pos-tagger/english-left3words/english-left3words-distsim.tagger");
props.put("ner.model", modPath + "ner/english.all.3class.distsim.crf.ser.gz");
props.put("parse.model", modPath + "lexparser/englishPCFG.ser.gz");
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
props.put("sutime.binders","0");
props.put("sutime.rules", modPath + "sutime/defs.sutime.txt, " + modPath + "sutime/english.sutime.txt");
props.put("dcoref.demonym", modPath + "dcoref/demonyms.txt");
props.put("dcoref.states", modPath + "dcoref/state-abbreviations.txt");
props.put("dcoref.animate", modPath + "dcoref/animate.unigrams.txt");
props.put("dcoref.inanimate", modPath + "dcoref/inanimate.unigrams.txt");
props.put("dcoref.big.gender.number", modPath + "dcoref/gender.data.gz");
props.put("dcoref.countries", modPath + "dcoref/countries");
props.put("dcoref.states.provinces", modPath + "dcoref/statesandprovinces");
props.put("dcoref.singleton.model", modPath + "dcoref/singleton.predictor.ser");
于 2015-02-24T23:46:18.460 回答
6

了解您如何定义属性会很有帮助。如果您使用默认属性,您可能只是缺少类路径中的 models.jar(就像3.2 版的这个)。下载它并确保它被加载。

如果以其他方式配置属性,则字符串中可能会出现语法错误,从而导致 IO 错误。这是我用于加载不同pos.model外观的自定义属性:

Properties props = new Properties();
// using wsj-bidirectional model
props.put("pos.model", "edu/stanford/nlp/models/pos-tagger/wsj-bidirectional/wsj-0-18-bidirectional-distsim.tagger");
// using standard pipeline
props.put("annotators", "tokenize, ssplit, pos, lemma, parse");
// create pipeline
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

重要的是要注意路径中没有前导斜杠/

如果这没有帮助,请查看Galal Aly 的教程,其中标记器是从模型文件中提取并单独加载的。

于 2013-08-29T14:56:42.927 回答
2

我不知道您是否可以使用 IKVM.NET 从 jar 文件中访问资源,但您当然可以解压缩 jar 文件以获取常规操作系统文件 ( jar -xf models.jar) 并将模型作为文件加载。要么你需要镜像 jar 文件的目录结构(使用上面示例的路径,并使用相对路径),要么你需要为 props 文件中的所有模型设置属性,以提供它们可以使用的文件路径成立。参见pos.model, ner.model,parse.model等。

于 2013-02-21T00:57:42.877 回答
1

我遇到过同样的问题。就我而言,我没有使用完整的 .jar 文件,而是提取了 .tagger 文件。我只是在制作这样的属性对象后手动添加了模型:

Properties props = new Properties();

**props.put("pos.model", "E:\\Documents\\Dependencies\\english-left3words-distsim.tagger");**
于 2014-04-15T22:57:27.137 回答