Language processing 100 knocks 2015 ["Chapter 6: English text processing"](http: //www.cl.ecei) Il s'agit de l'enregistrement de la 58ème "Extraction Tupple" de .tohoku.ac.jp / nlp100 / # ch6). La dernière fois, le coup était une visualisation de la dépendance entière, mais cette fois, il s'agit d'une sortie en extrayant une dépendance spécifique. Environ 80% est la même chose que ce que nous faisons.
Lien | Remarques |
---|---|
058.Extraction de taples.ipynb | Lien GitHub du programme de réponse |
100 coups de traitement du langage amateur:58 | 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 |
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).
Sortie de l'ensemble des "objets de prédicat sujet" au format délimité par des tabulations en fonction du résultat de l'analyse des dépendances (dépendances réduites) de Stanford Core NLP. Cependant, reportez-vous à ce qui suit pour les définitions du sujet, du prédicat et de l'objet.
--Predicate: Un mot qui a des enfants (dépendants) des relations nsubj et dobj --Subject: enfant (dépendant) qui a une relation nsubj du prédicat --Objectif: enfant dépendant avec relation dobj à partir du prédicat
Quand j'ai entendu "taple", j'ai pensé au Tuple de Python, mais cette fois il semble être différent. Premièrement, dans Wikipedia "Taple", il est écrit comme suit. ** Un "ensemble de composants multiples" **.
Tuple ou tuple (anglais: tuple) est un concept général qui fait référence collectivement à un ensemble composé de plusieurs composants.
Stanford CoreNLP mentionne Tuple dans Stanford Open Information Extraction.
Open information extraction (open IE) refers to the extraction of relation tuples, typically binary relations, from plain text, such as (Mark Zuckerberg; founded; Facebook).
Et la figure suivante sur la même page est facile à comprendre à propos de "taple".
import xml.etree.ElementTree as ET
texts = []
#énumération de phrases, traitement d'une phrase à la fois
for sentence in ET.parse('./nlp.txt.xml').iterfind('./document/sentences/sentence'):
output = {}
#énumération des dépendances
for dep in sentence.iterfind('./dependencies[@type="collapsed-dependencies"]/dep'):
#Vérification de la relation
dep_type = dep.get('type')
if dep_type == 'nsubj' or dep_type == 'dobj':
#Ajouter au dictionnaire de prédicat
governor = dep.find('./governor')
index = governor.get('idx')
if index in output:
texts = output[index]
else:
texts = [governor.text, '', '']
#Ajouter au sujet ou à l'objet(Si le même prédicat, gagnez plus tard)
if dep_type == 'nsubj':
texts[1] = dep.find('./dependent').text
else:
texts[2] = dep.find('./dependent').text
output[index] = texts
for key, texts in output.items():
if texts[1] != '' and texts[2] != '':
print(sentence.get('id'), '\t', '\t'.join(texts))
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
.
De plus, l'attribut «type» de la 6ème couche est celui avec «nsubj» ou «dobj».
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>
--Omission--
<dep type="nsubj">
<governor idx="18">field</governor>
<dependent idx="12">processing</dependent>
</dep>
--Omission--
<dep type="dobj">
<governor idx="13">enabling</governor>
<dependent idx="14">computers</dependent>
</dep>
C'est l'endroit où la variable de type dictionnaire ʻoutput` pour la sortie est créée pour chaque phrase. L'index du prédicat («gouverneur») est utilisé comme clé du dictionnaire, la valeur du dictionnaire est un type de liste et le contenu est «texte du prédicat», «texte du sujet» et «texte de l'objet». Si vous souhaitez conserver plusieurs sujets et objectifs, la méthode gagnant-gagnant est utilisée.
python
#énumération des dépendances
for dep in sentence.iterfind('./dependencies[@type="collapsed-dependencies"]/dep'):
#Vérification de la relation
dep_type = dep.get('type')
if dep_type == 'nsubj' or dep_type == 'dobj':
#Ajouter au dictionnaire de prédicat
governor = dep.find('./governor')
index = governor.get('idx')
if index in output:
texts = output[index]
else:
texts = [governor.text, '', '']
#Ajouter au sujet ou à l'objet(Si le même prédicat, gagnez plus tard)
if dep_type == 'nsubj':
texts[1] = dep.find('./dependent').text
else:
texts[2] = dep.find('./dependent').text
output[index] = texts
S'il y a un sujet ou un objet, il est sorti.
python
for key, texts in output.items():
if texts[1] != '' and texts[2] != '':
print(sentence.get('id'), '\t', '\t'.join(texts))
Lorsque le programme est exécuté, les résultats suivants sont affichés.
Résultat de sortie
3 involve understanding generation
5 published Turing article
6 involved experiment translation
11 provided ELIZA interaction
12 exceeded patient base
12 provide ELIZA response
14 structured which information
19 discouraged underpinnings sort
19 underlies that approach
20 produced Some systems
21 make which decisions
23 contains that errors
34 involved implementations coding
38 take algorithms set
39 produced Some systems
40 make which decisions
41 have models advantage
41 express they certainty
42 have Systems advantages
43 make procedures use
44 make that decisions
Recommended Posts