Da es notwendig wurde, eine große Anzahl von Namen (Furigana) in Romaji umzuwandeln, suchte ich nach einem solchen Juwel, aber es gab einen, der allgemeine Sätze in Romaji umwandelte (Beispiel: [Romaji](https: //) github.com/makimoto/romaji)) Aber ich konnte nichts finden, das sich auf "Name" spezialisiert hat, also habe ich es selbst gemacht.
Damit können Sie 99% Ihrer Namen ordnungsgemäß in Romaji konvertieren!
… Übrigens „Spezialisiert auf„ Namen “? Romaji ist dasselbe für gewöhnliche Sätze und Namen, nicht wahr? "99% Name"? Einige von Ihnen haben vielleicht gedacht: "Konvertieren Sie Romaji 100% genau."
Als ich es jedoch nachschlug, war die Welt der römischen Schriftzeichen ziemlich dunkel ...
Das einzige Mal, wenn Sie Ihren Romaji-Namen benötigen, ist die Beantragung eines Reisepasses. Das Außenministerium hat die Notation im Passantrag erläutert, aber demnach scheint es, dass Regeln angenommen werden, die sich geringfügig von den allgemeinen römischen Schriftzeichen unterscheiden.
Ich werde eine Konvertierung basierend auf dieser Regel vornehmen.
Ich werde es mit dem folgenden Code erklären, den ich geschrieben habe. [^ 1]
[^ 1]: Tatsächlich werden vorher die Zeichencodekonvertierung und die Hiragana → Katakana-Konvertierung eingegeben.
kana.gsub(/(?<=[Okosotonohomoyorowogozodobopoyo])Oh\z/){ "o" }
.gsub(/(?<=[Oto])Oh/){ oh ? "h" : "" }
.gsub(/(?<=[Okosotonohomoyorowogozodobopoyo])C./){ oh ? "h" : "" }
.gsub(/(?<=[Ukustunufumyurvuguzuzubupu])C./){ "" }
.gsub(/[EIN-Vu-\-][EINィゥェォャュョ]?/, ConversionTable)
.gsub(/Tsu(.)/){ ($1 == "c" ? "t" : $1) + $1 }
.gsub(/n(?=[bmp])/){ "m" }
Die Romaji-Konvertierung erfordert grundsätzlich die Konvertierung von "a" in "a", "ka" in "kya" usw., jeweils ein Zeichen nach dem anderen (jedoch zwei Zeichen, wenn ein kleines Waieuyo folgt). ..
Im obigen Code ist dies der Teil.
.gsub(/[EIN-Vu-\-][EINィゥェォャュョ]?/, ConversionTable)
Eine ConversionTable ist ein assoziatives Array, das die grundlegenden Konvertierungsregeln zwischen Katakana und Romaji enthält, z. B. "{" a "=>" a ", ...}". Da "tsu" später durch eine andere Methode konvertiert wird, wird es hier nicht als "{...," tsu "=>" tsu "}" konvertiert.
Grundsätzlich sollte "n" in "n" konvertiert werden, außer dass es vor "b, m, p" in "m" konvertiert werden soll. Die Verarbeitung erfolgt im folgenden Teil.
.gsub(/n(?=[bmp])/){ "m" }
Grundsätzlich sollte "tsu" in den letzteren Konsonanten konvertiert werden, mit Ausnahme von "chi, cha, chu, cho", das in "t" konvertiert werden soll. In Romaji gibt es jedoch nichts, was mit "c" beginnt, außer den ersten vier. Es reicht also aus, nur zu überprüfen, ob die Rückseite "c" ist. Der folgende Teil führt diese Verarbeitung durch.
.gsub(/Tsu(.)/){ ($1 == "c" ? "t" : $1) + $1 }
... Übrigens gibt es keine Namen, die mit "tsu" enden oder Namen, die nach "tsu" einen Vokal haben ...
Bei langen Noten sind die langen Noten von "o" und "u" grundsätzlich nicht geschrieben. [^ 2] Mit anderen Worten, die Namen wie "Oono", "Kouta" und "Hyuga" sind "ono", "kota" und "hyuga".
[^ 2]: Übrigens wird der lange Ton von "i" wie "Niina (neues Gemüse)" geschrieben, aber der lange Ton von "-" wie "Nina" wird geschrieben, auch wenn er phonetisch gleich ist. Nein.
Es gibt jedoch Ausnahmen und das nachfolgende "o" (wie "Senoo") wird zu "oo". Die Verarbeitung erfolgt im folgenden Teil.
kana.gsub(/(?<=[Okosotonohomoyorowogozodobopoyo])Oh\z/){ "o" } #Ausnahmebehandlung am Ende
.gsub(/(?<=[Oto])Oh/){ oh ? "h" : "" } # oOh
.gsub(/(?<=[Okosotonohomoyorowogozodobopoyo])C./){ oh ? "h" : "" } # oC.
.gsub(/(?<=[Ukusutsunufumyurvuguzuzubupu])C./){ "" } # uC.
Übrigens scheint es erlaubt zu sein, "oh" für "o o" und "o u" zu schreiben, also mache ich es möglich, als Option zwischen ihnen zu wechseln.
"Stimmt etwas nicht mit" o "? ], Es ist scharf. Dies wird später erklärt.
Das ist alles für die Regeln, die in den vorherigen Materialien des Außenministeriums geschrieben wurden. Ich bin sicher, einige von Ihnen haben vielleicht gedacht: "Was für eine einfache Sache."
Das Problem ist jedoch der zuvor erwähnte "lange Ton". Wenn es sich um eine "lange Notiz" handelt, befolgen Sie einfach die obigen Regeln.
Aber vorher müssen wir ein Urteil darüber fällen, ob es sich um eine lange Notiz handelt oder nicht. Von hier aus ist das Reich der Dunkelheit ...
"O o", "o u" und "u u" sollten mit Ausnahme des Endes einheitlich auf "o, u" gelöscht werden, aber "o o" und "o" Es kann Fälle geben, in denen die Form von "u" oder "u" keine lange Note ist.
Zum Beispiel "Hirooka (Hirooka)", "Kouchiwa (Fan einer kleinen Gruppe)", "Matsuura (Matsuura)". [^ 3] Dazu gehören "o o", "o u" und "u u", aber sie sind wie "hiro" + "oka" unterteilt und werden nicht auf "niedrig" erweitert. Und es wird "Hirooka".
[^ 3]: Die beiden anderen als "Hirooka" stammen aus dem Beispiel des Saitama Prefecture Passport Center.
Es ist eine relativ einfache Geschichte für Menschen, Kanji zu sehen, aber wie kann eine Maschine dies beurteilen?
Wie ich oben geschrieben habe, ist es für Menschen relativ einfach, "Kanji" zu sehen. Wenn Sie also nur Frigana haben, gibt es eine Möglichkeit, eine endgültige Entscheidung zu treffen?
… Leider denke ich nicht, dass es möglich ist. Zum Beispiel ist der zuvor geschriebene "kleine Fan" "ko" + "uchiwa", es ist also kein langer Ton, aber nehmen wir an, Sie haben einen Nachnamen, der "kochiwa" lautet, indem Sie "Kochiwa" schreiben. [^ 4] Auch mit dem gleichen "Kochiwa" muss das erstere in "kouchiwa" und das letztere in "kochiwa" umgewandelt werden. Mit anderen Worten, es ist unmöglich, nur mit Kana damit umzugehen.
[^ 4]: "Kodansen" scheint ein richtiger Familienname zu sein, aber "Kochiwa" ist ein Familienname, der zur Erklärung gemacht wurde, und ich weiß nicht, ob er tatsächlich existiert.
Wie wäre es dann, nicht nur Kana-, sondern auch Kanji-Daten zu geben? Lesen Sie Kanji allgemein als Daten und überprüfen Sie, welcher Teil von Kana welchem Kanji entspricht, z. B. "Matsuura" + "Matsuura" → "Matsuura (Ura)". , Konvertieren Sie für jedes Kanji ... Dann scheint das obige Beispiel zu funktionieren. (Es scheint sehr lästig zu sein ...)
In den Materialien des Außenministeriums gibt es jedoch ein Beispiel für den Nachnamen "Misono (Mizonosei)". Ich denke, das ist "Mi-en (Sono) Student (U)", aber in römischen Buchstaben ist es "Misono". ** Was meinst du! ** ** **
Erstens habe ich das Gefühl, dass es nur zwei Arten von lang klingendem "o-o" gibt, "o-o (groß usw.)" und "zu (weit)". Wie unten gezeigt, kann daher die Anzahl der Namen, die unterstützt werden können, erhöht werden, indem die "o-o" -Regel nur auf "o-o" und "too" angewendet wird.
.gsub(/(?<=[Oto])Oh/){ oh ? "h" : "" } # oOh
Aber wenn es einen Nachnamen wie "Hitooka" gäbe, würde das nicht funktionieren.
Deshalb habe ich diese Namen aufgegeben und mich entschlossen, mit der Conversion-Rate von 99% zufrieden zu sein. Wenn Sie eine höhere Conversion-Rate anstreben, halte ich es für ziemlich realistisch, die Daten des Nachnamens zu haben, die schwer zu konvertieren sind, und sie ausnahmsweise zu konvertieren. Wir warten auf die Herausforderung derer, die bereit sind, in die Dunkelheit zu schauen.
Recommended Posts