【问题标题】:Google Cloud Translate: num_valid_languages_in_csv = 1谷歌云翻译:num_valid_languages_in_csv = 1
【发布时间】:2020-01-07 17:37:00
【问题描述】:

尝试向 Google Cloud Translate 添加词汇表,但收到以下错误:

Traceback (most recent call last):
  File "Python_SetGlossary.py", line 36, in <module>
    result = operation.result(timeout=90)
  File "C:\Programming Installs\Python\lib\site-packages\google\api_core\future\polling.py", line 127, in result
    raise self._exception
google.api_core.exceptions.GoogleAPICallError: None Failed to parse content of input file. Error: Not enough valid languages in CSV file. Must have terms for at least two different languages. num_valid_languages_in_csv = 1

CSV 文件(如下)是使用示例 provided by Google 为等效术语集创建的。

en,fr,pos
Canadian Meteorological Service of Environment Canada,Service météorologique d'Environnement Canada,noun
Jacques Cartier Strait,détroit de Jacques-Cartier,noun
the St. Lawrence Global Observatory,l'Observatoire global du Saint-Laurent,noun
St. Lawrence Global Observatory,Observatoire global du Saint-Laurent,noun

这已上传到 Google Cloud Storage。然后,我尝试通过将 at 提供给 Cloud Translation API 来创建在线词汇表,再次通过 code provided by Google 获取等效术语集。

from google.cloud import translate_v3 as translate

# def sample_create_glossary(project_id, input_uri, glossary_id):

"""Create Glossary"""
client = translate.TranslationServiceClient()

# TODO(developer): Uncomment and set the following variables
project_id = 'testtranslate'
glossary_id = 'glossary-en-fr-bidirectional'
input_uri = 'gs://bidirectional-en-fr/bidirectional-glossary.csv'
location = 'us-central1'  # The location of the glossary

name = client.glossary_path(
    project_id,
    location,
    glossary_id)
language_codes_set = translate.types.Glossary.LanguageCodesSet(
    language_codes=['en', 'fr'])

gcs_source = translate.types.GcsSource(
   input_uri=input_uri)

input_config = translate.types.GlossaryInputConfig(
    gcs_source=gcs_source)

glossary = translate.types.Glossary(
    name=name,
    language_codes_set=language_codes_set,
    input_config=input_config)

parent = client.location_path(project_id, location)

operation = client.create_glossary(parent=parent, glossary=glossary)

result = operation.result(timeout=90)
print('Created: {}'.format(result.name))
print('Input Uri: {}'.format(result.input_config.gcs_source.input_uri))

谁能帮我弄清楚发生了什么/我做错了什么? (或者谷歌做错了什么。他们的一些文档肯定是可疑的。但我对 Python 也不是特别有经验,很容易遗漏一些东西。)

【问题讨论】:

    标签: python translate glossary


    【解决方案1】:

    由于某种原因,它要求 CSV 中的第一列为空白。

    ,en,fr,pos
    ,Canadian Meteorological Service of Environment Canada,Service météorologique d'Environnement Canada,noun
    ,Jacques Cartier Strait,détroit de Jacques-Cartier,noun
    ,the St. Lawrence Global Observatory,l'Observatoire global du Saint-Laurent,noun
    ,St. Lawrence Global Observatory,Observatoire global du Saint-Laurent,noun
    

    不知道为什么,但现在可以了。

    【讨论】:

    • 这很奇怪,但这对我来说很有效 - 添加第一列空白并将 pos 和描述列空白
    【解决方案2】:

    Google Cloud Translate Advanced 中有两种类型的词汇表。

    第一个是Unidirectional Glossaries 这只是 TSV、CSV 或 TMX 格式的简单的一对源语言和目标语言。列标题不是必需的。

    CSV 格式的示例数据

    account,cuenta
    directions,indicaciones
    

    还有一个您目前正在使用的,他们将其命名为"Equivalent term sets"。 此格式仅适用于 CSV 格式。如果要创建包含两种以上语言的词汇表,请使用此格式。此类词汇表中需要页眉。

    CSV 格式的示例数据:

    first language,Second language,pos,description
    account,cuenta,noun,A user's account. Do not use as verb.
    

    或者,当有 3 种语言时:

    first language,Second language,third language,pos,description
    word in first language,word in second language, word in third language,noun,some information
    

    如您所见,这种类型的词汇表中有两个额外的列:“pos”和“description”。因此,如果您使用这种类型的词汇表,那么至少(当只有一对语言时)应该有 4 列。

    另外,在你的情况下。您显然需要 单向 类型的词汇表,而不是 等效术语集

    在上面的代码中,您应该使用language_pair,而不是使用language_codes_set。你可以看到sample REST request here(虽然它缺少 Python 示例代码)。

    【讨论】:

      猜你喜欢
      • 2020-09-25
      • 2017-06-15
      • 2017-11-11
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      相关资源
      最近更新 更多