Stanford CoreNLP est une bibliothèque complète pour le traitement en langage naturel du texte anglais. Cette fois, je vais vous présenter comment utiliser CoreNLP à partir de Python.
Téléchargez la version 3.2.0 (publiée le 20/06/2013) au lieu de la dernière version à partir du lien ci-dessous. La raison pour laquelle ce n'est pas la dernière version sera décrite plus loin. 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
Dans mon cas, je l'ai mis dans / usr / local / lib.
$ unzip ./stanford-corenlp-full-2013-06-20.zip -d /usr/local/lib/
corenlp-python développé par Torotoki basé sur dasmith's Il est également enregistré dans PyPI. Cependant, corenlp-python enregistré dans PyPI ne prend en charge que CoreNLP version 3.2.0 (au moment de la rédaction de cet article).
$ pip install corenlp-python
Générez un analyseur en spécifiant le chemin d'accès où CoreNLP a été décompressé, analysez le texte et le résultat sera renvoyé au format JSON.
corenlp_example.py
import pprint
import json
import corenlp
#Génération d'analyseur
corenlp_dir = "/usr/local/lib/stanford-corenlp-full-2013-06-20/"
parser = corenlp.StanfordCoreNLP(corenlp_path=corenlp_dir)
#Analyser et imprimer le résultat joli
result_json = json.loads(parser.parse("I am Alice."))
pprint.pprint(result_json)
Résultat de l'exécution:
{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'.'}]]}]}
Par défaut, il fait tout, de l'analyse syntaxique / analyse morphologique à l'extraction d'expressions uniques, mais si vous souhaitez n'utiliser que certaines fonctions, spécifiez les propriétés. En réduisant les fonctions, l'opération devient plus rapide (surtout le ner est lourd).
Par exemple, si vous souhaitez séparer des mots, créez le fichier user.properties suivant.
user.properties
annotators = tokenize, ssplit
Passez le chemin de ce fichier au paramètre properties lors de la création de l'analyseur.
corenlp_example2.py
import pprint
import json
import corenlp
#Génération d'analyseur
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) #Définir les propriétés
#Analyser et imprimer le résultat joli
result_json = json.loads(parser.parse("I am Alice."))
pprint.pprint(result_json)
Résultat de l'exécution:
{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'}]]}]}
Dans ce qui précède, seuls tokenize et ssplit sont utilisés, mais comme il existe divers autres annotateurs, ils sont brièvement résumés.
annotator | une fonction | Annotateur dépendant |
---|---|---|
tokenize | Partage de mots | (Aucun) |
cleanxml | Suppression de balises XML | tokenize |
ssplit | Séparation des phrases | tokenize |
pos | Analyse morphologique (Détails du tag) | tokenize, ssplit |
lemma | Conversion de mots clés | tokenize, ssplit, pos |
ner | Extraction d'expression unique | tokenize, ssplit, pos, lemma |
regexner | Extraction d'expressions uniques par expression régulière | tokenize, ssplit |
sentiment | Analyse des mots émotionnels | (inconnue) |
truecase | Normalisation des cas | tokenize, ssplit, pos, lemma |
parse | Analyse | tokenize, ssplit |
dcoref | Analyse directive | tokenize, ssplit, pos, lemma, ner, parse |
Recommended Posts