Skip to content

Commit

Permalink
Début de solution pour les mots composés (Ref #19). A améliorer.
Browse files Browse the repository at this point in the history
Modification temporaire du tokenizer : 
utilisation de spacy.matcher et nlp.add_pipe() pour lier les mots séparés par un - ainsi que une liste de mots avec des espaces (pour l'instant seulement "intelligence artificielle")
Il va falloir trouver comment sauvegarder ces modifications puisque nlp.to_disk('mon_modele') ne marche pas avec la méthode actuelle.
  • Loading branch information
mariastefan committed Jul 4, 2020
1 parent a17fc71 commit a54f585
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,34 @@
import spacy
import fr_core_news_sm
from resolution_coreferences_pronominales.coreferences import relations_entre_mots
from spacy.matcher import Matcher


def nlp_loader():
nlp = fr_core_news_sm.load()
matcher = Matcher(nlp.vocab)
matcher.add('HYPHENS', None, [{'IS_ALPHA': True}, {'ORTH': '-', 'OP': '+'}, {'IS_ALPHA': True}])
liste = ['intelligence artificielle']
for e in liste:
zzz = []
for i in e.split(" "):
zzz.append({'ORTH': i})
matcher.add(e, None, zzz)

def quote_merger(doc):
# this will be called on the Doc object in the pipeline
matched_spans = []
matches = matcher(doc)
for match_id, start, end in matches:
span = doc[start:end]
matched_spans.append(span)
for span in matched_spans: # merge into one token after collecting all matches
span.merge()
return doc

nlp.add_pipe(quote_merger, first=True) # add it right after the tokenizer
return nlp

# Prend une phrase et retourne des informations sur ses pronoms
# Tous les mots sont lemmatisés
# obj/obl : à quoi fait référence le verbe (ex : "Le chien s'est cassé le museau", "museau" : obj de "cassé")
Expand All @@ -18,7 +44,7 @@
def informations_pronoms(phrase: str or spacy.tokens.doc.Doc):
# Nous vérifions si phrase est de type spacy.tokens.doc.Doc pour gagner du temps (car spacy.load('fr') est lent)
if isinstance(phrase, str):
nlp = fr_core_news_sm.load()
nlp = nlp_loader()
doc = nlp(phrase)
else:
doc = phrase
Expand Down Expand Up @@ -117,7 +143,7 @@ def informations_pronoms(phrase: str or spacy.tokens.doc.Doc):
def coreferences_phrase(phrase: str or spacy.tokens.doc.Doc, cache: bool):
# Nous vérifions si phrase est de type spacy.tokens.doc.Doc pour gagner du temps (car spacy.load('fr') est lent)
if isinstance(phrase, str):
nlp = fr_core_news_sm.load()
nlp = nlp_loader()
phrase = nlp(phrase)
infos_pronoms = informations_pronoms(phrase)
coreferences = []
Expand Down Expand Up @@ -195,7 +221,7 @@ def coreferences_phrase(phrase: str or spacy.tokens.doc.Doc, cache: bool):


def affichier_antecedents_dans_phrase(phrase: str, cache: bool):
nlp = fr_core_news_sm.load()
nlp = nlp_loader()
phrase = nlp(phrase)
coreferences = coreferences_phrase(phrase, cache)
phrase_antecedents = ''
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,16 @@
# phrase = "Le chien est tombé dans le puits. Il s'est cassé le museau. Il va ainsi retenir la leçon."
# phrase = "Le chien est tombé dans le puits. Il est profond."
# phrase = "L'humain a mis un coup de poing au chien. Il lui a cassé le museau."
phrase = '\"Le chien est tombé dans le puits. Il s\'est cassé le museau. Il va ainsi retenir la leçon.\"'
# phrase = '\"Le chien est tombé dans le puits. Il s\'est cassé le museau. Il va ainsi retenir la leçon.\"'
# phrase = 'Le chien est tombé dans le puits. Il s\'est cassé le museau. Il n\'y a aucune raison de paniquer.'
# phrase = 'Le chien est tombé dans le puits. Il s\'est cassé le museau. Il n\'y a aucune raison de paniquer.'
# phrase = 'Adrien est tombé dans le puits. Il est maladroit celui-là.'
# phrase = 'Adrien est tombé et a pleuré car Julien l\'a poussé. Il est méchant celui-là.'
phrase = "Adrien est tombé car Julien a crié. Il est méchant celui-là."

infos = analyses_texte.informations_pronoms(phrase)
print(phrase)
for pronom in infos:
print(pronom)
# print(antecedents_rel.antecedents_et_verbe_des_pronoms(phrase_tmp))


Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import sys
import spacy
import fr_core_news_sm
sys.path.append(".")
from resolution_coreferences_pronominales.coreferences import analyses_texte

phrase = u'Aujourd\'hui Volodia est tombé car Julien a crié. Il est méchant celui-là. L\'intelligence artificielle ' \
u'est passionnante.'
nlp = analyses_texte.nlp_loader()
doc = nlp(phrase)
print([token.text for token in doc])

0 comments on commit a54f585

Please sign in to comment.