diff --git a/resolution_coreferences_pronominales/coreferences/analyses_texte.py b/resolution_coreferences_pronominales/coreferences/analyses_texte.py index d7533a4..398f307 100644 --- a/resolution_coreferences_pronominales/coreferences/analyses_texte.py +++ b/resolution_coreferences_pronominales/coreferences/analyses_texte.py @@ -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é") @@ -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 @@ -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 = [] @@ -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 = '' diff --git a/resolution_coreferences_pronominales/tests/test-informations_pronoms.py b/resolution_coreferences_pronominales/tests/test-informations_pronoms.py index e5cecf7..73b9290 100644 --- a/resolution_coreferences_pronominales/tests/test-informations_pronoms.py +++ b/resolution_coreferences_pronominales/tests/test-informations_pronoms.py @@ -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)) + + diff --git a/resolution_coreferences_pronominales/tests/test-pronoms-et-mots-composes.py b/resolution_coreferences_pronominales/tests/test-pronoms-et-mots-composes.py new file mode 100644 index 0000000..b4b8547 --- /dev/null +++ b/resolution_coreferences_pronominales/tests/test-pronoms-et-mots-composes.py @@ -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])