Choć koreański nie używa dużo sinograms [漢字/Kanji] więcej, wciąż pojawiają się czasami. Niektóre japońskie sinogramy są wyłącznie japońskie, takie jak 竜, ale wiele z nich jest identycznych z uproszczonym chińskim lub tradycyjnym. Więc utknąłeś w pewnym sensie. Więc musisz spojrzeć na pełne zdanie, jeśli masz jakieś znaki "Han". Jeśli ma jakieś hiragana/katakana + kanji, prawdopodobieństwo jest bardzo wysokie, to jest japoński. Podobnie, kilka sylab i kilka sinogramów powie ci, że zdanie jest po koreańsku.
Następnie, jeśli są to wszystkie znaki Han, np. Chiński, można sprawdzić, czy niektóre znaki są uproszczone: kZVariant oznacza uproszczony chiński znak. Oh, i kSpecializedSemanticVariant jest bardzo często używany dla japońskich znaków specjalnych.内 i 內 mogą wyglądać tak samo, ale pierwszy z nich to japoński, drugi tradycyjny chiński i koreański (koreański używa tradycyjnie chińskiego jako standardu).
Mam kod gdzieś, który zwraca, dla jednego codepoint, nazwę skryptu. To mogłoby pomóc. Przejdziesz przez zdanie i zobaczysz, co zostało na końcu. Podam gdzieś kod.
EDIT: kod
http://pastebin.com/e276zn6y
W odpowiedzi na komentarz poniżej:
Funkcja ta powyżej jest zbudowany na podstawie danych dostarczonych przez Unicode.org ... Chociaż nie będąc ekspertem per se, trochę przyczyniłem się do bazy danych Unihan - i zdarzyło mi się mówić CJK. Tak, wszystkie 3. Mam trochę kodu, który wykorzystuje właściwości kXXX
w bazie danych Unihan, ale A/I nie wiedziałem, że powinniśmy napisać kod dla OP, a B/wymaga to logistyki, która może wykracza poza to, co OP jest gotowe do wdrożenia. Moja rada stoi. Za pomocą powyższej funkcji przeprowadź jedno pełne zdanie. Jeśli wszystkie punkty kodowe to "Han" (lub "Han" + "łacina"), istnieje duże prawdopodobieństwo, że jest to chiński. Jeśli z drugiej strony wynik jest mieszanką "Han" + "Hangul" (prawdopodobnie "łaciński"), nie możesz pomylić się z koreańskim. Podobnie, mix "Han" i "Katakana"/"Hiragana" masz japoński.
szybki test
Część kodu należy stosować użyciu funkcji związanych z wcześniej.
function guessLanguage(x) {
var results={};
var s='';
var i,j=x.length;
for(i=0;i<j;i++) {
s=scriptName(x.substr(i,1));
if(results.hasOwnProperty(s)) {
results[s]+=1;
} else {
results[s]=1;
}
}
console.log(results);
mostCount=0;
mostName='';
for(x in results) {
if (results.hasOwnProperty(x)) {
if(results[x]>mostCount) {
mostCount=results[x];
mostName=x;
}
}
}
return mostName;
}
Niektóre testy:
r=guessLanguage("外人だけど、日本語をペラペラしゃべるよ!");
Object
Common: 2
Han: 5
Hiragana: 9
Katakana: 4
__proto__: Object
"Hiragana"
Przedmiotem r
zawiera liczbę wystąpień każdego skryptu. Hiragana jest najczęstsza, a Hiragana + Katakana -> 2/3 zdania.
r=guessLanguage("我唔知道,佢講乜話.")
Object
Common: 2
Han: 8
__proto__: Object
"Han"
Oczywisty przypadek Chińczyków (w tym przypadku kantoński).
r=guessLanguage("中國이 韓國보다 훨씬 크지만, 꼭 아름다운 나라가 아니다...");
Object
Common: 11
Han: 4
Hangul: 19
__proto__: Object
"Hangul"
Niektóre postacie Han, a także wiele hangulów. Pewnie koreańskie zdanie.
Jak ustalić, czy dana postać jest chińska czy japońska? Dzielą wiele postaci. – Daenyth
Jeśli w trzech językach nie ma miejsca w Unicode, to uprość moje pytanie, aby zaznaczyć wszystko od CJK do '\ language [cn] {*}'. – Village
To jest bardziej skomplikowane. Trzy języki udostępniają znaki (kod numeryczny), ale niekoniecznie glif (graficzna reprezentacja postaci). Spójrz na FAQ Unicode CJK http://unicode.org/faq/han_cjk.htm – mirod