15

我刚刚开始使用 Python 中的 goslate 库来检测文本中单词的语言,但是在测试了 7-8 个输入之后,我给出了用两种语言(阿拉伯语和英语)编写的单词的输入。之后,它开始给我错误。

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    execfile("C:/test_goslate.py");
  File "C:/test_goslate.py", line 12, in <module>
    language_id = gs.detect('الدولة')
  File "C:\Python27\lib\site-packages\goslate.py", line 484, in detect
    return self._detect_language(text)
  File "C:\Python27\lib\site-packages\goslate.py", line 448, in _detect_language
    return self._basic_translate(text[:50].encode('utf-8'), 'en', 'auto')[1]
  File "C:\Python27\lib\site-packages\goslate.py", line 251, in _basic_translate
    response_content = self._open_url(url)
  File "C:\Python27\lib\site-packages\goslate.py", line 181, in _open_url
    response = self._opener.open(request, timeout=self._TIMEOUT)
  File "C:\Python27\lib\urllib2.py", line 410, in open
    response = meth(req, response)
  File "C:\Python27\lib\urllib2.py", line 523, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python27\lib\urllib2.py", line 448, in error
    return self._call_chain(*args)
  File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 531, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 503: Service Unavailable

我将代码编写为:

# -*- coding: utf8 -*-
import urllib2
import goslate


gs = goslate.Goslate()

language_id = gs.detect('wait الدولة')

print (gs.get_languages()[language_id])

现在它对于我之前测试过的任何输入都不起作用,并且给了我同样的错误。我试图在谷歌上找到错误解决方案,但没有任何帮助。这就是我发现的: 链接 1 - StackOverflow

我尝试使用上面链接中建议的命令更新它:

pip install -U goslate

但它没有帮助,因为它已经是我正在使用的最新更新版本。我还在图书馆文档中读到,当以下情况出现这种翻译错误时:

If you get HTTP 5xx error, it is probably because google has banned your client IP address from transation querying.

You could verify it by access google translation service in browser manually.

You could try the following to overcome this issue:

query through a HTTP/SOCK5 proxy, see Proxy Support
using another google domain for translation: gs = Goslate(service_urls=['http://translate.google.de'])
wait for 3 seconds before issue another querying

我尝试使用代理连接,但没有任何帮助。

编辑 原因可能是谷歌每天只允许一些请求吗?在那种情况下,有什么更好的办法呢?有没有其他基于 Python 的库可以帮助我解决这个问题?

4

4 回答 4

11

也许正在寻找这个:https : //pypi.python.org/pypi/textblob 它比 goslate 更好,

由于 textblob 目前已被阻止,也许 py-translate 可以解决问题,

https://pypi.python.org/pypi/py-translate/#downloads

http://pythonhosted.org/py-translate/devs/api.html

from translate import translator
translator('en', 'es', 'Hello World!')

“py-translate 是一个用 Python 编写的用于谷歌翻译的 CLI 工具!”

翻译函数的第一个参数是源语言,第二个是目标语言,第三个是要翻译的短语,

它返回一个字典,文档将其称为请求接口

于 2015-10-31T06:52:11.790 回答
10

在 2016 年 1 月 5 日的文档更新中,作者说他们不会更新 Goslate 以超越 Google API 访问控制:

谷歌最近更新了其翻译服务,增加了票证机制,以防止像 goslate 这样的简单爬虫程序访问。尽管更复杂的爬虫在技术上仍然可以工作,但是它会跨越使用服务和破坏服务之间的界限。不会更新 goslate 以破坏 google 的票证机制。免费午餐结束。感谢您使用。

Google 批准的在您的程序中使用 Google 翻译的官方方法是使用付费的Google Cloud Translation API。有了其他任何东西,您都将与 Google 的速率限制和机器人检测作斗争。

于 2016-02-24T19:06:28.463 回答
6

详细说明@programmer44 的答案,这里是在这种特殊情况下使用TextBlob的示例:

from textblob.blob import TextBlob
blob = TextBlob('wait الدولة')
print(blob.detect_language())
于 2016-05-05T15:38:23.663 回答
2

因为 TextBlob 似乎也不再适合我了。我使用了 langdetect,它工作得很好。

如他们的文档所示:

from langdetect import detect

print detect("War doesn't show who's right, just who's left.")
print detect("Ein, zwei, drei, vier")

将返回

en
de
于 2016-11-10T13:38:05.060 回答