Code Monkey home page Code Monkey logo

resolution-des-coreferences-pronominales's Introduction

Résolution des coréférences pronominales

Installation

Se placer dans le dossier resolution-coreferences-pronominales-git et lancer la commande suivante :
sh ./install.sh

Exécution

Pour exécuter une démonstration sur une phrase il suffit de se placer dans le dossier resolution-coreferences-pronominales-git et lancer la commande suivante :
python3 ./resolution_coreferences_pronominales/__main__.py

Désinstallation

Le fichier uninstall.sh sera créé après l'exécution de install.sh.
uninstall.sh déinstallera les packages python qui n'étaient pas présents sur l'ordinateur avant l'exécution de install.sh.
Pour désinstaller :
Se placer dans le dossier resolution-coreferences-pronominales-git et lancer la commande suivante :
sh ./uninstall.sh

Détails sur les fichiers principaux

Il y a 2 fichiers principaux qui contiennent les fonctions suivantes :

  • extraction_mot.py
    • mot_sans_espaces(mot: str)
      Rend le mot sans espaces
      Il n'y a pas de raison d'utiliser cette fonction seule
    • conversion_mot(rq_word: str)
      Rend rq_word sous la forme acceptée dans le lien de REZO-DUMP
      Il n'y a pas de raison d'utiliser cette fonction seule
    • extraction_html(rq_word: str, type_relation: str)
      Rend le code html correspondant depuis REZO-DUMP
      Il n'y a pas de raison d'utiliser cette fonction seule
    • relations_mot(mot: str, type_relation: str, cache: bool)
      Prend le mot, le type de la relation (pour toutes les relations alors type_relation = 'all') et cache (True ou False).
      Rend une liste de listes des relations du mot, récupérées sur jeuxdemots.org, chaque sous-liste contenant dans l'ordre :
      • le nom de l'autre noeud (mot avec lequel 'mot' est en relation)
      • le numero du type de la relation
      • poids de la relation
      • sortante/entrante
    • relations_entre_mots(mots: list, cache: bool)
      mots : liste des mots qui nous intéressent, ex : ["eau", "rivière", "profond"]
      cache : True si on veut utiliser le cache, False sinon
      Rend une liste avec toutes les relations entre les mots de la liste
    • vider_cache()
      Vide le dossier cache
    • supprimer_cache()
      Supprime le dossier cache
  • traitements_phrase.py
    • informations_pronoms(phrase: str or spacy.tokens.doc.Doc)
      Prend une phrase (de type str ou spacy.tokens.doc.Doc) et retourne des informations sur ses pronoms
      Tous les mots sont lemmatisés
      Quelques informations sur ce qu'on peut voir dans infos[2]
      obj/obl : à quoi fait référence le verbe (ex : "Le chien s'est cassé le museau", "museau" : obj de "cassé")
      ROOT : le verbe (racine)
      xcomp : complément qui donne du sens au verbe (ex : "Le chien va(ROOT) retenir(xcomp) la leçon")
      sens : relation sortante/entrante (ex : "Le chien est tombé dans le puits. Il est(sortante) profond.")
      Rend infos, une liste de taille 3 composé de :
      • infos[0] = le pronom (str)
      • infos[1] = [antécédents possibles] (list)
      • infos[2] = {d'autres infos sur le pronom, comme le verbe, le COD...} (dictionary). infos[2] peut contenir des dictionnaires, par exemple dans le cas où on a un 'xcomp' : lorsqu'on arrive sur 'xcomp' on crée un nouveau dictionnaire dans lequel on met des informations sur 'xcomp'
        Exemple de ce que peut rendre la fonction:
        phrase = "Le chien a mordu l'humain. Il lui a cassé le museau. Il va retenir la leçon."
        traitements_phrase.informations_pronoms(phrase)
        Rend : [
        ['Il', ['chien', 'humain'], {'ROOT': 'casser', 'sens': 'sortante'}],
        ['lui', ['chien', 'humain'], {'ROOT': 'casser', 'sens': 'entrante', 'obj': 'museau'}],
        ['Il', ['chien', 'humain', 'museau'], {'ROOT': 'aller', 'sens': 'sortante', 'xcomp': ['retenir', {'obj': 'leçon'}]}]
        ]
    • coreferences_phrase(phrase: str or spacy.tokens.doc.Doc, cache: bool)
      Cette fonction est le but final du projet
      Prend une phrase (de type str ou spacy.tokens.doc.Doc) et retourne à quoi correspond chaque pronom
      Rend une liste de listes, contenant autant de sous-listes qu'il y a de pronoms dans la phrase. Dans chaque sous-liste on retrouve un pronom et le mot auquel il fait référence.
    • affichier_antecedents_dans_phrase(phrase: str, cache: bool)
      Utilise la fonction coreferences_phrase() pour :
      Rend un str contenant la phrase avec les références des pronoms juste à coté des pronoms.
      Ex : "Le chien est tombé dans le puits. Il(chien) s'est cassé le museau."

resolution-des-coreferences-pronominales's People

Watchers

 avatar

resolution-des-coreferences-pronominales's Issues

Pertinent d'ajouter un poids pour dire que plus un antécédent est proche du pronom, plus il a des chances d'être le bon ? Cliquer pour détails.

phrase = 'Aujourd'hui Maria est tombé car Julien a crié. Il est méchant celui-là. '
'Anna aime l'intelligence artificielle. Elle trouve qu'elle est passionnante.'

analyses_texte.affichier_antecedents_dans_phrase(phrase, True)

Aujourd'hui Maria est tombé car Julien a crié. Il(Julien) est méchant celui-là. Anna aime l' intelligence artificielle. Elle(aujourd'hui) trouve qu' elle(aujourd'hui) est passionnante.

probabilité(Aujourd'hui) < probabilité(Maria) < probabilité(Julien) < probabilité(Anna) < probabilité(intelligence artificielle)

Cependant il faut faire attention que ce poids n'influe pas bizarrement sur les poids depuis jeuxdemots.org/rezo-dump.php .
Comment choisir donc ce poids ?

Améliorer la séléction d'antécédents potentiels avec spacy. Cliquer pour exemple.

Adrien est tombé et a pleuré car Julien l'a poussé. Il est méchant celui-là.
["l'", ['Adrien', 'Julien'], {'conj': 'pousser', 'sens': 'sortante', 'cc': 'car', 'obj': "l'"}]
['Il', ['Adrien', 'Julien'], {'ROOT': 'méchant', 'sens': 'sortante', 'nsubj:pass': 'il', 'aux:pass': 'être', 'obj': 'celui'}]
['celui', ['Adrien', 'Julien'], {'ROOT': 'méchant', 'sens': 'sortante', 'nsubj:pass': 'il', 'aux:pass': 'être', 'obj': 'celui'}]
Adrien est tombé et a pleuré car Julien l'(Adrien) a poussé. Il(Julien) est méchant celui(Julien) - là.

head de l' = poussé
enlever les enfants de poussé (dans notre cas Julien, il reste donc que Adrien, pas besoin de jdm)

généralisation :
le, la, l’, les ; lui, leur, eux

et du coup l'inverse de la démarche pour: je, j', me, m’

Pronoms composés (celui-là...). Cliquer pour détails.

Trouver comment prendre en compte les pronoms composés. Spacy (la librairie d'étiquettage morphosyntaxique) sépare même les mots composés avec un - (celle-ci, celui-là). C'est assez compliqué de prendre en compte ces mots la du coup puisque c'est Spacy qui s'occupe d'étiquetter les mots, et je ne pense pas que ça soit possible de modifier Spacy en lui-même. Il faudrait peut-être utiliser un autre parseur que Spacy mais le problème c'est qu'il a l'air d'être le meilleur en français, CoreNLP par exemple n'a même pas la lemmatisation (en plus c'est en Java, il faudrait prendre 2 jours pour tout réecrire, voir plus puisque c'est pas une simple traduction vu qu'on change le parseur donc plein de choses changent, pas juste la syntaxe).

Après avoir résolu le pb des mots séparés par un - il faudra voir aussi les mots composés sans -

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.