web-dev-qa-db-fra.com

Comment identifier le sujet d'une phrase?

Python + NLTK peut-il être utilisé pour identifier le sujet d'une phrase? D'après ce que j'ai appris jusqu'à présent, une phrase peut être cassée en une tête et ses dépendants. Par exemple "J'ai tiré sur un éléphant". Dans cette phrase, moi et l'éléphant sommes dépendants à tirer. Mais comment puis-je discerner que le sujet de cette phrase est I.

14
singhalc

Comme le dit le livre NLTK (exercice 29), "Une façon courante de définir le sujet d'une phrase S en anglais est la phrase nominale qui est l'enfant de S et le frère de VP."

Regardez exemple d'arbre : en effet, "I" est la phrase nominale qui est l'enfant de S qui est le frère de VP, alors que "éléphant" ne l'est pas.

14
Nikita Astrakhantsev

Vous pouvez utiliser Spacy

Code

import spacy
nlp = spacy.load('en')
sent = "I shot an elephant"
doc=nlp(sent)

sub_toks = [tok for tok in doc if (tok.dep_ == "nsubj") ]

print(sub_toks) 
16
Sohel Khan

La langue anglaise a deux voix: voix active et voix passive. Prenons la voix la plus utilisée: voix active.

Il suit le modèle subject-verb-object. Pour marquer le sujet, écrivez un ensemble de règles avec des balises POS. Marquez la phrase I[NOUN] shot[VERB] an elephant[NOUN]. Si vous voyez que le premier nom est sujet, alors il y a un verbe et ensuite un objet.

Si vous voulez compliquer les choses, une phrase-I shot an elephant with a gun. Ici, les prépositions ou les conjonctions subordonnées comme avec, dans, dans peuvent se voir attribuer des rôles. Ici, la phrase sera étiquetée comme I[NOUN] shot[VERB] an elephant[NOUN] with[IN] a gun[NOUN]. Vous pouvez facilement dire que Word a un rôle instrumentatif. Vous pouvez créer un système basé sur des règles pour obtenir le rôle de chaque mot de la phrase. 

Examinez également les modèles de voix passive et écrivez des règles identiques.

6
rishi

Vous pouvez masquer le problème en faisant quelque chose comme doc = nlp(text.decode('utf8')), mais cela vous apportera probablement plus de bugs à l'avenir.

Crédits: https://github.com/explosion/spaCy/issues/380

0
cronos