Diviser le japonais (katakana) en syllabes [Python]

introduction

J'ai créé une fonction python qui divise le japonais (chaîne de caractères katakana) en unités syllabiques (division syllabique).

Texte original Fraction Mora Segmentation de phrase
Gakkyu Shinbun Géorgie/Tsu/Kyu/-/Shi/Vers le bas/Bu/Vers le bas GéorgieTsu/Kyu-/ShiVers le bas/BuVers le bas
Outburn UNE/C/À/Ba/-/Vers le bas UNE/C/À/Ba-Vers le bas

Mora et syllabes sont des unités de division typiques de la phonologie japonaise. Mora est un délimiteur lors du comptage des soi-disant «5, 7, 5» dans le haïku, et les sons longs (-), les sons d'incitation (tsu) et le répulsif sonore (n) sont également comptés comme un battement. Par contre, dans les syllabes, les notes longues, les sons incitatifs et les sons répulsifs ne sont pas comptés individuellement, mais sont considérés comme un battement avec le kana qui peut être une seule syllabe juste avant. Si un son long, un son incitatif et une répulsion sonore sont continus comme "brûler", le nombre de mora de 3 ou plus devient une syllabe. Voir Mora-Wikipedia pour plus de détails.

Dans cet article, nous expliquerons comment écrire en unités syllabiques. La division par mora est expliquée ci-dessous. Séparer le japonais (katakana) en unités mora [Python]

environnement

politique

Pour faciliter la réflexion, l'entrée doit être une chaîne katakana pleine largeur qui n'inclut pas de symboles. De plus, on suppose que la partie qui peut être exprimée en son long est convertie en son long. Cela signifie que, par exemple, "Gakukyu" est exprimé par "Gakukyu". Veuillez vous référer à Article séparé pour savoir comment convertir des phrases mixtes kanji-kana en chaînes de caractères de prononciation katakana. Cependant, puisque MeCab est utilisé, les mots qui ne sont pas dans le dictionnaire ne peuvent pas être convertis.

A ce moment, les conditions constitutives des syllabes sont définies comme suit.

[Chaîne de caractères continue (y compris 0 caractère) de 1 à 4 ci-dessous et "- / - n"]

  1. Udan + "a / i / e / o"
  2. Étape (sauf "I") + "Ya / Yu / E / Yo"
  3. "Te / de" + "i / u"
  4. Un caractère kana majuscule autre que celui ci-dessus

c'est

Expressions régulières sens
[Ukusutsunufumyuruguzudubupuvu][Ayeo] Udan + "A/je/E/Oh "
[Ikishini Himirigi Jijibipi][Nyayo] I-dan (sauf "I") + "Ya"/Yu/E/Yo "
[Tedde][Ju] "Te/De "+" i/Yu "
[Aiueoka-Jitsu-Moya Yuyo-Wov] Un caractère kana majuscule autre que ①②③
[Hmm]* "-/Tsu/Chaîne de caractères continue (y compris 0 caractère)

Quand'(①|②|③|④)⑤'Vous pouvez écrire comme ça.

code

import re

#「((Udan + "A/je/E/Oh ")|(I-dan (sauf "I") + "Ya"/Yu/E/Yo ")|("Te/デ」+「je/Yu」)|(Capital kana))("-/Tsu/Chaîne de caractères continue (y compris 0 caractère))Expression régulière
c1 = '[Ukusutsunufumyuruguzudubupuvu][Ayeo]' #Udan + "A/je/E/Oh "
c2 = '[Ikishini Himirigi Jijibipi][Nyayo]' #I-dan (sauf "I") + "Ya"/Yu/E/Yo "
c3 = '[Tedde][Ju]' #"Te/De "+" i/Yu "
c4 = '[Aiueoka-Jitsu-Moya Yuyo-Wov]' #Capital kana
c5 = '[Hmm]*' #"-/Tsu/Chaîne de caractères continue (y compris 0 caractère)

cond = '(?:'+c1+'|'+c2+'|'+c3+'|'+c4+')'+c5 #(?:)Est des parenthèses pour éviter les références de sous-modèles
cond = '('+cond+')'
re_syllable = re.compile(cond)

def syllableWakachi(kana_text):
    return re_syllable.findall(kana_text)

text = 'Spectacle de Shinshun Shanson'
print(text)
print(syllableWakachi(text))
print('')

text = 'Tokyo Tokyo'
print(text)
print(syllableWakachi(text))
print('')

text = 'Outburn'
print(text)
print(syllableWakachi(text))
print('')

text = 'Gakkyu Hokai'
print(text)
print(syllableWakachi(text))

La sortie est ci-dessous.

Spectacle de Shinshun Shanson
['Tibia', 'Éviter', 'Shan', 'Fils', 'spectacle']

Tokyo Tokyo
['doigt de pied', 'Kyo', 'Tot', 'Kyo', 'Kyo', 'Puissance', 'Kyo', 'Ku']

Outburn
['UNE', 'C', 'À', 'Brûler']

Gakkyu Hokai
['Intestin', 'Kyu', 'C', 'E', 'C', 'Puissance', 'je']

Recommended Posts

Diviser le japonais (katakana) en syllabes [Python]
Divisez les données en unités de type projet avec Django (2)
Divisez les données en unités de type projet avec Django (3)
[Python] Mémo pour traduire Matplotlib en japonais [Windows]
Divisez les données en unités de type projet avec Django
[Python] Divisez les albums de Switch en dossiers par jeu
Essayez de traduire le manuel de science des données Python en japonais
Liste des erreurs Python (japonais)
Transformez le japonais en caractères romains
Sortie japonaise avec Python
python Paramètre japonais respectueux de l'environnement