языковая проверка OSError: [WinError 87] Неверный параметр - PullRequest
0 голосов
/ 24 сентября 2018

Я столкнулся с проблемой при попытке использовать пакет language-tool для Python.Эта же ошибка также возникает при использовании пакета language-check.Мне кажется очевидным, что проблема связана с самим пакетом language-tool, так как и сама Java, и мой сервер LanguageTool работают.

Я на Windows 10 использую Java 10. Я также пробовалс Java 8, который, как известно, полностью работает с LanguageTool.Другая ошибка возникла аналогичным образом с Java 8.

LanguageTool сам работает из командной строки и графический интерфейс также работает.Я также успешно проверил сервер LanguageTool из моего браузера на http://localhost:8081/v2/check?language=en-US&text=my+text.

Помимо переустановки пакета language-tool, я попытался запустить свой собственный Java-сервер LanguageTool для Python тремя способами.Все три возвращают одну и ту же ошибку в Python.Первый способ заключается в запуске следующего кода из Блокнота Jupyter:

import language_tool as lt
text = "This is very interesting text"
lt.correct(text, (lt.LanguageTool("en-US")).check(text))

Это возвращает очень подробную ошибку:

---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-16-9112af7b3bc6> in <module>()
      1 text = "This is very interesting text"
----> 2 lt.correct(text, (lt.LanguageTool("en-US")).check(text))

c:\program files\python37\lib\site-packages\language_tool\__init__.py in __init__(self, language, motherTongue)
    186     def __init__(self, language=None, motherTongue=None):
    187         if not self._server_is_alive():
--> 188             self._start_server_on_free_port()
    189         if language is None:
    190             try:

c:\program files\python37\lib\site-packages\language_tool\__init__.py in _start_server_on_free_port(cls)
    321             cls._url = "http://{}:{}".format(cls._HOST, cls._port)
    322             try:
--> 323                 cls._start_server()
    324                 break
    325             except ServerError:

c:\program files\python37\lib\site-packages\language_tool\__init__.py in _start_server(cls)
    345                 stderr=subprocess.PIPE,
    346                 universal_newlines=True,
--> 347                 startupinfo=startupinfo
    348             )
    349             # Python 2.7 compatibility

c:\program files\python37\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)
    754                                 c2pread, c2pwrite,
    755                                 errread, errwrite,
--> 756                                 restore_signals, start_new_session)
    757         except:
    758             # Cleanup if the child failed starting.

c:\program files\python37\lib\subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session)
   1153                                          env,
   1154                                          os.fspath(cwd) if cwd is not None else None,
-> 1155                                          startupinfo)
   1156             finally:
   1157                 # Child is launched. Close the parent's copy of those pipe

OSError: [WinError 87] The parameter is incorrect

Второй способ - запуск сервера с помощью команды-лине, запустив java -cp languagetool-server.jar org.languagetool.server.HTTPServer --port 8081, затем запустив тот же код, что и с терминала Python в том же окне.Это возвращает:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Python37\lib\site-packages\language_tool\__init__.py", line 188, in __init__
    self._start_server_on_free_port()
  File "C:\Program Files\Python37\lib\site-packages\language_tool\__init__.py", line 323, in _start_server_on_free_port
    cls._start_server()
  File "C:\Program Files\Python37\lib\site-packages\language_tool\__init__.py", line 347, in _start_server
    startupinfo=startupinfo
  File "C:\Program Files\Python37\lib\subprocess.py", line 756, in __init__
    restore_signals, start_new_session)
  File "C:\Program Files\Python37\lib\subprocess.py", line 1155, in _execute_child
    startupinfo)
OSError: [WinError 87] The parameter is incorrect

Третий способ, которым я пытался инициировать сервер, - это использование графического интерфейса LanguageTool и запуск кода из Блокнота, который возвращает тот же подробный вывод.

Наконец, я попробовал с Java 8. В записной книжке была возвращена следующая ошибка:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
c:\program files\python37\lib\site-packages\language_tool\__init__.py in get_languages()
    489     try:
--> 490         languages = cache["languages"]
    491     except KeyError:

KeyError: 'languages'

During handling of the above exception, another exception occurred:

HTTPError                                 Traceback (most recent call last)
c:\program files\python37\lib\site-packages\language_tool\__init__.py in _get_root(cls, url, data, num_tries)
    309             try:
--> 310                 with urlopen(url, data, cls._TIMEOUT) as f:
    311                     return ElementTree.parse(f).getroot()

c:\program files\python37\lib\urllib\request.py in urlopen(url, data, timeout, cafile, capath, cadefault, context)
    221         opener = _opener
--> 222     return opener.open(url, data, timeout)
    223 

c:\program files\python37\lib\urllib\request.py in open(self, fullurl, data, timeout)
    530             meth = getattr(processor, meth_name)
--> 531             response = meth(req, response)
    532 

c:\program files\python37\lib\urllib\request.py in http_response(self, request, response)
    640             response = self.parent.error(
--> 641                 'http', request, response, code, msg, hdrs)
    642 

c:\program files\python37\lib\urllib\request.py in error(self, proto, *args)
    568             args = (dict, 'default', 'http_error_default') + orig_args
--> 569             return self._call_chain(*args)
    570 

c:\program files\python37\lib\urllib\request.py in _call_chain(self, chain, kind, meth_name, *args)
    502             func = getattr(handler, meth_name)
--> 503             result = func(*args)
    504             if result is not None:

c:\program files\python37\lib\urllib\request.py in http_error_default(self, req, fp, code, msg, hdrs)
    648     def http_error_default(self, req, fp, code, msg, hdrs):
--> 649         raise HTTPError(req.full_url, code, msg, hdrs, fp)
    650 

HTTPError: HTTP Error 400: Bad Request

During handling of the above exception, another exception occurred:

Error                                     Traceback (most recent call last)
<ipython-input-1-116c54f6eff2> in <module>()
      1 import language_tool as lt
      2 text = "This is very interesting text"
----> 3 lt.correct(text, (lt.LanguageTool("en-US")).check(text))

c:\program files\python37\lib\site-packages\language_tool\__init__.py in __init__(self, language, motherTongue)
    192             except ValueError:
    193                 language = FAILSAFE_LANGUAGE
--> 194         self._language = LanguageTag(language)
    195         self.motherTongue = motherTongue
    196         self.disabled = set()

c:\program files\python37\lib\site-packages\language_tool\__init__.py in __new__(cls, tag)
    409     def __new__(cls, tag):
    410         # Can’t use super() here because of 3to2.
--> 411         return str.__new__(cls, cls._normalize(tag))
    412 
    413     def __eq__(self, other):

c:\program files\python37\lib\site-packages\language_tool\__init__.py in _normalize(cls, tag)
    429         if not tag:
    430             raise ValueError("empty language tag")
--> 431         languages = {l.lower().replace("-", "_"): l for l in get_languages()}
    432         try:
    433             return languages[tag.lower().replace("-", "_")]

c:\program files\python37\lib\site-packages\language_tool\__init__.py in get_languages()
    490         languages = cache["languages"]
    491     except KeyError:
--> 492         languages = LanguageTool._get_languages()
    493         cache["languages"] = languages
    494     return languages

c:\program files\python37\lib\site-packages\language_tool\__init__.py in _get_languages(cls)
    288         url = urllib.parse.urljoin(cls._url, "Languages")
    289         languages = set()
--> 290         for e in cls._get_root(url, num_tries=1):
    291             languages.add(e.get("abbr"))
    292             languages.add(e.get("abbrWithVariant"))

c:\program files\python37\lib\site-packages\language_tool\__init__.py in _get_root(cls, url, data, num_tries)
    314                     cls._start_server()
    315                 else:
--> 316                     raise Error("{}: {}".format(cls._url, e))
    317 
    318     @classmethod

Error: http://127.0.0.1:8081: HTTP Error 400: Bad Request

Я полностью ознакомился с документацией и попробовал некоторые другие команды, все из которых возвращают ту же ошибку.

Я потратил слишком много времени, чтобы понять это.Любая помощь в решении или устранении неполадок будет супер, очень признателен!

...