Teksto kalbos atpažinimas su php

Anksčiau naudojau Google Language API kalbos atpažinimui, bet jis jau mokamas. Radau alternatyvų būdą kaip aptikti teksto kalbą naudojant pear paketą Text_LanguageDetect, kuris palaiko 52 kalbas. Čia yra lietuviško teksto kalbos atpažinimo pavyzdys ir palaikomų kalbų sąrašas:

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

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

//kalbos aptikomo tekstas
$text = 'O mergina, vienplaukė, palaidomis kasomis, atlapu kaklu, smulkiu, bet tvirtu žingsniu ėjo toliau, artyn prie ežero.';

//pagal tekstą aptiktos panašios kalbos
$result = $l->detect($text, 4);
print_r($result);

//Unicode blokų paskirstymas
$blocks = $l->detectUnicodeBlocks($text, true);
print_r($blocks);

//kalbos pavadinimas
$l->setNameMode(0);
echo $l->detectSimple($text)."\n";

//ISO 639-1 dviejų simbolių kalbos kodas
$l->setNameMode(2);
echo $l->detectSimple($text)."\n";

//ISO 639-2 trijų simbolių kalbos kodas
$l->setNameMode(3);
echo $l->detectSimple($text)."\n";

//palaikomų kalbų sąrašas
$l->setNameMode(0);
$langs = $l->getLanguages();
sort($langs);
print_r($langs);

//palaikomų kalbų kiekis
echo count($langs);

Atsakymas:

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

Kitas pavyzdys atpažįsta puslapio kalbą:

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

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

mb_internal_encoding("UTF-8");

//pavyzdžio puslapis
$url = "http://lt.wikipedia.org/wiki/Kalba";
$page = file_get_contents($url);

//Koduotės paieška pagal žymą meta
preg_match('/<meta[^>]+charset=[\'"]*([a-z0-9\-]+)[\'"]*/i', $page, $a);
print_r($a);

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

//ištriname tarpus, HTML žymas ir javascript iš puslapio turinio
$search = array('#<script[^>]*?>.*?</script>#si',
		'#<style[^>]*?>.*?</style>#siU',
		'#<[\/\!]*?[^<>]*?>#si',
		'#<![\s\S]*?--[ \t\n\r]*>#',
		'#\s\s+#'
);
$content = preg_replace($search, '', $page);

//200 simbolių iš puslapio turinio turėtų  pakakti atpažinti kalba
$content = mb_substr($content, 0, 200);

//konvertuojame į UTF-8 koduotę, jei yra kita
if($charset != "UTF-8"){
	$content = iconv($charset, "UTF-8", $content);
}

//parodome tekstą
echo $content."\n";

//kalbos pavadinimas
$l->setNameMode(2);
echo $l->detectSimple($content)."\n";

//pagal tekstą aptiktos panašios kalbos
$result = $l->detect($content, 4);
print_r($result);

//Unicode blokų paskirstymas
$blocks = $l->detectUnicodeBlocks($content, true);
print_r($blocks);

Atsakymas:

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
)

Parsisiųsti teksto kalbos atpažinimo programinį kodą.

Šis įrašas buvo paskelbtas kategorijoje Programavimas su žyma , . Įrašykite į adresyną nuolatinę nuorodą.

Parašykite komentarą

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *