1

Microsoft Translator API を使用して中国語 (簡体字) から英語に翻訳しようとしています。

いくつかの要件

  • クエリが Microsoft の URI 制限である 15,845 文字を超えているため、クエリ文字列でPOSTはなく、HTTP メソッドを使用する必要があります(これは、漢字の場合は 10,000 文字の制限よりも少ない場合でも可能であることに注意してください。その理由は、GETクエリ文字列は URL エンコードする必要があるため、長さが大幅に増加しますが、文字数が決定される前に Microsoft によってデコードされます。

  • POSTsを許可する唯一の変換 HTTP メソッドTranslateArrayMethodは です。たとえば、は sTranslateMethodのみを許可しますGET。残念ながら、 はTranslateArrayMethodXML ドキュメントしか受け付けないため、XML を扱う必要があります。

以下は、送信する XML ドキュメントの例です。

<TranslateArrayRequest>
    <AppId/>
    <From>es</From>
    <Options>
        <ContentType xmlns="http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2">text/plain</ContentType>
    </Options>
    <Texts>
        <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <![CDATA[Hola]]>
        </string>
    </Texts>
    <To>en</To>
</TranslateArrayRequest>

これは正常に動作し、結果は次のとおりです。

<ArrayOfTranslateArrayResponse xmlns="http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<TranslateArrayResponse>
    <From>es</From>
    <OriginalTextSentenceLengths xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <a:int>4</a:int>
</OriginalTextSentenceLengths>
<TranslatedText>Hello</TranslatedText>
<TranslatedTextSentenceLengths xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<a:int>5</a:int>
</TranslatedTextSentenceLengths>
</TranslateArrayResponse>
</ArrayOfTranslateArrayResponse>

ただし、次のように漢字を追加すると、次のようになります。

<TranslateArrayRequest>
    <AppId/>
    <From>zh-CHS</From>
    <Options>
        <ContentType xmlns="http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2">text/plain</ContentType>
    </Options>
    <Texts>
        <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <![CDATA[南]]>
        </string>
    </Texts>
    <To>en</To>
</TranslateArrayRequest>

私は奇妙な応答を受け取ります:

<html>
    <body/>
    <h1>System.Runtime.Serialization.SerializationException</h1>
    <p>Message: There was an error deserializing the object of type Microsoft.MT.MDistributor.V2.TranslateArrayRequest. Unexpected end of file. Following elements are not closed: TranslateArrayRequest. Line 1, position 298.</p>
</html>

CDATA エスケープを使用しないことも試みましたが、役に立たないことに注意してください。From言語を変更しても効果はありません。

私は Node.js (Javascript) を使用していますが、これは汎用 HTTP API であるため、問題ではないと思います。

4

2 に答える 2

1

おそらく、問題は中国語ではなく、MS Translator が改行記号を好まないことです。このエラー メッセージに出くわしたとき、次のように変更しました。

  1. <string> ノードのすべてのコンテンツで、改行文字が空の文字列に置き換えられました。これらの文字には Unicode 値があります: 0xA、0xB、0xC、0xD、0x85、0x2028、0x2029
  2. <string> ノードのすべてのコンテンツで、XML 予約語を代替表現に置き換えました。

    & → &

    < → <

    > → >

    ' → '

    " → "

  3. XML 全体を 1 行に再配置

その後、すべてがスムーズに機能しました。あなたの特定の例に関して、記号「南」は「南」と訳されました。CDATA エスケープは使用しませんでした。

于 2015-11-21T13:43:59.073 に答える