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