gpt4 book ai didi

c# - Stanford.NLP for .NET 不加载模型

转载 作者:行者123 更新时间:2023-11-30 14:24:32 24 4
gpt4 key购买 nike

我正在尝试运行示例代码 provided here for Stanford.NLP for .NET .

我通过 Nuget 安装了包,下载了 CoreNLP zip 存档,并提取了 stanford-corenlp-3.7.0-models.jar。解压后,我在 stanford-corenlp-full-2016-10-31\edu\stanford\nlp\models 中找到了“models”目录。

这是我要运行的代码:

 public static void Test1()
{
// Path to the folder with models extracted from `stanford-corenlp-3.6.0-models.jar`
var jarRoot = @"..\..\..\stanford-corenlp-full-2016-10-31\edu\stanford\nlp\models\";

// Text for processing
var text = "Kosgi Santosh sent an email to Stanford University. He didn't get a reply.";

// Annotation pipeline configuration
var props = new Properties();
props.setProperty("annotators", "tokenize, ssplit, pos, lemma, parse, ner,dcoref");
props.setProperty("ner.useSUTime", "0");

// We should change current directory, so StanfordCoreNLP could find all the model files automatically
var curDir = Environment.CurrentDirectory;
Directory.SetCurrentDirectory(jarRoot);
var pipeline = new StanfordCoreNLP(props);
Directory.SetCurrentDirectory(curDir);

// Annotation
var annotation = new Annotation(text);
pipeline.annotate(annotation);

// Result - Pretty Print
using (var stream = new ByteArrayOutputStream())
{
pipeline.prettyPrint(annotation, new PrintWriter(stream));
Console.WriteLine(stream.toString());
stream.close();
}
}

运行代码时出现以下错误:

A first chance exception of type 'java.lang.RuntimeException' occurred in stanford-corenlp-3.6.0.dll An unhandled exception of type 'java.lang.RuntimeException' occurred in stanford-corenlp-3.6.0.dll Additional information: edu.stanford.nlp.io.RuntimeIOException: Error while loading a tagger model (probably missing model file)

我做错了什么?我真的想让这个工作。 :(

最佳答案

Mikael Kristensen 的回答是正确的。 stanfrod-corenlp-ful-*.zip 存档包含文件 stanford-corenlp-3.7.0-models.jar,其中包含模型(这是一个 zip 存档)。在 Java 世界中,您将此 jar 添加到类路径中,它会自动解析模型在存档中的位置。

CoreNLP 有一个文件 DefaultPaths.java指定模型文件的路径。因此,当您使用未指定模型位置的Properties对象实例化StanfordCoreNLP时,您应该保证可以通过默认路径找到模型(与Environment.CurrentDirectory<相关)/)。

保证文件存在于Environment.CurrentDirectory + "edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz" 路径中的最简单方法就是把一个jar包解压到文件夹里,把当前目录临时改成解压后的文件夹。

var jarRoot = "nlp.stanford.edu/stanford-corenlp-full-2016-10-31/jar-modules/";
...
var curDir = Environment.CurrentDirectory;
Directory.SetCurrentDirectory(jarRoot);
var pipeline = new StanfordCoreNLP(props);
Directory.SetCurrentDirectory(curDir);

另一种方法是指定管道所需的所有模型的路径(它实际上取决于 annotators 列表)。此选项更复杂,因为您必须找到正确的属性键,并指定所有使用模型的路径。但如果您想最小化部署包的大小,它可能会很有用。

var props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, depparse");
props.put("ner.model",
"edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz");
props.put("ner.applyNumericClassifiers", "false");
var pipeline = new StanfordCoreNLP(props);

关于c# - Stanford.NLP for .NET 不加载模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40814503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com