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

ZiX

Коддинг, Парсинг
Регистрация
9 Июл 2011
Сообщения
1.378
Реакции
707
Как сделать перевод с английского на русский, если в тексте присутствует больше половины английских слов(букв). Или если найден английский текст то сделать перевод. Переводчик нашел:
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($ch, CURLOPT_HTTPHEADER, $Headers); 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_USERAGENT, $this->_user_agent);
$proxy = '194.204.38.218:80';
 
 
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
 
 
  foreach ($text as $k => $t) {
     
    $t = urlencode($t);
 
    $ref = "http://translate.google.ru/#{$this->_lang_s}|{$this->_lang_t}|{$t}"  ;
    curl_setopt($ch, CURLOPT_REFERER, $ref);
 
    curl_setopt($ch, CURLOPT_URL, sprintf($url, $t));
    curl_setopt($ch, CURLOPT_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->_sleep) sleep($this->_sleep);
       
  }
 
  curl_close($ch);
 
  return $is_array ? $result : array_pop($result);
 
 
}
}
 
   
 
?>
Не знаю как реализовать условие если.
 
На 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 { }
Что то примерно так
 
можно проверять количество употреблений какого-либо английского слова и его русского аналога, наиболее часто и вероятно используемых в данном контексте. Например, сравнивать количество подстрок " а ", " и ", " но " с количеством подстрок " and ", " but ". Этот вариант быстрее, но предыдущий вернее и точнее.
 
Назад
Сверху