J'ai créé un code pour vérifier la dépendance japonaise à l'aide de cabocha. Pour le moment, j'ai essayé d'extraire la relation entre la nomenclature et les adjectifs.
Veuillez vous référer au blog de mima_ita pour installer CaboCha dans l'environnement Windows. Mettez Cabocha dans Windows et analysez la dépendance avec Python
Je n'ai pas étudié le langage naturel professionnellement, et je n'ai pas fait de recherche dans des articles, etc., mais je décrirai les idées des amateurs ci-dessous.
En vous concentrant sur la nomenclature, les verbes et les adjectifs, si vous considérez simplement la relation avec la partie du mot précédent, vous pouvez la diviser selon les modèles suivants.
Sur cette base, j'ai créé un code pour obtenir la relation entre la nomenclature et les adjectifs. Ci-dessous le code.
python
# coding: utf-8
import CaboCha
import xml.etree.ElementTree as ET
from collections import defaultdict
def get_reputation(ET_tree):
flag = None
reputation = defaultdict(str)
for el in ET_tree.findall(".//chunk"):
tok = el.find("tok")
feature = tok.attrib["feature"].strip().split(',')
part = feature[0]
typ = feature[1]
if part=='nom' and \
(typ=='Général' or typ=='Nomenclature propriétaire'):
reputation["object"]=tok.text
if part=='adjectif': reputation['adjective']=feature[6]
link = el.attrib["link"]
if link=='-1': break
while 1:
res = get_next_chunk(link,part)
if res==None: break
part, typ, word, link = res
if part=='nom' and \
(typ=='Général' or typ=='Nomenclature propriétaire'):
reputation["object"]=word
if part=='adjectif':
reputation['adjective'] = word
if reputation["object"]!=None:
flag=1
break
if flag==1: break
print reputation["object"]
print reputation["adjective"]
def get_next_chunk(linkid, ex_part):
if linkid=='-1': return None
this_chunk = ET_tree.find(".//chunk[@id='%s']" % linkid)
#print this_chunk.attrib
link = this_chunk.attrib["link"]
tok = this_chunk.find('tok')
feature = tok.attrib["feature"].strip().split(',')
if ex_part=='nom':
if feature[0]=='nom':
return feature[0], feature[1], tok.text, link
elif feature[0]=='verbe' or feature[0]=='adjectif':
return feature[0], feature[1], feature[6], link
elif ex_part=='verbe':
if feature[0]=='nom':
return feature[0], feature[1], tok.text, link
elif ex_part=='adjectif':
if feature[0]=='nom':
return feature[0], feature[1], tok.text, link
if __name__=='__main__':
c = CaboCha.Parser('--charset=UTF8')
sentence = "L'article le plus intéressant du numéro de juin de Courier, «Introduction aux« arts libéraux »pour apprendre le plaisir», était un article de Hidehiro Ikegami. "Comment voir un tableau" est extrêmement important, n'est-ce pas?"
tree = c.parse(sentence)
#print tree.toString(CaboCha.FORMAT_TREE)
#print tree.toString(CaboCha.FORMAT_LATTICE)
print tree.toString(CaboCha.FORMAT_XML)
ET_tree = ET.fromstring(tree.toString(CaboCha.FORMAT_XML))
get_reputation(ET_tree)
Je n'obtiens que le premier jeton pour chaque morceau, car si je peux bien le diviser en morceaux, le premier jeton devrait avoir un mot significatif.
L'article le plus intéressant du numéro de juin de Courier, «Introduction aux« arts libéraux »pour apprendre le plaisir», était un article de Hidehiro Ikegami. "Comment voir un tableau" est extrêmement important, n'est-ce pas? 』\
J'ai essayé d'analyser la phrase avec CaboCha. Voici la sortie XML du résultat de l'analyse de CaboCha.
<sentence>
<chunk id="0" link="1" rel="D" score="0.328005" head="0" func="1">
<tok id="0" feature="nom,Général,*,*,*,*,*,*,*,Wikipedia">Courrier</tok>
<tok id="1" feature="Particule,syndicat,*,*,*,*,de,Non,Non">de</tok>
</chunk>
<chunk id="1" link="4" rel="D" score="0.018011" head="3" func="3">
<tok id="2" feature="nom,Avocat possible,*,*,*,*,juin,Rokugatsu,Rokugatsu">juin</tok>
<tok id="3" feature="nom,suffixe,Général,*,*,*,problème,Aller,Aller">problème</tok>
</chunk>
<chunk id="2" link="3" rel="D" score="1.140087" head="5" func="5">
<tok id="4" feature="symbole,Ouvrir les parenthèses,*,*,*,*,「,「,「">「</tok>
<tok id="5" feature="adjectif,Indépendance,*,*,adjectif・イ段,Connexion continue,agréable,Tanoshiku,Tanoshiku">Heureusement</tok>
</chunk>
<chunk id="3" link="4" rel="D" score="2.891449" head="6" func="6">
<tok id="6" feature="verbe,Indépendance,*,*,Cinq étapes / ligne ba,Forme basique,apprendre,Manab,Manab">apprendre</tok>
</chunk>
<chunk id="4" link="6" rel="D" score="1.654218" head="10" func="12">
<tok id="7" feature="symbole,Ouvrir les parenthèses,*,*,*,*,『,『,『">『</tok>
<tok id="8" feature="nom,Général,*,*,*,*,Arts libéraux,Kyoyo,Kyoyo">Arts libéraux</tok>
<tok id="9" feature="symbole,Fermé entre parenthèses,*,*,*,*,』,』,』">』</tok>
<tok id="10" feature="nom,Changer de connexion,*,*,*,*,commencer,Newmon,Newmon">commencer</tok>
<tok id="11" feature="symbole,Fermé entre parenthèses,*,*,*,*,」,」,」">」</tok>
<tok id="12" feature="Particule,格Particule,Général,*,*,*,alors,De,De">alors</tok>
</chunk>
<chunk id="5" link="6" rel="D" score="2.796273" head="13" func="13">
<tok id="13" feature="nom,Avocat possible,*,*,*,*,Ichiban,Ichiban,Ichiban">Ichiban</tok>
</chunk>
<chunk id="6" link="8" rel="D" score="1.346988" head="16" func="17">
<tok id="14" feature="adjectif,Indépendance,*,*,adjectif・アウオ段,Connexion continue,Intéressant,Marrant,Marrant">Intéressant</tok>
<tok id="15" feature="Verbe auxiliaire,*,*,*,Spécial,Forme basique,Ta,Ta,Ta">Ta</tok>
<tok id="16" feature="nom,Non indépendant,Général,*,*,*,de,Non,Non">de</tok>
<tok id="17" feature="Particule,係Particule,*,*,*,*,Est,C,sensationnel">Est</tok>
<tok id="18" feature="symbole,Point de lecture,*,*,*,*,、,、,、">、</tok>
</chunk>
<chunk id="7" link="8" rel="D" score="3.189624" head="21" func="22">
<tok id="19" feature="nom,固有nom,Nom d'une personne,Nom de famille,*,*,Ikegami,Ikegami,Ikegami">Ikegami</tok>
<tok id="20" feature="nom,固有nom,Nom d'une personne,Nom,*,*,Britannique et occidental,Hidehiro,Hidehiro">Britannique et occidental</tok>
<tok id="21" feature="nom,suffixe,Nom d'une personne,*,*,*,M.,Soleil,Soleil">M.</tok>
<tok id="22" feature="Particule,syndicat,*,*,*,*,de,Non,Non">de</tok>
</chunk>
<chunk id="8" link="11" rel="D" score="-0.885691" head="23" func="23">
<tok id="23" feature="nom,Général,*,*,*,*,article,faisan,faisan">article</tok>
<tok id="24" feature="symbole,Phrase,*,*,*,*,。,。,。">。</tok>
</chunk>
<chunk id="9" link="10" rel="D" score="4.381583" head="26" func="27">
<tok id="25" feature="symbole,Ouvrir les parenthèses,*,*,*,*,「,「,「">「</tok>
<tok id="26" feature="nom,Général,*,*,*,*,La peinture,Kaiga,Kaiga">La peinture</tok>
<tok id="27" feature="Particule,syndicat,*,*,*,*,de,Non,Non">de</tok>
</chunk>
<chunk id="10" link="11" rel="D" score="-0.885691" head="29" func="31">
<tok id="28" feature="verbe,Indépendance,*,*,Un pas,Type continu,à voir,Mi,Mi">Vous voyez</tok>
<tok id="29" feature="nom,suffixe,Général,*,*,*,Comment,Kata,Kata">Comment</tok>
<tok id="30" feature="symbole,Fermé entre parenthèses,*,*,*,*,」,」,」">」</tok>
<tok id="31" feature="Particule,格Particule,Langage commun,*,*,*,Quoi,Itte,Itte">Quoi</tok>
</chunk>
<chunk id="11" link="-1" rel="D" score="0.000000" head="33" func="36">
<tok id="32" feature="nom,Changer de connexion,*,*,*,*,Transcendance,Chozetsu,Chozetsu">Transcendance</tok>
<tok id="33" feature="nom,Racine du verbe adjectif,*,*,*,*,Important,Daiji,Daiji">Important</tok>
<tok id="34" feature="Verbe auxiliaire,*,*,*,Spécial,Forme basique,Est,Da,Da">Est</tok>
<tok id="35" feature="Particule,終Particule,*,*,*,*,Yo,Yo,Yo">Yo</tok>
<tok id="36" feature="Particule,終Particule,*,*,*,*,Hey,Ne,Ne">Hey</tok>
<tok id="37" feature="symbole,Phrase,*,*,*,*,。,。,。">。</tok>
</chunk>
</sentence>
Le lien contenu dans chaque bloc montre l'association avec l'ID de bloc qui suit.
J'ai pu acquérir la relation de "Courier" <- "intéressante". Cependant, avec le code ci-dessus, vous ne pouvez obtenir qu'une seule relation, donc si vous en avez plus d'une, vous devez en concevoir plus. ..
Nous vous prions de nous excuser pour la gêne occasionnée, mais si vous faites une erreur, veuillez nous en informer.
Recommended Posts