Puisqu'il est devenu nécessaire de convertir un grand nombre de noms (Furigana) en Romaji, j'ai cherché un tel bijou, mais il y en avait un qui convertissait des phrases générales en Romaji (Exemple: [Romaji](https: //) github.com/makimoto/romaji)) Mais je n'ai rien trouvé de spécialisé dans "nom", alors je l'ai fait moi-même.
Avec lui, vous pouvez correctement convertir 99% de vos noms en Romaji!
… Au fait, «Spécialisé en« nom »? Romaji est la même chose pour les phrases et les noms ordinaires, n'est-ce pas? "" 99% nom "? Certains d'entre vous ont peut-être pensé: «Convertissez les Romaji à 100% avec précision».
Cependant, quand je l'ai recherché, le monde des personnages romains était assez sombre ...
La seule fois où vous avez besoin de votre nom Romaji est de demander un passeport. Le ministère des Affaires étrangères a expliqué la notation dans la demande de passeport, mais d'après cela, il semble que des règles légèrement différentes des caractères romains généraux soient adoptées.
Je vais faire une conversion basée sur cette règle.
Je vais expliquer en utilisant le code suivant que j'ai écrit. [^ 1]
[^ 1]: En fait, avant cela, la conversion de code de caractère et la conversion hiragana → katakana sont entrées.
kana.gsub(/(?<=[Okosotonohomoyorowogozodobopoyo])Oh\z/){ "o" }
.gsub(/(?<=[Oto])Oh/){ oh ? "h" : "" }
.gsub(/(?<=[Okosotonohomoyorowogozodobopoyo])C/){ oh ? "h" : "" }
.gsub(/(?<=[Ukustunufumyurvuguzuzubupu])C/){ "" }
.gsub(/[UNE-Vu-\-][UNEィゥェォャュョ]?/, ConversionTable)
.gsub(/Tsu(.)/){ ($1 == "c" ? "t" : $1) + $1 }
.gsub(/n(?=[bmp])/){ "m" }
La conversion Romaji n'a besoin que de convertir "a" en "a", "ka" en "kya", et ainsi de suite, un caractère à la fois (mais deux caractères s'il est suivi d'un petit waieuyo). ..
Dans le code ci-dessus, c'est la pièce.
.gsub(/[UNE-Vu-\-][UNEィゥェォャュョ]?/, ConversionTable)
Un ConversionTable est un tableau associatif contenant les règles de conversion de base entre Katakana et Romaji, telles que {" a "=>" a ", ...}
. De plus, comme "tsu" sera converti ultérieurement par une autre méthode, il n'est pas converti ici en tant que {...," tsu "=>" tsu "}
.
Fondamentalement, "n" doit être converti en "n", sauf qu'il est supposé être converti en "m" avant "b, m, p". Le traitement est effectué dans la partie suivante.
.gsub(/n(?=[bmp])/){ "m" }
Fondamentalement, "tsu" doit être converti en cette dernière consonne, à l'exception de "chi, cha, chu, cho", qui doit être converti en "t". Cependant, en Romaji, il n'y a rien qui commence par "c" autre que les quatre premiers, il suffit donc de vérifier uniquement si le dos est "c". La partie suivante effectue ce traitement.
.gsub(/Tsu(.)/){ ($1 == "c" ? "t" : $1) + $1 }
... Au fait, il n'y a pas de noms qui se terminent par "tsu" ou de noms qui ont une voyelle après "tsu" ...
Comme pour les notes longues, les longues notes de «o» et «u» ne sont pas écrites en principe. [^ 2] En d'autres termes, les noms tels que "Oono", "Kouta" et "Hyuga" sont "ono", "kota" et "hyuga".
[^ 2]: Au fait, le son long de "i" comme "Niina (nouveau légume)" est écrit, mais le son long de "-" comme "Nina" est écrit même s'il est phonétiquement le même. Non.
Cependant, il y a des exceptions, et le "o" à la fin (comme "Senoo") devient "oo". Le traitement est effectué dans la partie suivante.
kana.gsub(/(?<=[Okosotonohomoyorowogozodobopoyo])Oh\z/){ "o" } #Traitement des exceptions à la fin
.gsub(/(?<=[Oto])Oh/){ oh ? "h" : "" } # oOh
.gsub(/(?<=[Okosotonohomoyorowogozodobopoyo])C/){ oh ? "h" : "" } # oC
.gsub(/(?<=[Ukustunufumyurvuguzuzubupu])C/){ "" } # uC
Au fait, il semble qu'il soit permis d'écrire "oh" pour "o o" et "o u", donc je permet de basculer entre eux en option.
"Y a-t-il quelque chose qui ne va pas avec" o "? ], C'est tranchant. Cela sera expliqué plus tard.
C'est tout pour les règles écrites dans les documents précédents du ministère des Affaires étrangères. Je suis sûr que certains d'entre vous ont peut-être pensé: "Quelle chose facile à faire".
Cependant, le problème est le "ton long" mentionné précédemment. Si c'est "long", suivez simplement les règles ci-dessus.
Mais avant cela, nous devons juger s'il s'agit d'une note longue ou non. De là, c'est le royaume des ténèbres ...
"O o", "o u" et "u u" doivent être effacés uniformément en "o, u" à l'exception de la fin, mais "o o" et "o" Il peut y avoir des cas où la forme de "u" ou "u" n'est pas une longue note.
Par exemple, "Hirooka (Hirooka)", "Kouchiwa (fan de petit groupe)", "Matsuura (Matsuura)". [^ 3] Ceux-ci incluent "o o", "o u" et "u u", mais ils sont divisés comme "hiro" + "oka" et ne sont pas étendus à "low". , Et cela devient "hirooka".
[^ 3]: Les deux autres que "Hirooka" sont tirés de l'exemple du Saitama Prefecture Passport Center.
C'est une histoire relativement simple pour les humains de voir des kanji, mais comment une machine peut-elle juger cela ...
Comme je l'ai écrit ci-dessus, il est relativement facile pour les humains de voir "Kanji". Donc, si vous n'avez que Frigana, y a-t-il un moyen de prendre une décision définitive?
… Malheureusement, je ne pense pas que ce soit possible. Par exemple, le "petit ventilateur" précédemment écrit est "ko" + "uchiwa", donc ce n'est pas un son long, mais disons que vous avez un nom de famille qui lit "kochiwa" en écrivant "Kochiwa". [^ 4] Même avec le même "kochiwa", le premier doit être converti en "kouchiwa" et le second en "kochiwa". En d'autres termes, il est impossible de s'en occuper uniquement avec kana.
[^ 4]: "Kodansen" semble être un vrai nom de famille, mais "Kochiwa" est un nom de famille fait pour l'explication et je ne sais pas s'il existe réellement.
Alors, que diriez-vous de donner non seulement des données kana mais aussi des kanji? Ayez la lecture générale des kanji comme données, et vérifiez quelle partie de kana correspond à quel kanji, comme "Matsuura" + "Matsuura" → "Matsuura (Ura)". , Convertir pour chaque kanji ... Ensuite, l'exemple ci-dessus semble fonctionner. (Cela semble être très gênant ...)
Cependant, dans les documents du Ministère des affaires étrangères, il y a un exemple du nom de famille "Misono (Mizonosei)". Je pense que c'est "Mien (Sono) étudiant (U)", mais en lettres romaines, c'est "misono". ** Que voulez-vous dire! ** **
En premier lieu, j'estime qu'il n'y a que deux types de «o-o» à long son, «o-o (grand, etc.)» et «trop (loin)». Par conséquent, comme indiqué ci-dessous, il semble que le nombre de noms pouvant être pris en charge puisse être augmenté en appliquant la règle «o-o» uniquement à «o-o» et «too».
.gsub(/(?<=[Oto])Oh/){ oh ? "h" : "" } # oOh
Mais s'il y avait un nom comme "Hitooka", cela ne fonctionnerait pas.
C'est pourquoi j'ai abandonné ces noms et décidé d'être satisfait du taux de conversion de 99%. Si vous visez un taux de conversion plus élevé, je pense qu'il est tout à fait réaliste de disposer des données du nom de famille difficile à convertir et de le convertir exceptionnellement. Nous attendons le défi de ceux qui sont prêts à regarder dans les ténèbres.
Recommended Posts