Yandex.APIを使用して書籍を翻訳します

なぜそれが必要ですか



著者の母国語である英語で本を読むことに気づいたとき。 いくつかのページを読んだ後、不慣れな単語が辞書に到達し、目的のページを検索し、探しているものに似た他の多くの単語について目をつぶらなければならないため、読むのに時間がかかることが明らかになりました... そこで、この本専用の小さな辞書をまとめることにしました。これは、インターネットにアクセスできないときでも、どんな状況でも調べることができます。



それから何が来る



出力では、最も一般的な.txtファイルを取得します。このファイルでは、書籍のまれな行とその翻訳が各行にアルファベット順に配置されます。 このような辞書は、たとえば、携帯電話のMIDletに、または直接サイトに簡単に統合できます。



Yandex.APIを使用する理由



Yandexでは、すべてが簡単です。言葉を送ってください-翻訳が来ました。 Google.translateのように一意のキーを登録する必要はありません。また、彼は多数のリクエストについて文句を言いません。



実装



このベンチャーを実装するために、次のファイルが作成されます。





handler.php


<?php set_time_limit(0); #       ignore_user_abort(); #        fopen('flag','x'); #  ,       @unlink('translated.txt'); #    ,   $text = file_get_contents('martin_eden.txt'); #     (martin_eden.txt)   $symbols = array('!',',','.','\'','"','-',':',';','?',"\r",'(',')'); $text = str_replace($symbols, '', $text); #      $text = str_replace("\n", ' ', $text); #      $text_array = explode(' ',$text); # ''    foreach($text_array as $val){ #      if($val==''){continue;} $val = strtolower($val); if(array_key_exists($val, $words)){ #       ,   $words[$val]++; }else{ #   -  $words[$val] = 1; } } ksort($words); #       foreach($words as $w=>$v){ #        (   1-5) if($v<=5){ $rare_words[$w]=$v; } } $w_total = sizeof($rare_words); #          $src = fopen('total.txt','w'); fwrite($src, $w_total); fclose($src); $src_trns = fopen('translated.txt','a'); #  ,      $cnt=0; foreach($w_a as $w=>$v){ #    if(!file_exists('flag')){ die(); #  " - "   -    } /*      translate.yandex    GET-,  lang -   (   ), text - ,    . */ $arr = json_decode(file_get_contents('http://translate.yandex.net/api/v1/tr.json/translate?lang=en-ru&text='.$w,3), true); if($w!=$arr['text'][0]){ #        ,     fwrite($src_trns, $w.'|'.$arr['text'][0]."\n"); #      } $cnt++; #       $src = fopen('current.txt','w'); #        fwrite($src, $cnt); fclose($src); } fclose($src_trns); unlink('flag'); #      "" -      ?>
      
      







stop.php


 <?php @unlink('flag'); #   "",           ?>
      
      







index.html


 <!DOCTYPE HTML> <html> <head> <!--   () --> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--   JQuery (       ) --> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script> <script> /*     */ function refresh(){ /*     */ $.post("current.txt",function(data) { current = data; }); /*        #status */ $.post("total.txt",function(data) { $('#status').html(current+' / '+data); }); /*        */ setTimeout(function(){ refresh(); }, 1000); } /*     */ function stop(){ $.post("stop.php"); /*    stop.php,      */ } /*     */ function start(){ $.post("handler.php"); /*     handler.php,     */ } $('document').ready(function(){ refresh(); /*     ,     */ }); </script> </head> <body> <input type="button" value="Stop" onClick="stop();"> <input type="button" value="Start" onClick="start();"> <div id="status"></div> </body> </html>
      
      







結果



このような子供用の自転車を使用して、彼は1033秒で5982語を翻訳しました(平均で5.78語/秒)。 これは比較的長い時間です。これは、翻訳を高速化する方法を発明しなかったためです(理想的には、同時に複数のリクエストを送信できますが、Yandexを怒らせたくありません)。



この例は、目標がプロセスではなく翻訳自体の結果である場合に、本や記事のまれな単語を翻訳するために使用できます。 これらの目的でリモートサーバーを使用する場合、コンピューターの電源がオフになったときにも変換プロセスが発生します。



All Articles