Определения языка текста с php

Ранее использовал Google API для определения языка, но теперь он платный. Нашёл альтернативный способ определения языка текста, используя pear пакет Text_LanguageDetect с 52 поддерживаемыми языками. Пример определения языка литовского текста со списком поддерживаемых языков:

<?
header('Content-Type: text/plain; charset=utf-8');

require_once 'Text/LanguageDetect.php';
$l = new Text_LanguageDetect();

//текст для определения языка
$text = 'O mergina, vienplaukė, palaidomis kasomis, atlapu kaklu, smulkiu, bet tvirtu žingsniu ėjo toliau, artyn prie ežero.';

//близкие по тексту языки
$result = $l->detect($text, 4);
print_r($result);

//распределение юникод блоков
$blocks = $l->detectUnicodeBlocks($text, true);
print_r($blocks);

//название найденного языка
$l->setNameMode(0);
echo $l->detectSimple($text)."\n";

//ISO 639-1 код языка два символа
$l->setNameMode(2);
echo $l->detectSimple($text)."\n";

//ISO 639-2 код языка три символа
$l->setNameMode(3);
echo $l->detectSimple($text)."\n";

//Список поддерживаемых языков
$l->setNameMode(0);
$langs = $l->getLanguages();
sort($langs);
print_r($langs);

//Общее количество поддерживаемых языков
echo count($langs);

Вывод:

Array
(
    [lithuanian] => 0.24584192439863
    [latvian] => 0.19567010309278
    [estonian] => 0.11316151202749
    [dutch] => 0.11240549828179
)
Array
(
    [Basic Latin] => 89
    [Latin Extended-A] => 4
)
lithuanian
lt
lit
Array
(
    [0] => albanian
    [1] => arabic
    [2] => azeri
    [3] => bengali
    [4] => bulgarian
    [5] => cebuano
    [6] => croatian
    [7] => czech
    [8] => danish
    [9] => dutch
    [10] => english
    [11] => estonian
    [12] => farsi
    [13] => finnish
    [14] => french
    [15] => german
    [16] => hausa
    [17] => hawaiian
    [18] => hindi
    [19] => hungarian
    [20] => icelandic
    [21] => indonesian
    [22] => italian
    [23] => kazakh
    [24] => kyrgyz
    [25] => latin
    [26] => latvian
    [27] => lithuanian
    [28] => macedonian
    [29] => mongolian
    [30] => nepali
    [31] => norwegian
    [32] => pashto
    [33] => pidgin
    [34] => polish
    [35] => portuguese
    [36] => romanian
    [37] => russian
    [38] => serbian
    [39] => slovak
    [40] => slovene
    [41] => somali
    [42] => spanish
    [43] => swahili
    [44] => swedish
    [45] => tagalog
    [46] => turkish
    [47] => ukrainian
    [48] => urdu
    [49] => uzbek
    [50] => vietnamese
    [51] => welsh
)
52

Другой пример распознаёт язык страницы:

<?
header('Content-Type: text/plain; charset=utf-8');

require_once 'Text/LanguageDetect.php';
$l = new Text_LanguageDetect();

mb_internal_encoding("UTF-8");

//страница для примера
$url = "http://lt.wikipedia.org/wiki/Kalba";
$page = file_get_contents($url);

//Поиск кодировки страницы по тегу meta
preg_match('/<meta[^>]+charset=[\'"]*([a-z0-9\-]+)[\'"]*/i', $page, $a);
print_r($a);

if(!$a){
	$charset = "UTF-8";
}else{
	$charset = strtoupper($a[1]);
}

//удаляем пробелы, HTML теги и JavaScript из содержимого страницы
$search = array('#<script[^>]*?>.*?</script>#si',
		'#<style[^>]*?>.*?</style>#siU',
		'#<[\/\!]*?[^<>]*?>#si',
		'#<![\s\S]*?--[ \t\n\r]*>#',
		'#\s\s+#'
);
$content = preg_replace($search, '', $page);

//Первые 200 символов содержимого страницы должно быть достаточно для распознавания языка
$content = mb_substr($content, 0, 200);

//конвертируем в utf-8 если другая кодировка
if($charset != "UTF-8"){
	$content = iconv($charset, "UTF-8", $content);
}

//выводим текст
echo $content."\n";

//название языка
$l->setNameMode(2);
echo $l->detectSimple($content)."\n";

//близкие по тексту языки
$result = $l->detect($content, 4);
print_r($result);

//распределение юникод блоков
$blocks = $l->detectUnicodeBlocks($content, true);
print_r($blocks);

Вывод:

Array
(
    [0] => <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
    [1] => UTF-8
)
Kalba – VikipedijaKalbaStraipsnis iš Vikipedijos, laisvosios enciklopedijos.Peršokti į: navigaciją,paieškąVikisritis: KalbosKalba – lingvistinių ženklų sistema.
Svarbiausia kalbos paskirtis – būti žmo
lt
Array
(
    [lt] => 0.23644295302013
    [lv] => 0.14548098434004
    [et] => 0.14234899328859
    [la] => 0.12302013422819
)
Array
(
    [Basic Latin] => 161
    [General Punctuation] => 3
    [Latin Extended-A] => 11
)

Скачать исходный код определения языка текста.

Запись опубликована в рубрике Программирование с метками , . Добавьте в закладки постоянную ссылку.

1 комментарий: Определения языка текста с php

  1. Den

    спс, нашел что искал, а то вся выдача забита этим гугл транслитом, ща поставлю скриптик, проверим как он в бою будет 🙂

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *