Определить язык из строки в PHP - PullRequest
29 голосов
/ 18 сентября 2009

В PHP есть способ определить язык строки? Предположим, строка в формате UTF-8.

Ответы [ 15 ]

1 голос
/ 18 марта 2017

попробуй использовать ascii encode. я использую этот код для определения ru \ en языков в моем проекте социального бота

function language($string) {
        $ru = array("208","209","208176","208177","208178","208179","208180","208181","209145","208182","208183","208184","208185","208186","208187","208188","208189","208190","208191","209128","209129","209130","209131","209132","209133","209134","209135","209136","209137","209138","209139","209140","209141","209142","209143");
        $en = array("97","98","99","100","101","102","103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118","119","120","121","122");
        $htmlcharacters = array("<", ">", "&amp;", "&lt;", "&gt;", "&");
        $string = str_replace($htmlcharacters, "", $string);
        //Strip out the slashes
        $string = stripslashes($string);
        $badthings = array("=", "#", "~", "!", "?", ".", ",", "<", ">", "/", ";", ":", '"', "'", "[", "]", "{", "}", "@", "$", "%", "^", "&", "*", "(", ")", "-", "_", "+", "|", "`");
        $string = str_replace($badthings, "", $string);
        $string = mb_strtolower($string);
        $msgarray = explode(" ", $string);
        $words = count($msgarray);
        $letters = str_split($msgarray[0]);
        $letters = ToAscii($letters[0]);
        $brackets = array("[",",","]");
        $letters = str_replace($brackets,  "", $letters);
        if (in_array($letters, $ru)) {
            $result = 'Русский' ; //russian
        } elseif (in_array($letters, $en)) {
            $result = 'Английский'; //english
        } else {
            $result = 'ошибка' . $letters; //error
        }} return $result;  
1 голос
/ 20 сентября 2009

Я бы взял документы с разных языков и сравнил их с Юникодом. Затем вы можете использовать некоторые байесовские рассуждения, чтобы определить, какой это язык, используя только символы Юникода. Это отделило бы французский от английского или русского.

Я не уверен точно, что еще можно сделать, кроме поиска слов в языковых словарях для определения языка (используя аналогичный вероятностный подход).

1 голос
/ 18 сентября 2009

Возможно отправить строку этому языку guesser:

http://www.xrce.xerox.com/competencies/content-analysis/tools/guesser

1 голос
/ 18 сентября 2009

Одним из подходов может быть разбиение входной строки на слова, а затем поиск этих слов в английском словаре, чтобы увидеть, сколько их присутствует. Этот подход имеет несколько ограничений:

  • Собственные имена не могут быть хорошо обработаны
  • орфографические ошибки могут нарушить ваш поиск
  • аббревиатуры типа "lol" или "b4" не обязательно будут в словаре
0 голосов
/ 12 апреля 2011

Вы можете реализовать модуль Apache Tika с Java, вставить результаты в текстовый файл, БД и т. Д., А затем прочитать из файла db, что угодно с помощью php. Если у вас не так много контента, вы можете использовать API Google, хотя имейте в виду, что ваши звонки будут ограничены, и вы можете отправлять только ограниченное количество символов в API. На момент написания статьи я закончил тестировать API-версию 1 (которая оказалась не очень точной) и версию 2 лабораторных работ (я отказался от нее, прочитав, что в день существует ограничение в 100 000 символов).

...