2017-07-06 2 views
1

Je suis plutôt nouveau sur python (en utilisant python 3) et spacy (et aussi en programmation). S'il vous plaît, supportez avec moi.Séquenceur de phrases et analyseur de dépendances

J'ai trois questions où deux sont plus ou moins les mêmes, je ne peux pas le faire fonctionner. J'ai pris la "recherche spécifique à la syntaxe avec spacy" (example) et essayé de faire fonctionner différentes choses.

Mon programme se lit actuellement txt et l'extraction normale

if w.lower_ != 'music': 
return False 

de travaux.

Ma première question est: Comment puis-je obtenir spacy pour extraire deux mots? Par exemple: "musique classique" Avec l'extrait ci-dessus mentionné, je peux le faire extraire classique ou de la musique. Mais si je ne recherche que l'un des mots, je reçois aussi des résultats que je ne veux pas.

classique - période/ère

Ou quand je regarde la musique que

Musique - baroque, moderne

La deuxième question est: Comment puis-je obtenir les dépendances au travail?

La dépendance exemple avec:

elif w.dep_ != 'nsubj': # Is it the subject of a verb? 
return False 

fonctionne très bien. Mais tout ce que j'ai essayé ne marche pas vraiment. Par exemple, je veux extraire des phrases avec le mot «anniversaire» et la dépendance «DATE». (Si la dépendance est une entité)

Je suis

if d.ent_type_ != ‘DATE’: 
return False 

Pour.

Il serait maintenant ressembler à:

def extract_information(w,d): 
if w.lower_ != ‘birthday’: 
return False 
elif d.ent_type_ != ‘DATE’: 
return False 
else: 
return True 

Est-ce que quelque chose comme ça même travail? Si cela fonctionne la troisième question serait comment je peux filtrer des phrases par exemple avec une date. Donc si la phrase contient un certain mot et une DATE l'excluent. Dernière chose peut-être, j'ai lu quelque part que les dépendances sont basées sur le "Stanford typed dependencies manual". Existe-t-il une liste de ces dépendances fonctionnant avec spacy?

Nous vous remercions de votre patience et votre aide :)

Répondre

0

Avant d'entrer dans quelques suggestions simples offrant à vos questions, vous avez essayé d'utiliser visualiser de displaCy sur certaines de vos phrases? En utilisant un exemple de phrase 'L'anniversaire de John était hier', vous verrez que dans la phrase analysée, anniversaire et hier ne sont pas nécessairement des dépendances directes les uns des autres. La recherche basée sur le mot d'anniversaire ayant une dépendance d'une entité de type DATE peut ne pas donner les meilleurs résultats.Sur la première question: Une méthode de force brute serait de rechercher correspondant mots après avoir analysé la phrase.

doc = nlp(u'Mary enjoys classical music.') 

for (i,token) in enumerate(doc): 
    if (token.lower_ == 'classical') and (i != len(doc)-1):    
     if doc[i+1].lower_ == 'music': 
      print 'Target Acquired!' 

Si vous n'êtes pas sûr de ce que l'énumération fait, recherchez-le. C'est la façon pythonique d'utiliser python. Pour les questions 2 et 3, une manière simple (mais pas élégante) de résoudre ceci consiste à simplement identifier dans une phrase analysée si le mot «anniversaire» existe et s'il contient une entité de type «DATE». En ce qui concerne la liste des dépendances, je suppose que vous faites référence aux étiquettes Part-of-Speech. Consultez la documentation sur ce page.

Bonne chance! J'espère que cela a aidé.

+0

je vous remercie pour l'aide rapide que j'ai maintenant eu le temps de le tester. Le visualisateur de displacy était un bon pourboire qui m'a montré que ma compréhension d'une phrase n'est pas comme les spacys :) J'ai essayé vos méthodes et elles fonctionnent toutes seules. ce qui signifie: je ne peux pas les amener à travailler dans mon programme (désolé) la commande DATE malheureusement ne se connecte pas à l'instruction précédente donc à la place il me liste toutes les dates trouvées. Savez-vous comment résoudre ce problème? Deuxièmement, ma commande d'impression est 'pour mot dans document_read: si extract_information (mot): print (' '. Join (w.string pour w dans word.head.subtree) .strip())' – My3vilMe

+0

et j'obtiens l'erreur message 'extract_information() missing 1 argument positionnel requis'. compréhensible parce que nous avons utilisé i comme deuxième argument. mais si j'inclus le i -> 'extract_information (mot, je)' je reçois le message d'erreur 'nom' je 'n'est pas défini' aussi compréhensible mais je ne sais pas comment le définir et l'inclure dans le 'print ('' .join (w.string pour w dans word.head.subtree) .strip() '. Je suis actuellement en train d'essayer de le réparer, donc je vais mettre à jour si je l'ai obtenu par moi-même merci encore – My3vilMe

+0

@ My3vilMe pourrait Vous partagez/expliquez tout le processus que vous essayez d'atteindre? J'ai de la difficulté à comprendre ce que vous cherchez dans les deux commentaires ci-dessus, et peut-être aussi fournir un exemple indiquant votre résultat souhaité pour un exemple de phrase. – Albert