PHP, bir dize dilini algılamak için bir yolu var mı? Dize UTF-8 biçiminde olduğunu varsayalım.
Sen karakter türünden dili algılayamaz. Ve bunu yapmak için hiçbir kusursuz yolu vardır.
Herhangi bir yöntemle, sadece eğitimli bir tahmin yapıyoruz. Ilgili bazı matematik orada articles mevcut bulunmaktadır
Ben bazı makul sonuçları ile Text_LanguageDetect pear package kullandım. Bu ölü kullanımı basit ve mütevazı bir 52 dil veritabanına sahiptir. Dezavantajı Doğu Asya dillerinden bir algılama olduğunu.
require_once 'Text/LanguageDetect.php';
$l = new Text_LanguageDetect();
$result = $l->detect($text, 4);
if (PEAR::isError($result)) {
echo $result->getMessage();
} else {
print_r($result);
}
in sonuçları:
Array
(
[german] => 0.407037037037
[dutch] => 0.288065843621
[english] => 0.283333333333
[danish] => 0.234526748971
)
Sen Google's AJAX Language API ile tamamen istemci tarafında yapabilirdi.
AJAX Language API ile, çevirebilir ve sadece JavaScript kullanarak bir web sayfası içinde metin blokları dilini algılar. Buna ek olarak, web sayfasında herhangi bir metin alanına veya textarea üzerinde çevirisini etkinleştirebilirsiniz. Eğer Hintçe transliterating olsaydı Örneğin, bu API kullanıcıların fonetik İngilizce kullanarak Hintçe kelimeleri heceleyerek ve onları Hintçe komut görünmesini sağlayacaktır.
Otomatik olarak bir dize dilini algılayabilir
var text = "¿Dónde está el baño?";
google.language.detect(text, function(result) {
if (!result.error) {
var language = 'unknown';
for (l in google.language.Languages) {
if (google.language.Languages[l] == result.language) {
language = l;
break;
}
}
var container = document.getElementById("detection");
container.innerHTML = text + " is: " + language + "";
}
});
Ve supported languages birinde yazılmış herhangi bir dize çevirmek
google.language.translate("Hello world", "en", "es", function(result) {
if (!result.error) {
var container = document.getElementById("translation");
container.innerHTML = result.translation;
}
});
Servis Lnag kimliği API http://langid.net/identify-language-from-api.html kullanabilirsiniz
Muhtemelen dili gerekirse and çevirmek algılamak için Google Translate API kullanabilirsiniz.
Ben bu eski bir yazı olduğunu biliyorum, ama burada herhangi bir geçerli çözüm bulduktan sonra geliştirilen budur.
Çözelti bir dilde 20 en sık kullanılan sözcükleri kullanır, samanlıkta olanların oluşumları sayar. Daha sonra, sadece, birinci ve ikinci dillerin en sayılır sayılarını karşılaştırır. Runner-up numarası kazanan az% 10 olması durumunda, kazanan hepsini alır.
Kod - hızlı iyileştirme için herhangi bir öneriniz karşılama daha vardır!
function getTextLanguage($text, $default) {
$supported_languages = array(
'en',
'de',
);
// German word list
// from http://wortschatz.uni-leipzig.de/Papers/top100de.txt
$wordList['de'] = array ('der', 'die', 'und', 'in', 'den', 'von',
'zu', 'das', 'mit', 'sich', 'des', 'auf', 'für', 'ist', 'im',
'dem', 'nicht', 'ein', 'Die', 'eine');
// English word list
// from http://en.wikipedia.org/wiki/Most_common_words_in_English
$wordList['en'] = array ('the', 'be', 'to', 'of', 'and', 'a', 'in',
'that', 'have', 'I', 'it', 'for', 'not', 'on', 'with', 'he',
'as', 'you', 'do', 'at');
// clean out the input string - note we don't have any non-ASCII
// characters in the word lists... change this if it is not the
// case in your language wordlists!
$text = preg_replace("/[^A-Za-z]/", ' ', $text);
// count the occurrences of the most frequent words
foreach ($supported_languages as $language) {
$counter[$language]=0;
}
for ($i = 0; $i < 20; $i++) {
foreach ($supported_languages as $language) {
$counter[$language] = $counter[$language] +
// I believe this is way faster than fancy RegEx solutions
substr_count($text, ' ' .$wordList[$language][$i] . ' ');;
}
}
// get max counter value
// from http://stackoverflow.com/a/1461363
$max = max($counter);
$maxs = array_keys($counter, $max);
// if there are two winners - fall back to default!
if (count($maxs) == 1) {
$winner = $maxs[0];
$second = 0;
// get runner-up (second place)
foreach ($supported_languages as $language) {
if ($language <> $winner) {
if ($counter[$language]>$second) {
$second = $counter[$language];
}
}
}
// apply arbitrary threshold of 10%
if (($second / $max) < 0.1) {
return $winner;
}
}
return $default;
}
Bir yaklaşım kelimeleri içine girdi dizesi kırmak ve daha sonra mevcut onlardan kaç görmek için bir İngilizce Sözlük bu kelimeleri aramak için olabilir. Bu yaklaşım birkaç sınırlamaları vardır:
Belki de bu dil tahminci için dize gönderin:
http://www.xrce.xerox.com/competencies/content-analysis/tools/guesser
Çeşitli dillerden belgeleri almak ve Unicode karşı başvurur. Eğer o zaman kullanılan sadece unicode karakterler tarafından hangi dil belirlemek için bazı bayesian akıl kullanabilirsiniz. Bu İngilizce veya Rusça Fransızca'yı ayırmak olacaktır.
Ben tam olarak (benzer bir olasılıklı yaklaşım kullanarak) dilini belirlemek için dil sözlüklerde kelime arama dışında yapılabileceğini başka ne emin değilim.
Sen how to detect language for a string in php Text_LanguageDetect Armut Paketi kullanarak veya düzenli bir php kütüphane gibi ayrı ayrı kullanmak indirmeden görebilirsiniz.