鉴于已知为中文并以UTF-8编码的文本块,有没有办法确定它是简体还是传统?
答案 0 :(得分:4)
我不知道这是否有效,但我尝试使用iconv查看它是否会在字符集之间正确转换,比较来自// TRANSLIT和// IGNORE的同一转换的结果。如果两个结果匹配,那么charset转换没有遇到任何无法翻译的字符,所以你应该匹配。
$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';
}
}
答案 1 :(得分:0)
由于big5
和gb2312
省略了Unicode中存在的一些常用变体,因此代码依赖于translit
和ignore
模式之间的完全匹配会失败在相当多的正常使用案例中:尽管説話
是説
在說
中使用的big5
常见变体,但它无法将$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';
标识为繁体中文
一个简单的解决方法是以模糊方式进行:
import scipy.stats as ss
list1 = []
list2 = []
for x in range(0, 10):
list1.append(ss.exponweib.pdf(x, a=1, c=2.09, scale=10.895, loc=0))
list2.append(ss.weibull_min.pdf(x, c=2.09, loc=0, scale=10.895))
if list1[x]-list2[x] < .000000001:
list1[x]=list2[x]
if list1 == list2:
print("true")
print(ss.distributions.weibull_min.fit(list1, floc=0))
print(ss.distributions.weibull_min.fit(list1, loc=0))
print(ss.distributions.weibull_min.fit(list1, floc=0))
print(ss.distributions.exponweib.fit(list1, 1,1))
print(ss.distributions.exponweib.fit(list1, floc=0, f0=1))
print(ss.distributions.exponweib.fit(list1, floc=0, a=1, f0=1))