【问题标题】:Google Translate outputs HTML Entities in Python 3谷歌翻译在 Python 3 中输出 HTML 实体
【发布时间】:2018-10-19 00:19:03
【问题描述】:

当我尝试将法语字符写入文件时,某些字符看起来像

j'ai

我对西班牙语字符没有任何问题。我可能做错了什么?

"""Translates text into the target language.

Make sure your project is whitelisted.

Target must be an ISO 639-1 language code.
See https://g.co/cloud/translate/v2/translate-reference#supported_languages
"""
from google.cloud import translate

# Instantiates a client
translate_client = translate.Client()


# The target language
target = 'fr'

# Create a list of strings to translate. 
test_list = []
new_list = []
for i in range(1) :
    test_list.insert(i, 'I said, you know what, something, I\'m going to drop everything else off that I was doing and go through a period of a dry spell just to properly give it a chance when I started using it. ')

# Send 128 items per translation request and concatenate resulting translations into one list. (The max items per request for Google translate is 128.)
concat_result = []
for j in range(0, len(test_list), 128):
    new_result = translate_client.translate(
        test_list[j:j + 128], target_language=target)
    concat_result += new_result

count = 0
for list in concat_result :
    print(count, concat_result[count]['translatedText'])
    count += 1

打印结果:

0 J'ai dit, vous savez quoi, quelque chose, je vais laisser tomber tout ce que je faisais et traverser une période de sécheresse simplement pour lui donner une chance de bien commencer à l'utiliser.

请忽略我正在翻译字符串列表而不是字符串。我正在测试发送批处理请求。

【问题讨论】:

  • 我们需要更多的上下文。什么是srt,它的compose() 方法是什么? subs 是什么?请提供minimal reproducible example,以便我们了解您的问题。
  • ' 看起来像 ' 的 HTML 实体。
  • 请确认您使用的是在github.com/cdown/srt 找到的 srt 库(您可能使用“pip install srt”安装它)
  • 大家好。我是新来的,我为我不清楚的问题道歉。我想我通过稍微改变问题并提供一个完整的示例来更清楚地说明问题。

标签: python encoding google-translate


【解决方案1】:

编辑


好的,正如预期的那样,问题出在字符串而不是字幕生成上。

Google 翻译 API 指定其默认输出为 HTML。这就是您获得 HTML 实体而不是原始字符的原因。

您需要在 translate 方法的调用中指定您希望格式为文本而不是 HTML。

类似:

translate_client.translate(
        test_list[j:j + 128], 
        target_language=target,
        format="text")

您可以在以下位置找到有关参数的更多信息: https://cloud.google.com/translate/docs/reference/translate?hl=ja

以及更多有关 Python API 本身的详细信息,请在此处阅读其源代码: https://github.com/googleapis/google-cloud-python/blob/master/translate/google/cloud/translate_v2/client.py#L164

编辑结束


在我回答之前,我会给你一些建议,因为你似乎是新来的: 如果您需要代码方面的帮助,您应该提供一个完全工作示例。 当某人不提供所需的所有上下文和信息时,真的很难帮助他们。

那么,让我们转向答案...

我将在这里开始一个疯狂的猜测:

您正在使用位于以下位置的 srt 库创建字幕文件: https://github.com/cdown/srt

--

我刚刚用下面的代码测试了一下:

subtitle_generator = srt.parse('''\
   1
   00:31:37,894 --> 00:31:39,928
   Je m'appelle Francisco

   ''')

subtitles = list(subtitle_generator)

with open("a_fr.srt" , "w", encoding='utf-8') as f:
    f.write(srt.compose(subtitles))

它显示撇号就好了。

您应该检查 subs 的内容和在 parse 函数中使用的原始文本。问题很可能是原始文本而不是 python 打印,因为在编写过程中没有任何东西可以自动将字符转换为 HTML 实体。

【讨论】:

  • 您好 DallaRosa,感谢您花时间写下答案。我用 encoding='utf-8' 试过它,但它似乎不适用于我的。我稍微改变了我的问题,我认为我让它更容易理解。请再检查一遍好吗?
  • @EricJ 如果您对它感到满意,别忘了接受答案 :)
  • 感谢您的回答。从 GitHub 上一个版本的客户端开始,参数改为 format_ translate_client.translate( test_list[j:j + 128], target_language=target, format_="text") 代码链接:github.com/googleapis/python-translate/blob/master/google/cloud/…
猜你喜欢
  • 2017-07-15
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多