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 ответов

Для всех, у кого есть одна и та же проблема, в порядке важности и того, что следует попробовать в первую очередь. если не работает, переходите к следующему шагу.

  1. использовать аргумент be_quiet=True при вызове клиента в python ex.

    из stanza.server импортируйте CoreNLPClient с CoreNLPClient( annotators=['tokenize','ssplit','pos',"ner"], timeout=30000, memory='2G',be_quiet=True) в качестве клиента:

  2. УБЕДИТЕСЬ, ЧТО ВЫ УСТАНОВИЛИ JAVA В 64-БИТНОЙ ВЕРСИИ. Можно проверить из cmd с помощью java -d64, если он выдает ошибку, значит, у вас нет 64-битной java.

  3. Добавьте новую / отредактируйте переменную среды для вашей СИСТЕМЫ (не пользователя) Имя переменной: 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.

Другие вопросы по тегам