Çince olduğu bilinen ve UTF-8 olarak kodlanmış bir metin bloğu verildiğinde, Basitleştirilmiş veya Geleneksel olup olmadığını belirlemenin bir yolu var mı?Geleneksel Çince Karşılıklı olarak Metin Tanıma
6
A
cevap
3
Bunun işe yarayıp yaramayacağını bilmiyorum, ancak aynı dönüştürmeden elde edilen sonuçları // TRANSLIT ve // IGNORE ile karşılaştırarak, karakter kümeleri arasında doğru bir çeviri olup olmadığını görmek için iconv kullanmayı denedim. İki sonuç eşleşirse, karakter dizisi dönüşümü, çevrilemeyen herhangi bir karakterle karşılaştıramadı, bu nedenle bir eşleşmeniz gerekir. big5
ve gb2312
yana
$test1 = iconv("UTF-8", "big5//TRANSLIT", $text);
$test2 = iconv("UTF-8", "big5//IGNORE", $text);
if ($test1 == $test2) {
echo 'traditional';
} else {
$test3 = iconv("UTF-8", "gb2312//TRANSLIT", $text);
$test4 = iconv("UTF-8", "gb2312//IGNORE", $text);
if ($test3 == $test4) {
echo 'simplified';
} else {
echo 'Failed to match either traditional or simplified';
}
}
0
Unicode'da, kod, normal kullanım durumları oldukça çok başarısız olur translit
ve ignore
modları arasında tam eşlemesi itimat mevcut epeyce yaygın olarak kullanılan varyantları ihmal: başarısız olur 説話
, 説
, 說
içiniçin kullanılan bir ortak varyant olmasına rağmen Geleneksel Çince olarak tanımlamak için.
Basit düzeltme bulanık bir şekilde yapmaktır:
$test1 = iconv("UTF-8", "big5//IGNORE", $text);
$test2 = iconv("UTF-8", "gb2312//IGNORE", $text);
$len1 = mb_strlen($test1);
$len2 = mb_strlen($test2);
$len0 = mb_strlen($text) * 0.8; // threshold
if ($len1 > $len2 && $len1 > $len0) {
return 'Likely Traditional';
}
if ($len2 > $len1 && $len2 > $len0) {
return 'Likely Simplified';
}
return 'Could not identify';
İlginç, teşekkürler! Çok fazla metin "ne" olarak geri dönüyor olsa da, kesinlikle çalışıyor gibi görünüyor (örnek: "聲音 鳥 樹葉 話 説話 細 又 輕 蝴蝶 請 只有 和 得 聼 得到 蜜蜂"). Herhangi bir fikir? Ayrıca hataları bastırmak için 2 'TRANSLIT' çağrısı için' iconv' yapmak zorunda kaldım. – philfreo
Temel GB-2312'de olmayan, ancak GB-18030'da bulunan bazı z-varyant karakterleriniz var. "Gb2312" yerine "gb18030" yi deneyin. Veya girişiniz Windows yönelimli ise, '' cp936 '' (ve '' big5 '' yerine '' cp950 '') tercih edebilirsiniz. – bobince
"gb18030" ile değiştirdim ve tüm test verilerim tanınıyor. (Ancak doğruluktan emin olamaz). Teşekkürler! – philfreo