language-tool
Python 用のパッケージを使用しようとしたときに問題が発生しました。この同じエラーは、language-check
パッケージを使用するときにも発生します。language-tool
Java自体とLanguageToolサーバーの両方が機能しているため、問題がパッケージ自体に関係していることは明らかです。
Java 10 を実行している Windows 10 を使用しています。LanguageTool で完全に動作することが知られている Java 8 も試しました。Java 8 では、同様の方法で別のエラーが発生しました。
LanguageTool 自体はコマンド ラインから動作し、GUI も動作します。ブラウザからも LanguageTool サーバーのテストに成功しましたhttp://localhost:8081/v2/check?language=en-US&text=my+text
。
パッケージの再インストールに加えてlanguage-tool
、Python 用の独自の LanguageTool Java サーバーを 3 つの方法で起動しようとしました。3 つすべてが Python で同じエラーを返します。最初の方法は、Jupyter Notebook 内から次のコードを実行することです。
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
2 番目の方法は、コマンドラインから を実行してサーバーを起動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
私がサーバーを起動しようとした 3 つ目の方法は、LanguageTool GUI を使用して Notebook からコードを実行することで、同じ詳細な出力が返されます。
最後に、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
ドキュメントを徹底的に調べ、他のコマンドをいくつか試しましたが、すべて同じエラーが返されました。
私はこれを理解するのにあまりにも長い時間を費やしました。解決またはトラブルシューティングのヘルプは、非常に高く評価されます。