10
votes

Comment triez-vous les personnages CJK (asiatiques) à Perl ou avec tout autre langage de programmation?

Comment pouvez-vous trier les caractères chinois, japonais et coréens (CJK) à Perl?

Autant que je puisse dire, trier les caractères CJK par le nombre de traitements, puis par radical, semble être la façon dont ces langues sont triées. Il existe également des méthodes qui trient par sons, mais cela semble moins courant.

J'ai essayé d'utiliser: xxx

et j'ai essayé d'utiliser Unicode :: Assembler de CPAN, mais il dit:

Par défaut, les idéognes unifiées CJK sont Commandé dans Unicode CodePoint Command ...

Si je pouvais obtenir une base de données du nombre d'accidents vasculaires cérébraux par caractère, je pourrais facilement trier tous les caractères, mais cela ne semble pas venir avec Perl ni encapsulé dans un module que je pouvais trouver. < / p>

Si vous savez comment trier le CJK dans d'autres langues, il serait utile de le mentionner dans une réponse à cette question.


2 commentaires

C'est une question stupide. "Comment triez-vous des mots chinois?" ou "Comment triez-vous les mots coréens?" aurait un sens, mais "Comment pouvez-vous trier les caractères CJK?" n'a aucun sens.


Cela est parfaitement logique, car dans la plupart des charmisss qui soutiennent de multiples langues asiatiques, chinois, japonais et coréens sont regroupés dans "CJK".


3 Réponses :


4
votes

voir TR38 pour les détails sales et les cas d'angle. Ce n'est pas aussi facile que vous le pensez et car cet échantillon de code ressemble à.

use 5.010;
use utf8;
use Encode;
use Unicode::Unihan;
my $u = Unicode::Unihan->new;

say encode_utf8 sprintf "Character $_ has the radical #%s and %d residual strokes." , split /[.]/, $u->RSUnicode($_) for qw(工 然 一 人 三 古 二);
__END__
Character å·¥ has the radical #48 and 0 residual strokes.
Character 然 has the radical #86 and 8 residual strokes.
Character 一 has the radical #1 and 0 residual strokes.
Character 人 has the radical #9 and 0 residual strokes.
Character 三 has the radical #1 and 2 residual strokes.
Character 古 has the radical #30 and 2 residual strokes.
Character 二 has the radical #7 and 0 residual strokes.


7 commentaires

Savez-vous comment utiliser le module Unicode :: Assembler? Savez-vous spécifiquement comment transmettre un sous {} en tant que paramètre OffriDecJK, et faites-la effectivement exécuter quand Unicode :: Collate-> Trier () est exécuté? Je pourrais utiliser Unicode :: Unihan pour obtenir le nombre de traits et des informations radicales pour trier réellement les caractères, mais la fonction Nourillecjk n'exécute pas.


Non, mais vous pouvez Ouvrir une nouvelle question pour ce sujet.


Considérant à quel point la question est idiote, une réponse aussi stupide que celle-ci mérite d'être acceptée. Il n'y a pas de sens à la notion de "trier des caractères CJK".


La plus grande partie de la question concerne le tri par le nombre d'accidents vasculaires cérébraux, ce qui est facilement atteint. Ne me fais pas appeler toi un imbécile.


@DAXIM: Avez-vous un exemple spécifique d'où quelqu'un a besoin ou aurait déjà besoin de trier les caractères chinois sans tenir compte de la langue sous-jacente? C'est une question idiote et une réponse idiote.


@Kinopiko: Je voulais dire "trier des phrases CJK", que vous devez faire dans les mêmes situations lorsque vous triez les phrases anglaises, telles que l'indice d'un livre, ou chaque fois que vous souhaitez écrire une liste dans laquelle les gens peuvent trouver des choses. Cependant, pour trier une phrase dont vous avez besoin pour les premiers caractères de tri.


@Neil: Si vous voulez trier les phrases japonaises, il y a une réponse à cela. Si vous voulez trier les phrases chinoises, c'est une autre question. Si vous voulez trier les phrases coréennes, c'est une autre question. Mais il n'y a pas de "trier des phrases CJK" - cela ne signifie rien pour trier les mots de trois langues différentes.



2
votes

Un répertoire japonais est trié sur une base phonétique (Gojã »sur la collation). Cependant, l'ordre de caractère Kanji n'est pas basé sur la phonétique, que ce soit dans Unicode, JIS, S-JIS ou EUC. Seul Kana est basé sur l'ordre phonétique. Cela signifie que vous ne pouvez pas rassembler de manière significative sans conversion phonétique!

Par exemple: xxx

avec b) ou c), vous pouvez faire un type significatif. Mais vous ne pouvez pas faire avec seulement a). Bien sûr, vous pouvez exécuter la fonction de tri simple, mais ce n'est pas significatif pour le japonais.


2 commentaires

Cela répond à une question sainée: «Comment pouvez-vous trier les mots japonais?», Mais cela ne répond pas à la question qui a été posée, donc je ne peux donc pas la faire uppoter.


@Kinopiko: Yah, je dois être d'accord avec vous. La question originale n'est pas bonne.



2
votes

Consultez mon rubygem Topinyin, qui convertira un caractère chinois codé UTF-8 à leur pinyin (prononciation). Et puis, une sorte pourrait être faite sur la pinyine facilement.

Simplement, GEM Installez Topinyin CODE> P>

require 'toPinyin'

words = "
人
没有
理想
è·Ÿ
咸鱼
有
什么
区别
".split("\n")

words.sort! {|a ,b|   a.pinyin.join <=> b.pinyin.join }


2 commentaires

Comment avez-vous reçu les données pour cela?


Je ne sais pas pour Ruby, mais pour Python, c'est aussi simple que Github.com/avian2/Unidecode