Как сопоставить результат Google translate со строкой ввода - PullRequest
2 голосов
/ 24 апреля 2019

Я хочу преобразовать N число в американский английский для некоторых других языков.У меня есть американская строка в формате "JSON", как показано ниже,

"AdminLocales": {
    "-locale": "en_US",
    "global": {
      "search": "Search",
      "noOrdersFound": "No Orders Found",
      "prevPage": "Prev Page",
      "nextPage": "Next Page"
    },
     "languageList": {
      "1": {
        "type": "Student",
        "area": "Kovilpatti"
      },
      "2": {
        "type": "Employee",
        "area": "Tuticorin"
      },
    }
}

Я хочу преобразовать почти 3000 строк.Поэтому я десериализирую JSON свой ввод и перебираю данные.Это значит, что я вызывал API перевода Google для каждой строки, поэтому мой вызов API будет 3000 раз.

Итак, я сталкиваюсь с проблемой истечения времени ожидания при вызове столько времени в этом API.Как показано ниже: код

<cfset myKey = 'abcd'>
<cfhttp url="https://translation.googleapis.com/language/translate/v2?key=#myKey#" method="post" charset="utf-8"  result="getTokens">
      <cfhttpparam type="header" name="Content-Type" value="application/json">
      <cfhttpparam type="body" name="data" value="{
 'q': 'Welcome',
 'target': 'hi'
}"> 
</cfhttp>

И я обнаружил, что, поскольку мы можем одновременно передавать N чисел ввода исходной строки, я передал его, как показано ниже

<cfhttpparam type="body" name="data" value="{
     'q': 'Welcome',
     'q': 'Good Morning',
     'q': 'Good Evening',
     'q':'Welcome to all',
     'q': 'Good night',
     'target': 'hi'
    }"> 

И я получил результаттак как выход имеет тот же порядок ввода, который я пропустил,

" { "data": { "translations": [ { "translatedText": "स्वागत हे", "detectedSourceLanguage": "en" }, { "translatedText": "शुभ प्रभात", "detectedSourceLanguage": "en" }, { "translatedText": "सुसंध्या", "detectedSourceLanguage": "en" }, { "translatedText": "सभी का स्वागत हैं", "detectedSourceLanguage": "en" }, { "translatedText": "शुभ रात्रि", "detectedSourceLanguage": "en" } ] } } "

Это нормально для обычного тестирования.

Теперь вернемся к моему вводу, Как я могу передать всевводить одновременно и сопоставлять с результатом вызова https.Потому что у меня нет порядка последовательности входов.У меня есть структура структуры, и это дочерняя структура и т. Д. Из моего ввода, если я передаю как «Поиск, Предыдущая страница, Следующая страница, Студен, Ковильпатти и т. Д.» (Исходная строка), возвращается тот же порядок.Вот как я могу сопоставить этот конкретный результат для конкретной исходной строки.

Ожидает ли Google, что вы введете ключ для определения правильного возврата?

1 Ответ

0 голосов
/ 16 мая 2019

Наконец-то я получил решение для своей логики. Здесь я объясню, как решить этот сценарий. Мы можем достичь этого, передав несколько разделителей. Здесь я использовал - (дефис) в качестве разделителей.

<cfset myStr = {'Name':'Kannan','State':'Tamilnadu','Country':'India','Position':'Projects Lead','Description':'Test translate API call'}>

Это выше моя первоначальная структура. Я преобразовал значения ключа этой структуры с помощью разделителей дефисов, как показано ниже,

<cfset convertString = ''>
<cfloop index='keys' list="#keyList#">
    <cfset convertString = listAppend(convertString,structFind(myStr,keys),'-')>
</cfloop>

Теперь моя строка выглядит как Tamilnadu-Kannan-Test translate API call-India-Projects Lead

Я могу передать указанную выше строку в одном вызове http, вызвав ниже API,

<cfhttp url="https://translation.googleapis.com/language/translate/v2?key=myApiKey132" method="post" charset="utf-8"  result="returnData">
     <cfhttpparam type="header" name="Content-Type" value="application/json">
     <cfhttpparam type="body" name="data" value="{
'q': '#convertString#',
'target': 'hi'
}"> 
 </cfhttp>

вызов API возвращает данные, как на картинке ниже, enter image description here

Таким образом, моя преобразованная строка должна иметь пропущенный разделитель, например तमिलनाडु-कन्नन-टेस्ट अनुवाद एपीआई कॉल-इंडिया-प्रोजेक्ट्स लीड

Теперь я могу перебрать результат на основе моего разделителя - (дефис) и сопоставить мой структурный ключ, как показано ниже.

<cfset convertStr = {}>
<cfset apiResult = deserializeJSON(returnData.filecontent)>

<cfset a = 1>
<cfloop index="result" list="#apiResult.data.translations[1].translatedText#" delimiters="-">
    <cfset structInsert(convertStr,listgetat(keyList,a),result)>
    <cfset a = a+1>
</cfloop>

Наконец я получил ожидаемый результат.

Исходная структура

enter image description here

После перевода:

<cfdump var="#convertStr#" label="Google Translate Structure" />

enter image description here

Спасибо за все внимание на них.

...