Eine Aufzeichnung zur Lösung der Probleme in der ersten Hälfte von Kapitel 6. Die Zieldatei ist nlp.txt, wie auf der Webseite gezeigt.
Führen Sie die folgende Verarbeitung für den englischen Text (nlp.txt) durch.
(. Oder; oder: oder? Oder!) → Leerzeichen → Betrachten Sie das Muster des englischen Kapitals als Satzbegrenzer und geben Sie das Eingabedokument in Form eines Satzes pro Zeile aus.
# -*- 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()
Behandeln Sie Leerzeichen als Wortumbrüche, nehmen Sie 50 Ausgaben als Eingabe und geben Sie sie in Form eines Wortes pro Zeile aus. Geben Sie jedoch am Ende der Anweisung eine Leerzeile aus.
# -*- 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()
Nehmen Sie die Ausgabe> 51 als Eingabe, wenden Sie den Stemming-Algorithmus von Porter an und geben Sie Wörter und Stems in tabulatorgetrennten Formaten aus. In Python sollte das Stemming-Modul als Implementierung des Stemming-Algorithmus von Porter verwendet werden.
# -*- 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
Verwenden Sie Stanford Core NLP, um das Analyseergebnis des Eingabetextes im XML-Format zu erhalten. Lesen Sie auch diese XML-Datei und geben Sie den Eingabetext in Form eines Wortes pro Zeile aus.
# -*- 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()
Laden Sie Stanford Core NLP herunter und wechseln Sie in diesen Ordner. Führen Sie den folgenden Befehl aus.
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
Aus irgendeinem Grund hat es auf zsh mit einem Fehler nicht funktioniert, also habe ich es auf bash ausgeführt.
Lesen Sie das XML-Analyseergebnis von Stanford Core NLP und geben Sie Wörter, Deckspelzen und Teile in tabulatorgetrennten Formaten aus.
# -*- 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