Traitement linguistique 100 coups 2015 ["Chapitre 6: Traitement de texte anglais"](http: //www.cl.ecei) Il s'agit du 57e "Analyse des dépendances" de .tohoku.ac.jp / nlp100 / # ch6). "Knock 100 language processing-44: Visualisation de l'arbre dépendant" Ceci est la version de Stanford Core NLP. Je détourne beaucoup de code.
Lien | Remarques |
---|---|
057.Analyse des dépendances.ipynb | Lien GitHub du programme de réponse |
100 coups de traitement du langage amateur:57 | Copiez et collez la source de nombreuses pièces source |
Officiel PNL de Stanford Core | Premier regard sur la page PNL de Stanford Core |
type | version | Contenu |
---|---|---|
OS | Ubuntu18.04.01 LTS | Il fonctionne virtuellement |
pyenv | 1.2.16 | J'utilise pyenv car j'utilise parfois plusieurs environnements Python |
Python | 3.8.1 | python3 sur pyenv.8.J'utilise 1 Les packages sont gérés à l'aide de venv |
Stanford CoreNLP | 3.9.2 | Je l'ai installé il y a un an et je ne me souviens pas en détail ... C'était le dernier même après un an, alors je l'ai utilisé tel quel |
openJDK | 1.8.0_242 | J'ai utilisé le JDK qui a été installé à d'autres fins tel quel |
Dans l'environnement ci-dessus, j'utilise les packages Python supplémentaires suivants. Installez simplement avec pip ordinaire.
type | version |
---|---|
pydot | 1.4.1 |
Un aperçu des différentes technologies de base pour le traitement du langage naturel grâce au traitement de texte anglais à l'aide de la PNL Stanford Core.
Stanford Core NLP, Stemming, Part-word tagging, Unique expression extraction, Co-reference analysis, Dependency analysis, Clause structure analysis, S expression
Effectuez le traitement suivant sur le texte anglais (nlp.txt).
Visualisez les dépendances réduites de la PNL Stanford Core sous forme de graphe orienté. Pour la visualisation, convertissez l'arborescence des dépendances en langage DOT et [Graphviz](http: / /www.graphviz.org/) doit être utilisé. De plus, pour visualiser des graphiques dirigés directement à partir de Python, utilisez pydot.
Les dépendances sont appelées «Dependencies» dans Stanford Core NLP, et le fonctionnement de Stanford Core NLP peut être trouvé dans Stanford Dependencies.
Il semble qu'il existe deux types, et cette fois la cible est "collapsed-dependencies".
Après l'avoir fait, j'ai remarqué qu'il était plus facile de comprendre si j'ajoutais la relation entre les arêtes (prep_on etc.) dans le graphe orienté.
import xml.etree.ElementTree as ET
import pydot
for i, sentence in enumerate(ET.parse('./nlp.txt.xml').iterfind('./document/sentences/sentence')):
edges = []
for dependency in sentence.iterfind('./dependencies[@type="collapsed-dependencies"]/dep'):
#Exclusion de ponctuation
if dependency.get('type') != 'punct':
governor = dependency.find('./governor')
dependent = dependency.find('./dependent')
edges.append(((governor.get('idx'), governor.text),
(dependent.get('idx'), dependent.text)))
if len(edges) > 0:
graph = pydot.graph_from_edges(edges, directed=True)
graph.write_jpeg('057.graph_{}.jpeg'.format(i))
if i > 5:
break
Il s'agit d'un mappage du chemin du fichier XML suivant et de la source et de la destination cible. La balise dependencies
de la 5ème couche cible le type d'attribut de collapsed-dependencies
.
production | 1er niveau | Deuxième niveau | Troisième niveau | 4ème niveau | 5ème niveau | 6ème niveau | 7ème niveau |
---|---|---|---|---|---|---|---|
Personne en charge | root | document | sentences | sentence | dependencies | dep | governor |
Contact | root | document | sentences | sentence | dependencies | dep | dependent |
Le fichier XML est [GitHub](https://github.com/YoheiFukuhara/nlp100/blob/master/06.%E8%8B%B1%E8%AA%9E%E3%83%86%E3%82%AD% E3% 82% B9% E3% 83% 88% E3% 81% AE% E5% 87% A6% E7% 90% 86 / nlp.txt.xml).
xml:nlp.txt.xml(Extrait)
<root>
<document>
<docId>nlp.txt</docId>
<sentences>
<sentence id="1">
--Omission--
<dependencies type="collapsed-dependencies">
<dep type="root">
<governor idx="0">ROOT</governor>
<dependent idx="18">field</dependent>
</dep>
<dep type="amod">
<governor idx="3">processing</governor>
<dependent idx="1">Natural</dependent>
</dep>
<dep type="compound">
<governor idx="3">processing</governor>
<dependent idx="2">language</dependent>
</dep>
Ci-dessous la partie code. Ce que je fais est le même que "Knock 100 language processing-44: Visualization of depend tree", donc je ne vais pas l'expliquer. Cependant, ajoutez la relation entre les arêtes en utilisant Graphviz et networkx. Je regrette d'avoir dû le faire. Article "Ecrire un multi-graphe ou un beau graphe avec networkx [python]" et article "Utiliser Graphviz sur Python" Dessinez un beau graphique " Je pense que je peux l'écrire en y faisant référence. En premier lieu, pydot n'a pas été mis à jour depuis décembre 2018, je crains donc que cela continue à l'avenir.
python
for i, sentence in enumerate(ET.parse('./nlp.txt.xml').iterfind('./document/sentences/sentence')):
edges = []
for dependency in sentence.iterfind('./dependencies[@type="collapsed-dependencies"]/dep'):
#Exclusion de ponctuation
if dependency.get('type') != 'punct':
governor = dependency.find('./governor')
dependent = dependency.find('./dependent')
edges.append(((governor.get('idx'), governor.text),
(dependent.get('idx'), dependent.text)))
if len(edges) > 0:
graph = pydot.graph_from_edges(edges, directed=True)
graph.write_jpeg('057.graph_{}.jpeg'.format(i))
Lorsque le programme est exécuté, le résultat suivant est affiché (uniquement les 3 premières phrases).
Recommended Posts