我有一个数据框,其中一列的每一行都有一个字符串列表。
每个列表平均有150个单词,每个单词约6个字符。
数据帧的700行中的每一行都是关于一个文档的,每个字符串都是该文档的一个单词;所以基本上我已经将文档中的单词标记化了。
我想检测每个文档的语言,为此,我首先尝试检测文档中每个单词的语言。
因此,我执行以下操作:
from textblob import TextBlob
def lang_detect(document):
lang_count = {}
for word in document:
if len(word) >= 4:
word_textblob = TextBlob(word)
lang_result = word_textblob.detect_language()
response = lang_count.get(lang_result)
if response is None:
lang_count[f"{lang_result}"] = 1
else:
lang_count[f"{lang_result}"] += 1
return lang_count
df_per_doc['languages_count'] = df_per_doc['complete_text'].apply(lambda x: lang_detect(x))
执行此操作时,出现以下错误:
---------------------------------------------------------------------------
HTTPError Traceback (most recent call last)
<ipython-input-42-772df3809bcb> in <module>
25
---> 27 df_per_doc['languages_count'] = df_per_doc['complete_text'].apply(lambda x: lang_detect(x))
28
29
.
.
.
647 class HTTPDefaultErrorHandler(BaseHandler):
648 def http_error_default(self, req, fp, code, msg, hdrs):
--> 649 raise HTTPError(req.full_url, code, msg, hdrs, fp)
650
651 class HTTPRedirectHandler(BaseHandler):
HTTPError: HTTP Error 429: Too Many Requests
错误的时间更长,我在中间省略了其余的错误。
现在,即使我仅尝试对两个文档/行执行此操作,也会遇到相同的错误。
是否可以通过textblob
获得更多文字和文档的答复?
答案 0 :(得分:3)
当我尝试翻译推文时,我遇到了同样的问题。 由于我超出了速率限制,因此它开始返回HTTP 429太多请求错误。
因此,对于其他想要使用TextBlob的人来说,检查速率限制会更好。 Google提供有关限制的信息: https://cloud.google.com/translate/quotas?hl=en
如果超出速率限制,则必须等到太平洋时间午夜重新设置配额。重新生效可能需要24小时。
另一方面,您也可以在请求之间引入延迟,以免打扰API服务器。
例如:当您要翻译列表中的TextBlob句子时。
import time
...
for sentence in list_of_sentences:
sentence.translate()
time.sleep(1) #to sleep 1 sec
答案 1 :(得分:2)
您可以尝试Googletrans。
” Googletrans是一个免费且不受限制的Python库,已实现 Google翻译API。这使用Google Translate Ajax API进行 调用诸如检测和翻译之类的方法。”
与TextBlob相似,Googletrans具有语言检测和翻译等功能。当我标记语言并翻译大量邮件时,对我来说效果很好。
(使用TextBlob时,我尝试过time.sleep(1)
,但最终达到了API限制...)