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ą.