Ошибка в автоматизации бинаризатора Стэнфордского парсера (Python) - PullRequest
0 голосов
/ 01 июля 2018

Я использую Stanford Parser для генерации деревьев из заданных данных в необходимом аннотированном формате. Я могу сделать это для одного файла, запустив:

./lexparser.sh input_file > output_file

из папки stanford-parser-full-2018-02-27. Но у меня есть несколько файлов, поэтому я попытался автоматизировать его с помощью Python следующим образом:

import os
import glob
import subprocess

for movie in glob.glob("../full_movies/annotated/*.txt"):
    tree = subprocess.call(['./lexparser.sh', os.path.basename(movie)])
    with open("../full_movies/trees/" + os.path.basename(movie), "w") as fid:
        fid.write(tree)

Но это показывает следующую ошибку:

SLF4J: Не удалось загрузить класс "org.slf4j.impl.StaticLoggerBinder". SLF4J: по умолчанию реализация логгера без операций (NOP) SLF4J: Подробнее см. http://www.slf4j.org/codes.html#StaticLoggerBinder. Исключение в потоке "main". в edu.stanford.nlp.io.IOUtils.slurpFileNoExceptions (IOUtils.java:1316) at edu.stanford.nlp.sentiment.BuildBinarizedDataset.main (BuildBinarizedDataset.java:171) Причина: java.io.IOException: Невозможно открыть "movie_name.txt" как путь к классу, имя файла или URL в edu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem (IOUtils.java:480) на edu.stanford.nlp.io.IOUtils.readerFromString (IOUtils.java:637) в edu.stanford.nlp.io.IOUtils.slurpFile (IOUtils.java:1159) в edu.stanford.nlp.io.IOUtils.slurpFile (IOUtils.java:1184) в edu.stanford.nlp.io.IOUtils.slurpFileNoExceptions (IOUtils.java:1314) ... еще 1

Я не могу этого понять. Это ошибка в моем скрипте Python или что-то еще здесь не так? Если вы хотите увидеть содержимое ./lexparser.sh, дайте мне знать. Заранее спасибо.

1 Ответ

0 голосов
/ 01 июля 2018

Я думаю, что ваша проблема проста: вы просто присваиваете имена файлов синтаксическому анализатору lex, потому что вызываете для него basename. Но поскольку lexparser находится не в том же каталоге, что и файлы, вам необходимо указать полный путь к файлам. Просто используйте фильм и удалите вызов os.path.basename.

...