[PYTHON] 100 Language Processing Knock-58: Extraction de Taple

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 de référence

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

environnement

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

Chapitre 6: Traitement du texte anglais

contenu de l'étude

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

Contenu frappé

Effectuez le traitement suivant sur le texte anglais (nlp.txt).

58. Extraction de taples

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

Supplément de problème (à propos de "taple")

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". image.png

Répondre

Programme de réponse [058. Tapple extraction.ipynb](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 / 058.% E3% 82% BF% E3% 83% 97% E3% 83% AB% E3% 81% AE% E6% 8A% BD% E5% 87% BA.ipynb)

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))

Répondre au commentaire

Chemin du fichier XML

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>

Créer un dictionnaire pour la sortie

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

Section de sortie

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))

Résultat de sortie (résultat de l'exécution)

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

100 Language Processing Knock-58: Extraction de Taple
100 Language Processing Knock-25: Extraction de modèles
100 coups de traitement linguistique (2020): 28
100 coups de traitement linguistique (2020): 38
100 traitement de la langue frapper 00 ~ 02
100 Language Processing Knock-55: extraction d'expressions uniques
100 Language Processing Knock-82 (mot de contexte): Extraction de contexte
100 traitements linguistiques Knock 2020 [00 ~ 39 réponse]
100 langues de traitement knock 2020 [00-79 réponse]
100 traitements linguistiques Knock 2020 [00 ~ 69 réponse]
100 Language Processing Knock 2020 Chapitre 1
100 coups de traitement du langage amateur: 17
100 Traitement du langage Knock-52: Stemming
100 Traitement du langage Knock Chapitre 1
100 coups de langue amateur: 07
100 Language Processing Knock 2020 Chapitre 3
100 Language Processing Knock 2020 Chapitre 2
100 coups de traitement du langage amateur: 09
100 coups en traitement du langage amateur: 47
Traitement 100 langues knock-53: Tokenisation
100 coups de traitement du langage amateur: 97
100 traitements linguistiques Knock 2020 [00 ~ 59 réponse]
100 coups de traitement du langage amateur: 67
Traitement du langage 100 knocks-45: Extraction de modèles de cas verbaux
100 traitement du langage knock-72 (en utilisant Stanford NLP): Extraction d'identité
100 coups de traitement du langage avec Python 2015
100 traitement du langage Knock-51: découpage de mots
100 Language Processing Knock-57: Analyse des dépendances
100 traitement linguistique knock-50: coupure de phrase
100 Language Processing Knock Chapitre 1 (Python)
100 Language Processing Knock Chapitre 2 (Python)
Traitement du langage 100 Knock-87: similitude des mots
J'ai essayé 100 traitements linguistiques Knock 2020
100 Language Processing Knock-56: analyse de co-référence
Résolution de 100 traitements linguistiques Knock 2020 (01. "Patatokukashi")
100 coups de traitement du langage amateur: Résumé
Traitement du langage 100 knocks-49: Extraction de chemins de dépendances entre nomenclature
100 Language Processing Knock 2020 Chapitre 2: Commandes UNIX
100 Language Processing Knock 2015 Chapitre 5 Analyse des dépendances (40-49)
100 traitements de langage avec Python
100 Language Processing Knock Chapitre 1 en Python
100 Language Processing Knock 2020 Chapitre 4: Analyse morphologique
100 Language Processing Knock 2020 Chapitre 9: RNN, CNN
100 traitement du langage knock-76 (en utilisant scicit-learn): étiquetage
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 3
100 traitements de langage avec Python (chapitre 3)
100 Language Processing Knock: Chapitre 1 Mouvement préparatoire
100 Language Processing Knock 2020 Chapitre 6: Apprentissage automatique
100 Traitement du langage Knock Chapitre 4: Analyse morphologique
Traitement du langage 100 knock-86: affichage vectoriel Word
100 Language Processing Knock 2020 Chapitre 10: Traduction automatique (90-98)
100 Language Processing Knock 2020 Chapitre 5: Analyse des dépendances
100 Language Processing Knock-28: Suppression du balisage MediaWiki
100 Traitement du langage Knock 2020 Chapitre 7: Vecteur de mots
100 Language Processing Knock 2020 Chapitre 8: Neural Net
100 traitement du langage knock-59: analyse de la formule S
Le débutant en Python a essayé 100 traitements de langage Knock 2015 (05 ~ 09)
100 traitement du langage knock-31 (en utilisant des pandas): verbe
100 langues de traitement frappent 2020 "pour Google Colaboratory"
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 1
100 Language Processing Knock 2020 Chapitre 1: Mouvement préparatoire