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