Yandex Translate API:PHPとサービスの少しの研究

Googleが翻訳用のAPIを閉じた後、機械翻訳用のオンラインサービスを見つける問題が特に重要になりました。

インターネットには、Promt、Pragmaなどの有名な翻訳サービスが多数あります。PHPには、サービスページへのアクセスをシミュレートして翻訳結果を取得するのに問題はありません。 しかし、問題があります。単純なGETまたはPOSTリクエストに応答するほとんどすべてのサービスは、翻訳結果を返しませんが、DTDで始まるページ全体が栄光に包まれます。 ウクライナで言うように、「悪いネム」。

分析後、リクエストに応じて転送の結果のみを返すサービスは、YandexとMicrosoftのBingの2つのみであることがわかりました。



大幅に先を見据えて、範囲と機能を示します。



Yandexは使いやすく、ロシア語からロシア語に完全に翻訳できますが、欠点もあります。Yandex ロシア語のみ、またはロシア語のみに翻訳します。 Yandexをウクライナ語から英語に1回の操作で翻訳することは不可能です。



Bingはこれに苦しむことはありませんが、:

-ロシア語またはウクライナ語が関係する翻訳は強力な「アクセント」に苦しみ、必然的に編集が必要です

-Bingを無料モードで使用するにはいくつかの制限があります

-Bingを使用するには、特定のWebアプリケーション識別子-appIDが必要です。appIDの受け取りは法的問題とは関係ありません-これは実際には単なる登録ですが、エキサイティングで長いクエストです。



それでは、翻訳のためにライブラリ/クラスはどのタスクを解決する必要がありますか?



1.翻訳元および翻訳先の言語、およびそれらの許容可能な組み合わせの取得

2.実際にテキストの翻訳



すぐに発言。 常識的な考慮事項から、「戦争と平和」の翻訳は一度に機能しないことは明らかです。 技術レベルで着陸すると、より明確な制限が与えられます。JanexトランスレーターはそれぞれGETリクエストを使用します。 -非常に失礼-一度に約2000文字、それ以上。 これはかなり多く、約2段落の小さなテキストです。サイト上の小さな出版物でさえ、これを超えます。

したがって、次のタスク:



3.テキストの大きな断片の翻訳。



タスクを想像してください:多言語サイト。 サイト上のインターフェイス要素やその他のテキストを翻訳するたびに翻訳者を追いかけるのは、控えめに言っても不合理です。 したがって、タスク:



4.キャッシング。



キャッシュは別の目的で必要です。Yandexの翻訳者は優れていますが、完璧ではありません。特にロシア語の豊かさを考えると。 多くの場合、翻訳結果を修正したいのですが、そのためにはどこかに保存する必要があります。



だから、Yandex.Translator

ソースはGoogleリポジトリにあり、ロシア語で文書化されています。



1)翻訳の言語。

Yandex_Translateクラスには、名前を話す3つのメソッドが含まれています。

yandexGetLangsPairs()-利用可能な言語ペアの取得FROM-> TO

yandexGet_FROM_Langs()

yandexGet_TO_Langs()



例(この例は完了です。以下のファイル接続、クラスのインスタンスの作成、出力フォーマット要素などは省略されます。)



<?php

include_once 'Yandex_Translate.php';

$pairs = $translator->yandexGetLangsPairs();

print_r($pairs);








そのような組み合わせを取得します(ところで、それらは時々変化します):

[0] => en-ru

[1] => ru-en

[2] => ru-uk

[3] => uk-ru

[4] => pl-ru

[5] => ru-pl

[6] => tr-ru

[7] => ru-tr

[8] => de-ru

[9] => ru-de

[10] => fr-ru

[11] => ru-fr

[12] => it-ru

[13] => es-ru

[14] => ru-es



すべてのペアにruという言語があることに注意してください。まあ、これはすでに上で述べたものです。



他の2つの方法は言語を個別に提供し、たとえばselectやその他の選択要素を形成するために使用できます。



2.翻訳

1つのメソッド、3つの引数:元、元、実際に翻訳されたテキスト。

eolSymbolの重要なプロパティである行末にも注意してください。 正しくインストールされていない場合、出力テキストのフォーマットは行われません(ソースのコメントを参照)。



例:

$text = file_get_contents('text.txt');

$translatedText = $translator->yandexTranslate('ru', 'uk', $text);

echo $translatedText;








text.txtファイルの開始:

マリオプゾザゴッドファーザー

アンソニー・クリアリーに捧げる

予約する

あらゆる幸運の背後には犯罪があります。



スクリプトの結果:

Marіop'yuzo父のバッチ

Svyatyachsya EntonyKlіrі

ペルシャブック

皮の後ろに素晴らしいキャンプzoozhenは叫ぶ。



すぐに注意してください-翻訳は良好ですが、編集が必要です。



3.大きなテキストの翻訳

大きなテキストを翻訳するには、抽象クラスBig_Text_Translateを使用します

原則は次のとおりです。

最初に、テキストはsentensesDelimiter区切り文字を使用して文に分割されます-デフォルトはピリオドです。

もちろん、スペースのあるドットを使用する方が正しいでしょうが、実際には、たとえば「koments」のように、ドットの後のスペースは簡単に「修復」できます。 したがって、これは実際の作業で問題を引き起こすことはありませんが、プロパティは再定義できます。

次に、文はテキストフラグメントで収集され、そのサイズはsymbolLimitの指定値(デフォルトでは2000)を超えません。

テキストの断片は翻訳の準備ができており、セマンティクスとフォーマットは保存されます。 静的メソッドtoBigPiecesはフラグメントの形成に関与し、出力は配列です。

fromBigPiecesメソッドは、翻訳されたフラグメントをテキスト全体に戻します。





$bigText = file_get_contents('text_big.txt');

$textArray = Big_Text_Translate::toBigPieces($bigText);



$numberOfTextItems = count($textArray);



foreach ($textArray as $key=>$textItem){



//

echo ' '.$key.' '.$numberOfTextItems;

flush();



$translatedItem = $translator->yandexTranslate('ru', 'uk', $textItem);

$translatedArray[$key] = $translatedItem;

}



$translatedBigText = Big_Text_Translate::fromBigPieces($translatedArray);



echo $translatedBigText;






自分で例を試してください-すべてがリポジトリにあります。



親愛なる行商人! 資料に関心がある場合は、セクションを含むその継続が準備されます。

-翻訳結果をいくつかのレベルでキャッシュ

-Bingサービスを使用する

-完全なデモ:多言語サイトの構築。



All Articles