Stanford CoreNLP ist eine vollständige Bibliothek für die Verarbeitung von englischem Text in natürlicher Sprache. Dieses Mal werde ich die Verwendung von CoreNLP aus Python vorstellen.
Laden Sie die Version 3.2.0 (veröffentlicht am 20.06.2013) anstelle der neuesten Version über den unten stehenden Link herunter. Der Grund, warum es nicht die neueste Version ist, wird später beschrieben. http://nlp.stanford.edu/software/stanford-corenlp-full-2013-06-20.zip
$ curl -L -O http://nlp.stanford.edu/software/stanford-corenlp-full-2013-06-20.zip
In meinem Fall habe ich es in / usr / local / lib abgelegt.
$ unzip ./stanford-corenlp-full-2013-06-20.zip -d /usr/local/lib/
corenlp-python entwickelt von Torotoki basierend auf Dasmith's Es ist auch in PyPI registriert. In PyPI registriertes Corenlp-Python unterstützt jedoch nur CoreNLP Version 3.2.0 (zum Zeitpunkt des Schreibens dieses Artikels).
$ pip install corenlp-python
Generieren Sie einen Parser, indem Sie den Pfad angeben, in dem CoreNLP dekomprimiert wurde, den Text analysieren und das Ergebnis im JSON-Format zurückgeben.
corenlp_example.py
import pprint
import json
import corenlp
#Parser-Generierung
corenlp_dir = "/usr/local/lib/stanford-corenlp-full-2013-06-20/"
parser = corenlp.StanfordCoreNLP(corenlp_path=corenlp_dir)
#Analysieren und drucken Sie das Ergebnis hübsch
result_json = json.loads(parser.parse("I am Alice."))
pprint.pprint(result_json)
Ausführungsergebnis:
{u'coref': [[[[u'I', 0, 0, 0, 1], [u'Alice', 0, 2, 2, 3]]]],
u'sentences': [{u'dependencies': [[u'nsubj', u'Alice', u'I'],
[u'cop', u'Alice', u'am'],
[u'root', u'ROOT', u'Alice']],
u'parsetree': u'(ROOT (S (NP (PRP I)) (VP (VBP am) (NP (NNP Alice))) (. .)))',
u'text': u'I am Alice.',
u'words': [[u'I',
{u'CharacterOffsetBegin': u'0',
u'CharacterOffsetEnd': u'1',
u'Lemma': u'I',
u'NamedEntityTag': u'O',
u'PartOfSpeech': u'PRP'}],
[u'am',
{u'CharacterOffsetBegin': u'2',
u'CharacterOffsetEnd': u'4',
u'Lemma': u'be',
u'NamedEntityTag': u'O',
u'PartOfSpeech': u'VBP'}],
[u'Alice',
{u'CharacterOffsetBegin': u'5',
u'CharacterOffsetEnd': u'10',
u'Lemma': u'Alice',
u'NamedEntityTag': u'PERSON',
u'PartOfSpeech': u'NNP'}],
[u'.',
{u'CharacterOffsetBegin': u'10',
u'CharacterOffsetEnd': u'11',
u'Lemma': u'.',
u'NamedEntityTag': u'O',
u'PartOfSpeech': u'.'}]]}]}
Standardmäßig wird alles von der Syntaxanalyse / morphologischen Analyse bis zur Extraktion eindeutiger Ausdrücke ausgeführt. Wenn Sie jedoch nur einige Funktionen verwenden möchten, geben Sie Eigenschaften an. Durch Eingrenzen der Funktionen wird der Vorgang schneller (insbesondere der ner ist schwer).
Wenn Sie beispielsweise Wörter teilen möchten, erstellen Sie die folgende Datei user.properties.
user.properties
annotators = tokenize, ssplit
Übergeben Sie den Pfad dieser Datei beim Erstellen des Parsers an den Parameter properties.
corenlp_example2.py
import pprint
import json
import corenlp
#Parser-Generierung
corenlp_dir = "/usr/local/lib/stanford-corenlp-full-2013-06-20/"
properties_file = "./user.properties"
parser = corenlp.StanfordCoreNLP(
corenlp_path=corenlp_dir,
properties=properties_file) #Eigenschaften festlegen
#Analysieren und drucken Sie das Ergebnis hübsch
result_json = json.loads(parser.parse("I am Alice."))
pprint.pprint(result_json)
Ausführungsergebnis:
{u'sentences': [{u'dependencies': [],
u'parsetree': [],
u'text': u'I am Alice.',
u'words': [[u'I',
{u'CharacterOffsetBegin': u'0',
u'CharacterOffsetEnd': u'1'}],
[u'am',
{u'CharacterOffsetBegin': u'2',
u'CharacterOffsetEnd': u'4'}],
[u'Alice',
{u'CharacterOffsetBegin': u'5',
u'CharacterOffsetEnd': u'10'}],
[u'.',
{u'CharacterOffsetBegin': u'10',
u'CharacterOffsetEnd': u'11'}]]}]}
Oben werden nur Tokenize und Ssplit verwendet. Da es jedoch verschiedene andere Annotatoren gibt, werden sie kurz zusammengefasst.
annotator | Funktion | Abhängiger Annotator |
---|---|---|
tokenize | Wort geteilt | (Keiner) |
cleanxml | Entfernen von XML-Tags | tokenize |
ssplit | Satzaufteilung | tokenize |
pos | Morphologische Analyse(Tag-Details) | tokenize, ssplit |
lemma | Headword-Konvertierung | tokenize, ssplit, pos |
ner | Einzigartige Ausdrucksextraktion | tokenize, ssplit, pos, lemma |
regexner | Extraktion eindeutiger Ausdrücke durch regulären Ausdruck | tokenize, ssplit |
sentiment | Emotionale Wortanalyse | (Unbekannt) |
truecase | Fallnormalisierung | tokenize, ssplit, pos, lemma |
parse | Parsing | tokenize, ssplit |
dcoref | Richtlinienanalyse | tokenize, ssplit, pos, lemma, ner, parse |
Recommended Posts