100 traitements du langage naturel frappent Chapitre 6 Traitement de texte anglais (première moitié)

Un enregistrement de la résolution des problèmes dans la première moitié du chapitre 6. Le fichier cible est nlp.txt comme indiqué sur la page Web.

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

</ i> 50. Pause de phrase

(. Ou; ou: ou?

# -*- coding: utf-8 -*-
__author__ = 'todoroki'

import re

punt = re.compile(r"(?P<punt>[\.:;!\?]) (?P<head>[A-Z])")

if __name__ == "__main__":
    f = open('nlp.txt', 'r')
    for line in f:
        l = line.strip()
        # if punt.search(l):
            # print punt.sub(r"\g<punt>\n\g<head>", l)
        print punt.sub(r"\g<punt>\n\g<head>", l)
    f.close()

</ i> 51. Mots découpés

Considérez les blancs comme des sauts de mots, prenez 50 sorties en entrée et en sortie sous la forme d'un mot par ligne. Cependant, affichez une ligne vide à la fin de l'instruction.

# -*- coding: utf-8 -*-
__author__ = 'todoroki'

import re

if __name__ == "__main__":
    f = open('nlp_line.txt', 'r')
    for line in f:
        l = line.strip()
        for word in l.split():
            print re.sub(r"\W", "", word)
        print ""
    f.close()

</ i> 52. Tige

Prenez la sortie de> 51 comme entrée, appliquez l'algorithme de dérivation de Porter et sortez les mots et les racines au format délimité par des tabulations. En Python, le module de dérivation doit être utilisé comme une implémentation de l'algorithme de dérivation de Porter.

# -*- coding: utf-8 -*-
__author__ = 'todoroki'

from nltk.stem.porter import PorterStemmer

if __name__ == "__main__":
    f = open('nlp_word.txt')
    for line in f:
        stemmer = PorterStemmer()
        l = line.strip()
        if len(l) > 0:
            print "%s\t%s" % (l, stemmer.stem(l))
        else:
            print ""
    f.close()

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.

# -*- coding: utf-8 -*-
__author__ = 'todoroki'

import re

WORD = re.compile(r"<word>(\w+)</word>")

f = open('nlp.txt.xml', 'r')
for line in f:
    word = WORD.search(line.strip())
    if word:
        print word.group(1)
f.close()

Commande de création de fichier XML

Téléchargez Stanford Core NLP et déplacez-vous vers ce dossier. Exécutez la commande suivante.

java -Xmx5g -cp stanford-corenlp-3.6.0.jar:stanford-corenlp-models-3.6.0.jar:* edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,parse,mention,coref -file nlp_line.txt -outputFormat xml

Pour une raison quelconque, cela n'a pas fonctionné sur zsh avec une erreur, je l'ai donc exécuté sur bash.

</ i> 54. Balisage de participation

Lire le code XML des résultats d'analyse de Stanford Core NLP et afficher les mots, les lemmes et les parties au format délimité par des tabulations.

# -*- coding: utf-8 -*-
__author__ = 'todoroki'

import re

WORD = re.compile(r"<word>(\w+)</word>")
LEMMA = re.compile(r"<lemma>(\w+)</lemma>")
POS = re.compile(r"<POS>(\w+)</POS>")

f = open("nlp.txt.xml", "r")
words = []
for line in f:
    if len(words) == 3:
        print "\t".join(words)
        words = []
    else:
        line = line.strip()
        word = WORD.search(line)
        if len(words) == 0 and word:
            words.append(word.group(1))
            continue
        lemma = LEMMA.search(line)
        if len(words) == 1 and lemma:
            words.append(lemma.group(1))
            continue
        pos = POS.search(line)
        if len(words) == 2 and pos:
            words.append(pos.group(1))
f.close()

Recommended Posts