[PYTHON] Traitement 100 langues knock-53: Tokenisation

Traitement linguistique 100 coups 2015 ["Chapitre 6: Traitement de texte anglais"](http: //www.cl.ecei) Il s'agit du 53e "Tokenization" enregistrement de .tohoku.ac.jp / nlp100 / # ch6). Enfin, la PNL de Stanford Core est sur le point de commencer. C'est le sujet principal du chapitre 6. Cette fois, l'installation est la principale, et l'exécution de Stanford Core NLP et la partie Python ne sont pas un gros problème.

Lien de référence

Lien Remarques
053_1.Tokenization.ipynb LienGitHubduprogrammederéponse(Partied'exécutiondeStanfordCoreNLPdansBash)
053_2.Tokenization.ipynb LienGitHubduprogrammederéponse(Python)
100 coups de traitement du langage amateur:53 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: Analyse des dépendances

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

53. Tokenization

Utilisez Stanford Core NLP pour obtenir le résultat de l'analyse du texte d'entrée au format XML. Lisez également ce fichier XML et sortez le texte d'entrée sous la forme d'un mot par ligne.

Supplément de problème (à propos de «Stanford Core NLP»)

"Stanford Core NLP" est une bibliothèque pour le traitement du langage naturel. Il existe un système similaire appelé "Stanford NLP", qui prend en charge le japonais. "Stanford NLP" a été utilisé depuis 70ème coup. La différence est clairement décrite dans l 'article «Introduction à Stanford NLP with Python». En regardant l '[Historique des versions] de Stanford CoreNLP (https://stanfordnlp.github.io/CoreNLP/history.html), il n'a pas été beaucoup mis à jour récemment.

Répondre

Programme de réponse (partie d'exécution de Stanford Core NLP dans Bash) [053_1.Tokenization.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 / 053_1.Tokenization.ipynb)

Je l'utilise selon la page officielle. Si vous n'utilisez pas l'option -annotators, vous serez bloqué par la suite (certainement le 57e). J'alloue 5G de mémoire avec -Xmx5G. S'il est trop petit, une erreur s'est produite. Une fois exécuté, le résultat sera envoyé au même emplacement avec l'extension xml ajoutée au fichier de lecture nlp.txt.

java -cp "/usr/local/lib/stanford-corenlp-full-2018-10-05/*" \
 -Xmx5g \
 edu.stanford.nlp.pipeline.StanfordCoreNLP \
 -annotators tokenize,ssplit,pos,lemma,ner,parse,dcoref \
 -file nlp.txt

À propos, si vous placez le fichier XML de sortie dans le même répertoire et que vous le lisez avec un navigateur, le CoreNLP-to-HTML.xsl qui se trouvait dans / usr / local / lib / stanford-corenlp-full-2018-10-05 est le suivant Vous pouvez voir le résultat comme (je l'ai vu dans IE et Edge, mais pas dans Firefox et Chrome).

image.png

Programme de réponse (partie Python) [053_1.Tokenization.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 / 053_1.Tokenization.ipynb)

import xml.etree.ElementTree as ET

#Extraire uniquement le mot
for i, word in enumerate(ET.parse('./nlp.txt.xml').iter('word')):
    print(i, '\t' ,word.text)
    
    #Limité car il y en a beaucoup
    if i > 30:
        break

Répondre au commentaire

Perspective XML

J'utilise le package standard Python xml comme analyseur XML. C'est facile à utiliser, il suffit de lire la sortie nlp.txt.xml de Stanford CoreNLP avec la fonction parse et de lire la balise word.

python


for i, word in enumerate(ET.parse('./nlp.txt.xml').iter('word')):
    print(i, '\t' ,word.text)

Le contenu de xml est le suivant (extrait du début). 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 du début)


<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="CoreNLP-to-HTML.xsl" type="text/xsl"?>
<root>
  <document>
    <docId>nlp.txt</docId>
    <sentences>
      <sentence id="1">
        <tokens>
          <token id="1">
            <word>Natural</word>
            <lemma>natural</lemma>
            <CharacterOffsetBegin>0</CharacterOffsetBegin>
            <CharacterOffsetEnd>7</CharacterOffsetEnd>
            <POS>JJ</POS>
            <NER>O</NER>
            <Speaker>PER0</Speaker>
          </token>
          <token id="2">
            <word>language</word>
            <lemma>language</lemma>
            <CharacterOffsetBegin>8</CharacterOffsetBegin>
            <CharacterOffsetEnd>16</CharacterOffsetEnd>
            <POS>NN</POS>
            <NER>O</NER>
            <Speaker>PER0</Speaker>
          </token>

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


0 	 Natural
1 	 language
2 	 processing
3 	 From
4 	 Wikipedia
5 	 ,
6 	 the
7 	 free
8 	 encyclopedia
9 	 Natural
10 	 language
11 	 processing
12 	 -LRB-
13 	 NLP
14 	 -RRB-
15 	 is
16 	 a
17 	 field
18 	 of
19 	 computer
20 	 science
21 	 ,
22 	 artificial
23 	 intelligence
24 	 ,
25 	 and
26 	 linguistics
27 	 concerned
28 	 with
29 	 the
30 	 interactions
31 	 between

En passant, «-LRB-» et «-RRB-» sont des parenthèses, qui sont converties par Stanford Core NLP.

--- LRB- support gauche --- RRB- support droit

Recommended Posts

Traitement 100 langues knock-53: Tokenisation
100 coups de traitement linguistique (2020): 38
100 traitement de la langue frapper 00 ~ 02
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 traitements linguistiques Knock 2020 [00 ~ 49 réponse]
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 2
100 coups en traitement du langage amateur: 47
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
100 coups de traitement du langage avec Python 2015
100 traitement du langage Knock-51: découpage de mots
100 Language Processing Knock-58: Extraction de Taple
100 Language Processing Knock-57: Analyse des dépendances
100 traitement linguistique knock-50: coupure de phrase
100 Language Processing Knock Chapitre 2 (Python)
100 Language Processing Knock-25: Extraction de modèles
Traitement du langage 100 Knock-87: similitude des mots
Résolution de 100 traitements linguistiques Knock 2020 (01. "Patatokukashi")
100 coups de traitement du langage amateur: Résumé
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
100 Language Processing Knock-55: extraction d'expressions uniques
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 3
100 Language Processing Knock-82 (mot de contexte): Extraction de contexte
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 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
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 1
100 Language Processing Knock 2020 Chapitre 1: Mouvement préparatoire
100 traitement du langage knock-73 (en utilisant scikit-learn): apprentissage
100 Language Processing Knock Chapitre 1 par Python
100 Language Processing Knock 2020 Chapitre 3: Expressions régulières
100 langage traitement knock-24: Extraire la référence du fichier
100 Language Processing Knock 2015 Chapitre 4 Analyse morphologique (30-39)
100 traitement du langage knock-74 (en utilisant scicit-learn): prédiction
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 2
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 4
100 traitement du langage knock-38 (en utilisant des pandas): histogramme
Le débutant en Python a essayé 100 traitements de langage Knock 2015 (00 ~ 04)