0

尝试向 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 文件(如下)是使用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。然后,我尝试再次通过Google为等效术语集提供的代码,将 at 提供给 Cloud Translation API,从而创建一个在线词汇表。

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 也不是特别有经验,很容易遗漏一些东西。)

4

2 回答 2

2

出于某种原因,它要求 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

不知道为什么,但它现在有效。

于 2020-01-07T18:07:07.317 回答
0

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

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

CSV 格式的示例数据

account,cuenta
directions,indicaciones

还有一个您当前正在使用的,他们将其命名为“等效术语集”。此格式仅适用于 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 列。

另外,在你的情况下。您显然需要单向类型的词汇表而不是Equivalent Term Sets

在您上面的代码中,language_codes_set您应该使用language_pair. 您可以在此处查看示例 REST 请求(尽管 Python 示例代码缺少它)。

于 2021-04-11T10:20:23.887 回答