2017-11-02 18 views
2

無料の2m文字の変換機能を備えた唯一のAPI以来、AndroidまたはJavaの実用サンプルでは数時間Webを検索しています。しかし、役に立たないのは、私が見つけたものの大半がすでに2017年3月に廃止され、空白の認知サービスに移行して以来、何の役にも立ちません。誰でもその方法を知っていますか?私はコンソールで翻訳を出力するC#で動作するコードを見つけましたが、C#ではなく、自分でJavaに変換することはできません。 TIA。Azureを使用してJavaまたはAndroidでMicrosoft Translator APIを使用する方法

以下はC#の作業コードです。非推奨に関する

using System; 
using System.Net.Http; 
using System.Threading.Tasks; 

namespace AzureSubscriptionKeySample 
{ 
    class Program 
    { 
     /// Header name used to pass the subscription key to translation service 
     private const string OcpApimSubscriptionKeyHeader = "Ocp-Apim-Subscription-Key"; 

    /// Url template to make translate call 
    private const string TranslateUrlTemplate = "http://api.microsofttranslator.com/v2/http.svc/translate?text={0}&from={1}&to={2}&category={3}"; 

    private const string AzureSubscriptionKey = "MyAzureSubscriptionKey"; //Enter here the Key from your Microsoft Translator Text subscription on http://portal.azure.com 

    static void Main(string[] args) 
    { 
     TranslateAsync().Wait(); 
     Console.ReadKey(); 
    } 

    /// Demonstrates Translate API call using Azure Subscription key authentication. 
    private static async Task TranslateAsync() 
    { 
     try 
     { 
      var translateResponse = await TranslateRequest(string.Format(TranslateUrlTemplate, "안녕하세요 친구", "ko", "en", "general"), AzureSubscriptionKey); 
      var translateResponseContent = await translateResponse.Content.ReadAsStringAsync(); 
      if (translateResponse.IsSuccessStatusCode) 
      { 
       Console.WriteLine("Translation result: {0}", translateResponseContent); 
      } 
      else 
      { 
       Console.Error.WriteLine("Failed to translate. Response: {0}", translateResponseContent); 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.Error.WriteLine("Failed to translate. Exception: {0}", ex.Message); 
     } 
    } 

    public static async Task<HttpResponseMessage> TranslateRequest(string url, string azureSubscriptionKey) 
    { 
     using (HttpClient client = new HttpClient()) 
     { 
      client.DefaultRequestHeaders.Add(OcpApimSubscriptionKeyHeader, azureSubscriptionKey); 
      return await client.GetAsync(url); 
     } 
    } 
} 
} 

詳細: https://datamarket.azure.com/dataset/bing/microsofttranslatorspeech

答えて

2

あなたはREST API経由Microsoft Translator Text APIを使用することができます。

詳細については、official docを参照してください。

ここでは、参考のためにJavaコードでGetTranslationsリクエストのスニペットコードを提供しています。

import org.apache.commons.io.IOUtils; 

import javax.net.ssl.HttpsURLConnection; 
import java.net.URL; 
import java.net.URLEncoder; 

public class Test1 { 
    private static String key = "<your translator account key>"; 

    public static void main(String[] args) { 
     try { 
      // Get the access token 
      // The key got from Azure portal, please see https://docs.microsoft.com/en-us/azure/cognitive-services/cognitive-services-apis-create-account 
      String authenticationUrl = "https://api.cognitive.microsoft.com/sts/v1.0/issueToken"; 
      HttpsURLConnection authConn = (HttpsURLConnection) new URL(authenticationUrl).openConnection(); 
      authConn.setRequestMethod("POST"); 
      authConn.setDoOutput(true); 
      authConn.setRequestProperty("Ocp-Apim-Subscription-Key", key); 
      IOUtils.write("", authConn.getOutputStream(), "UTF-8"); 
      String token = IOUtils.toString(authConn.getInputStream(), "UTF-8"); 
      System.out.println(token); 

//   Using the access token to build the appid for the request url 
      String appId = URLEncoder.encode("Bearer " + token, "UTF-8"); 
      String text = URLEncoder.encode("Hello", "UTF-8"); 
      String from = "en"; 
      String to = "fr"; 
      String translatorTextApiUrl = String.format("https://api.microsofttranslator.com/v2/http.svc/GetTranslations?appid=%s&text=%s&from=%s&to=%s&maxTranslations=5", appId, text, from, to); 
      HttpsURLConnection translateConn = (HttpsURLConnection) new URL(translatorTextApiUrl).openConnection(); 
      translateConn.setRequestMethod("POST"); 
      translateConn.setRequestProperty("Accept", "application/xml"); 
      translateConn.setRequestProperty("Content-Type", "text/xml"); 
      translateConn.setDoOutput(true); 
      String TranslationOptions = "<TranslateOptions xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\">" + 
        "<Category>general</Category>" + 
        "<ContentType>text/plain</ContentType>" + 
        "<IncludeMultipleMTAlternatives>True</IncludeMultipleMTAlternatives>" + 
        "<ReservedFlags></ReservedFlags>" + 
        "<State>contact with each other</State>" + 
        "</TranslateOptions>"; 
      translateConn.setRequestProperty("TranslationOptions", TranslationOptions); 
      IOUtils.write("", translateConn.getOutputStream(), "UTF-8"); 
      String resp = IOUtils.toString(translateConn.getInputStream(), "UTF-8"); 
      System.out.println(resp); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


    } 
} 

希望します。

+0

ありがとうございました@Jay Gong。それは円滑に働いた。 –

+0

あなたは、IOUTilsステートメントをsortのOutputStreamに変換する方法を知っています。それは、IOUtilsのためにアンドロイドに移植するのが面倒です。orgでjava.lang.ExceptionInInitializerErrorなどのエラーが表示されます。他にもapache.commons.io.IOUtils.write。 :/私は既に正しいIOUtils jarファイルを持っています。 :/ –

+0

ah nevermind、IOUtilsを手動でハードコーディングして使用しない方法を見つけました。再びBTW。 –

1

また、などの評価のように翻訳されたテキストの完全な出力を与える@Jayゴングの答えは、一致度に追加する私は翻訳された実際のテキストを表示することでリビジョンを作成した

オンコードは、彼はただのコード


のSystem.out.println(それぞれ)の下に、上記ました。


上記のコードを削除またはコメントし、その下に次の行を追加します。

//   System.out.println(resp);    
String s=resp; 
Pattern assign_op=Pattern.compile("(<TranslatedText>)" 
     + "|(<\\/TranslatedText>)" 
     + "|[()\\\\[\\\\]{};=#.,'\\\\^:@!$%&_`*-<>]" 
     + "|[a-zA-Z0-9\\s]*" 
     + ""); 
Matcher m = assign_op.matcher(s) ; 
Boolean endOfTransTxt=false,startOfTransTxt=false,concat=false; 
String foundRegexStr="",tempStr=""; 

while (m.find()) { 
    foundRegexStr=m.group(); 

    if(m.group().matches("(<TranslatedText>)")) { 
     startOfTransTxt=true;  
    } 
    else if(m.group().matches("(<\\/TranslatedText>)")) { 
     endOfTransTxt=true; 
     concat=false; 
    } 
    else{ 
     startOfTransTxt=false; 
     endOfTransTxt=false; 
    } 

    if(startOfTransTxt==true) { 
     concat=true; 
    } 
    else if(concat==true) { 
     tempStr=tempStr+""+m.group(); 
    } 
    else { 

    }  
} 
System.out.println("\nTranslated Text: "+tempStr); 
関連する問題