2017-08-25 22 views
0

文字列入力用のテキストボックスを作成し、入力に "。"がある場合は配列に分割します。例:配列にテキストボックスを入力

答えは機械翻訳にあります。最高の機械翻訳技術は、サイトや人間のようなユーザーに合わせた翻訳を提供するとは限りません。どこにでもコードスニペットをコピーして貼り付けるだけです。

その場合、その入力は3つの配列で構成されます。

Microsoftの次のコードをご覧ください。私はテキストボックスを使用して入力からハードコードを変更したいと思います。次に、翻訳する各配列を渡します。

class TranslateArraySample 
{ 
    public static async Task Run(string authToken) 
    { 
     var from = "en"; 
     var to = "es"; 
     ** var translateArraySourceTexts = new [] 
     { 
      "The answer lies in machine translation.", 
      "the best machine translation technology cannot always provide translations tailored to a site or users like a human ", 
      "Simply copy and paste a code snippet anywhere " 
     }; 
     var uri = "https://api.microsofttranslator.com/v2/Http.svc/TranslateArray"; 
     var body = "<TranslateArrayRequest>" + 
         "<AppId />" + 
         "<From>{0}</From>" + 
         "<Options>" + 
         " <Category xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" + 
          "<ContentType xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\">{1}</ContentType>" + 
          "<ReservedFlags xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" + 
          "<State xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" + 
          "<Uri xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" + 
          "<User xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" + 
         "</Options>" + 
         "<Texts>" + 
          "<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\">{2}</string>" + 
          "<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\">{3}</string>" + 
          "<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\">{4}</string>" + 
         "</Texts>" + 
         "<To>{5}</To>" + 
        "</TranslateArrayRequest>"; 
     string requestBody = string.Format(body, from, "text/plain", translateArraySourceTexts[0], translateArraySourceTexts[1], translateArraySourceTexts[2], to); 

     using (var client = new HttpClient()) 
     using (var request = new HttpRequestMessage()) 
     { 
      request.Method = HttpMethod.Post; 
      request.RequestUri = new Uri(uri); 
      request.Content = new StringContent(requestBody, Encoding.UTF8, "text/xml"); 
      request.Headers.Add("Authorization", authToken); 
      var response = await client.SendAsync(request); 
      var responseBody = await response.Content.ReadAsStringAsync(); 
      switch (response.StatusCode) 
      { 
       case HttpStatusCode.OK: 
        Console.WriteLine("Request status is OK. Result of translate array method is:"); 
        var doc = XDocument.Parse(responseBody); 
        var ns = XNamespace.Get("http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2"); 
        var sourceTextCounter = 0; 
        foreach (XElement xe in doc.Descendants(ns + "TranslateArrayResponse")) 
        { 
         foreach (var node in xe.Elements(ns + "TranslatedText")) 
         { 
         ** Console.WriteLine("\n\nSource text: {0}\nTranslated Text: {1}", translateArraySourceTexts[sourceTextCounter], node.Value); 
         } 
         sourceTextCounter++; 
        } 
        break; 
       default: 
        Console.WriteLine("Request status code is: {0}.", response.StatusCode); 
        Console.WriteLine("Request error message: {0}.", responseBody); 
        break; 
      } 
     } 
    } 
} 
+0

文の途中に '.'がある場合はどうなりますか?これにより、さらに1つの文章が得られます。 – Sach

+0

私は 'C#'について何も知らないけどあなたの質問を見て、もし私が使っている 'VB.Net'でそれをしなければならなかったら、**" "の位置を見つけるでしょう。**その点まで文字列を壊して配列に入れます。 ** "の後にテキストがなくなるまでそれを続けます。" **私はあなたが上記のコードで同じことをしたかどうか分かりません。ちょうど私のアイデアを共有したいと思います。今のところ – Subaz

+0

、それは大丈夫です。 '.'があると別の文にします – Response

答えて

0

ここにいくつかのコード例を示します。文字列sをテキストボックスの.Textに置き換えます。

string s = @"Changing your development practice to introduce an automated testing strategy can revolutionise your deployments. If you approach the software release date with a sense of dread, this technique is for you. 

Implementing a test-driven development strategy using tSQLt leads to robust, modular code that becomes a pleasure to work with. As more tests are created, trust builds that releases will provide beneficial new functionality with no negative side-effects."; 

var translateArraySourceTexts = s.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToArray(); 
+0

空白行で分割したので、 "。"で分割したいと思います。 – Derek

1

使用(StringObject).Split("<separator>") サンプルコード:

var translateArraySourceTexts = new[] 
      { 
       "The answer lies in machine translation.", 
       "the best machine translation technology cannot always provide translations tailored to a site or users like a human ", 
       "Simply copy and paste a code snippet anywhere " 
      }; 
    var array = string.Join(",",translateArraySourceTexts).Split('.'); 
0

あなたはあなたの結果の配列にのみ3つの文字列を取得するのstring.Split(charArray、stringSplitoptions)が必要です。あなたの例

string translatableString = "The answer lies in machine translation. The best 
    machine translation technology cannot always provide translations tailored to 
    a site or users like a human. Simply copy and paste a code snippet anywhere."; 

    string[] arr = translatableString.Split(new char[] { '.' }, 
    StringSplitOptions.RemoveEmptyEntries); 

1が空になりますので、あなたが translatableString.Split( '')で4つの文字列の配列を取得します。これが私がオーバーロードされたメソッドを提供した理由です。