Как сделать перевод текста если найден английский текст?

Тема в разделе "Как сделать...", создана пользователем ZiX, 10 ноя 2012.

  1. ZiX

    ZiX Коддинг, Парсинг

    Moderator
    Регистр.:
    9 июл 2011
    Сообщения:
    1.386
    Симпатии:
    575
    Как сделать перевод с английского на русский, если в тексте присутствует больше половины английских слов(букв). Или если найден английский текст то сделать перевод. Переводчик нашел:
    PHP:
    <?php 
    class google_translator_exception extends Exception {
    }
     
    class 
    google_translator {
     
    private 
    $_user_agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
           
    private 
    $_sleep 0;
     
    private 
    $_lang_s '';
    private 
    $_lang_t '';
     
    private 
    $_sources = array();
     
    function 
    set_sleep($s) {
        
    $this->_sleep $s;
        return 
    $this;
    }
     
    function 
    set_langs($from$to) {
        
    $this->_lang_s $from;
        
    $this->_lang_t $to;
        return 
    $this;
    }
     
    function 
    set_text($src) {
        
    $this->_sources is_array($src) ? $src : array($src);
        return 
    $this;
    }
     
     
    /**
    * @param mixed array or text
    * @return mixed array[0,1,2..] or text
    */
    function translate($text false) {
       
      
    $is_array is_array($text); 
       
      
    $text = ($text === false) ? $this->_sources : (is_array($text) ? $text : array($text)); 
     
      
    $result = array();
     
      
    $url "http://translate.google.ru/translate_a/t?client=t&text=%s&hl={$this->_lang_t}&sl={$this->_lang_s}&tl={$this->_lang_t}&multires=1&otf=2&ssel=4&tsel=0&sc=1";
         
      
    $ch curl_init();
            
    $Headers = array(
                
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                
    "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3",
                
    "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7"       
            
    );                                                 
      
    curl_setopt($chCURLOPT_HTTPHEADER$Headers); 
      
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
      
    curl_setopt($chCURLOPT_USERAGENT$this->_user_agent);
    $proxy '194.204.38.218:80';
     
     
    //curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
     
     
      foreach (
    $text as $k => $t) {
         
        
    $t urlencode($t);
     
        
    $ref "http://translate.google.ru/#{$this->_lang_s}|{$this->_lang_t}|{$t}"  ;
        
    curl_setopt($chCURLOPT_REFERER$ref);
     
        
    curl_setopt($chCURLOPT_URLsprintf($url$t));
        
    curl_setopt($chCURLOPT_PROXY$proxy);
        
    $body curl_exec($ch);
       
        if (
    CURLE_OK != curl_errno($ch)) {
          throw new 
    google_translator_exception (curl_error($ch));
        }
     
        
    $body iconv('KOI8-R''UTF-8'substr($body,2));
        
    $result[$k] = preg_replace('@^\[\"(.*)\",\".*$@Uu''$1'$body);   
     
        if (
    $this->_sleepsleep($this->_sleep);
           
      }
     
      
    curl_close($ch);
     
      return 
    $is_array $result array_pop($result);
     
     
    }
    }
     
       
     
    ?>
    Не знаю как реализовать условие если.
     
  2. amber128

    amber128 Создатель

    Регистр.:
    10 май 2007
    Сообщения:
    36
    Симпатии:
    2
    На php такое довольно проблематично реализовать
    Как вариант можно сделать:

    Подсчитать количество символов в тексте
    $count = strlen($text);

    Далее, вычислить количество символов без русских букв
    $text = preg_replace('/[^А-Яа-я\s]/u','',$text);
    $count_en = strlen($text);

    Считаем количество символов без англ букв.
    $text = preg_replace('/[^a-zA-Z\s]/u','',$text);
    $count_ru = strlen($text);

    и далее сравниваем результат:
    $res_1 = $count - $count_en ;
    $res_2 = $count - $count_ru ;

    if ($res_1 <= $res_1 ) { } else { }

    или просто по количеству остаточных символов
    if ($count_en <= $count_ru) { } else { }
    Что то примерно так
     
  3. drw36

    drw36 Создатель

    Регистр.:
    11 ноя 2012
    Сообщения:
    12
    Симпатии:
    2
    можно проверять количество употреблений какого-либо английского слова и его русского аналога, наиболее часто и вероятно используемых в данном контексте. Например, сравнивать количество подстрок " а ", " и ", " но " с количеством подстрок " and ", " but ". Этот вариант быстрее, но предыдущий вернее и точнее.