Я пытаюсь запустить пример кода , предоставленный здесь для Stanford.NLP для. NET .

Я установил пакет через Nuget, загрузил zip-архив CoreNLP и распаковал stanford-corenlp-3.7.0-models.jar. После распаковки я нашел каталог «models» в stanford-corenlp-full-2016-10-31 \ edu \ stanford \ nlp \ 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();
        }
    }

Я получаю следующую ошибку при запуске кода:

Первое случайное исключение типа java.lang.RuntimeException произошло в stanford-corenlp-3.6.0.dll Необработанное исключение типа java.lang.RuntimeException произошло в stanford-corenlp-3.6.0.dll Дополнительная информация: edu.stanford.nlp.io.RuntimeIOException: ошибка при загрузке модели теггера (возможно, отсутствует файл модели)

Что я делаю неправильно? Я действительно хочу, чтобы это работало. :(

3
Vin Shahrdar 26 Ноя 2016 в 05:58

3 ответа

Лучший ответ

Ответ Микаэля Кристенсена правильный. В архиве stanfrod-corenlp-ful-*.zip находятся файлы stanford-corenlp-3.7.0-models.jar с моделями внутри (это zip-архив). В мире Java вы добавляете этот jar в путь к классу, и он автоматически разрешает расположение моделей в архиве.

CoreNLP имеет файл Default nathrerjava"> по умолчанию. / a>, указывающий путь к файлу модели. Поэтому, когда вы создаете экземпляр StanfordCoreNLP с объектом Properties, который не указывает расположение моделей, вы должны гарантировать, что модели могут быть найдены по пути по умолчанию (связанному с 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);
3
Sergey Tihon 2 Май 2017 в 03:32

У меня такая же проблема. Чтобы исправить это, используйте вместо него stanford-corenlp-3.6.0-models.jar. ( Версия пакета Nuget должна быть точно такой же, как версия библиотеки CoreNLP. Фактически 3.6.0 ).

2
Damien974 9 Янв 2017 в 15:39

Я думаю, вы ошиблись в выборе модели. Он должен указывать на корневую папку jar.

Вместо этого попробуйте этот путь:

var jarRoot = @"..\..\..\stanford-corenlp-full-2016-10-31"
2
Mikael Kristensen 3 Фев 2017 в 20:36