La fonction d'analyse contrainte (analyse partielle) de MeCab est une fonction utilisée lorsque certaines informations morphologiques d'une phrase sont connues ou que la limite est connue. La liaison Python et MeCab natto-py fournit trois méthodes d'analyse contraintes.
--partial
/ -p
Spécifiez l'option --partial
ou -p
lors de la récupération d'une instance MeCab.
L'instruction d'entrée passée à parse
décrit la contrainte dans le format suivant.
Fragment de phrase:
Fragment de phrase. L'analyse morphologique normale est effectuée comme s'il n'y avait pas de restrictions. Cependant, les éléments morphologiques qui chevauchent des fragments de phrases ne sont pas générés.
Assurez-vous d'ajouter \ n
(saut de ligne) à la fin.
Fragment morphologique
Le format est couche de surface \ t motif élémentaire \ n
.
Enfin, ajoutez \ n
à la fin de l'instruction d'entrée.
from natto import MeCab
text = """jardin\t Hoge
À
Haniwa\t Hoge
Niwatori\t Hoge
Il y a.
"""
with MeCab("--partial") as nm:
print(nm.parse(text))
Niwahoge
Auxiliaire,Assistant de cas,Général,*,*,*,À,ré,ré
Haniwa Hoge
Niwatori Hoge
Est un assistant,Assistant de cas,Général,*,*,*,Mais,Géorgie,Géorgie
Le verbe qui est,Indépendance,*,*,Un pas,Forme basique,Est,Il,Il
.. symbole,Phrase,*,*,*,*,。,。,。
EOS
L'exemple ci-dessus envoie le résultat de l'analyse à la sortie standard, mais pour des contraintes plus fines, utilisez les fonctions de frontière ou d'entité.
Si vous connaissez à l'avance les limites des mots, vous pouvez utiliser l'argument de mot clé boundary_constraints pour spécifier une expression régulière ou une chaîne dont les limites ont été compilées. Ceux qui correspondent à la limite d'élément morphologique spécifiée seront traités comme un élément morphologique et analysés.
text = "Il y a un écureuil dans l'écureuil."
patt = "Niwatori|Haniwa|jardin"
with MeCab() as nm:
#Obtenez des informations pour chaque MeCabNode en spécifiant une contrainte de limite morphologique
for n in nm.parse(text, boundary_constraints=patt, as_nodes=True):
if not (n.is_bos() or n.is_eos()):
print("{}:\t{}". format(n.surface, n.feature))
# BOS/Omettre le nœud EOS
jardin:nom,Général,*,*,*,*,*
À:Particule,Assistant de cas,Général,*,*,*,À,ré,ré
Haniwa:nom,Général,*,*,*,*,Haniwa,Haniwa,Haniwa
Niwatori:nom,Général,*,*,*,*,Niwatori,poulet,poulet
Mais:Particule,Assistant de cas,Général,*,*,*,Mais,Géorgie,Géorgie
Est:verbe,Indépendance,*,*,Un pas,Forme basique,Est,Il,Il
。:symbole,Phrase,*,*,*,*,。,。,。
Pour plus de détails, voir 6.2. Re - Opération des expressions régulières et re.finditer /re.html#re.finditer).
L'argument de mot clé feature_constraints vous permet de spécifier une classification de mot partiel pour chaque élément de formulaire particulier. Tuple (tuple) qui a des mots de partie pour les éléments morphologiques en tant que paire, et ces éléments morphologiques et les mappages de mots de partie sont en outre stockés dans le taple. Puis transmettez-le à la méthode parse comme suit:
feat = (("Niwatori","Hoge"), ("Haniwa","HogeHoge"), ("jardin","更にHoge"))
with MeCab() as nm:
#Obtenez des informations pour chaque MeCabNode en spécifiant des contraintes de mot partiel pour certains éléments de formulaire
for n in nm.parse(text, feature_constraints=feat, as_nodes=True):
if not (n.is_bos() or n.is_eos()):
print("{}:\t{}". format(n.surface, n.feature))
# BOS/Omettre le nœud EOS
jardin:Plus de relâchement
À:Particule,Assistant de cas,Général,*,*,*,À,ré,ré
Haniwa:Hogehoge
Niwatori:Hoge
Mais:Particule,Assistant de cas,Général,*,*,*,Mais,Géorgie,Géorgie
Est:verbe,Indépendance,*,*,Un pas,Forme basique,Est,Il,Il
。:symbole,Phrase,*,*,*,*,。,。,。
c'est tout