UnsupportedOperation: fileno при попытке запустить сервер corenlp через раздел :(
Крайне запутался в том, как запустить клиент corenlp через строфу. Я не могу заставить его работать как на моем компьютере с Windows, так и на компьютере с Ubuntu. Мне кажется, что переменные окружения подходят мне, так как на "Запуск сервера с командой: java [...]" он получает правильный путь в обеих системах (как показано ниже).
Вот журнал из окон, я использую ноутбук jupyter с python 3.7 и anaconda. Да, java установлена, и ее сборка 1.8.0_261-b12
2020-08-23 16:19:39 INFO: Writing properties to tmp file: corenlp_server-cb875580c6b14b81.props
2020-08-23 16:19:39 INFO: Starting server with command: java -Xmx4G -cp C:\Users\mikol\stanza_corenlp\* edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 30000 -threads 5 -maxCharLength 100000 -quiet False -serverProperties corenlp_server-cb875580c6b14b81.props -annotators tokenize,ssplit,pos,lemma,ner,parse,depparse,coref -preload -outputFormat serialized
---------------------------------------------------------------------------
UnsupportedOperation Traceback (most recent call last)
<ipython-input-3-8480433fb1e5> in <module>
4 annotators=['tokenize','ssplit','pos','lemma','ner', 'parse', 'depparse','coref'],
5 timeout=30000,
----> 6 memory='4G') as client:
7 ann = client.annotate(test_doc)
8 print(ann)
C:\ProgramData\Anaconda3\lib\site-packages\stanza\server\client.py in __enter__(self)
174
175 def __enter__(self):
--> 176 self.start()
177 return self
178
C:\ProgramData\Anaconda3\lib\site-packages\stanza\server\client.py in start(self)
146 self.server = subprocess.Popen(self.start_cmd,
147 stderr=stderr,
--> 148 stdout=stderr)
149
150 def atexit_kill(self):
C:\ProgramData\Anaconda3\lib\subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text)
751 (p2cread, p2cwrite,
752 c2pread, c2pwrite,
--> 753 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
754
755 # We wrap OS handles *before* launching the child, otherwise a
C:\ProgramData\Anaconda3\lib\subprocess.py in _get_handles(self, stdin, stdout, stderr)
1084 else:
1085 # Assuming file-like object
-> 1086 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1087 c2pwrite = self._make_inheritable(c2pwrite)
1088
UnsupportedOperation: fileno
Код ошибки действительно выглядит одинаково на обеих машинах, только с разными путями к файлам.
Пожалуйста, если кто-нибудь может помочь, я был бы очень признателен, без инструментов corenlp я мало что могу сделать на своем проекте.
0 ответов
Для всех, у кого есть одна и та же проблема, в порядке важности и того, что следует попробовать в первую очередь. если не работает, переходите к следующему шагу.
использовать аргумент
be_quiet=True
при вызове клиента в python ex.из stanza.server импортируйте CoreNLPClient с CoreNLPClient( annotators=['tokenize','ssplit','pos',"ner"], timeout=30000, memory='2G',be_quiet=True) в качестве клиента:
УБЕДИТЕСЬ, ЧТО ВЫ УСТАНОВИЛИ JAVA В 64-БИТНОЙ ВЕРСИИ. Можно проверить из cmd с помощью java -d64, если он выдает ошибку, значит, у вас нет 64-битной java.
Добавьте новую / отредактируйте переменную среды для вашей СИСТЕМЫ (не пользователя) Имя переменной: CORENLP_HOME Значение переменной: *** каталог, в который вы установили corenlp И языковую модель *** (например, английский, он не поставляется с одной из коробки)
Перезагрузите компьютер после редактирования или добавления env. переменная
Если ничего из этого не помогло, значит, вы сильно испортили, поэтому просто удалите всю папку, в которой установлен corenlp, и выполните новую установку, путь может быть тем же, что и раньше.
Я рекомендую использовать команды строфы для установки
В python просто выполните следующие команды, может быть в Jupyter:
import stanza
stanza.install_corenlp(dir="C:\\Users\\YOUR_USERNAME\\stanza_corenlp")
stanza.download_corenlp_models(model='english', version='4.1.0', dir="C:\\Users\\YOUR_USERNAME\\stanza_corenlp")
После установки отредактируйте переменную env CORENLP_HOME, чтобы она соответствовала новому каталогу установки, например, в моем случае
CORENLP_HOME : C:\Users\YOUR_USERNAME\stanza_corenlp
Для отладки попробуйте запустить команду запуска сервера только из cmd. Если сама java не запускает ваш сервер, ваш сервер также не запускается при вызове из python. Вот пример команды, которую вы можете попробовать:
*** после -cp используйте "" и в них укажите путь установки с * в конце.
java -Xmx1512m -cp "C:\Users\YOUR_USERNAME\stanza_corenlp\*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 30000 -threads 2 -maxCharLength 100000 -quiet False -preload tokenize,ssplit,pos,lemma,ner
Если он запустится, то у вас все в порядке, вы можете проверить, правильно ли он работает, введя в свой браузер localhost:9000
Должна отобразиться страница с демонстрацией файла corenlp.