IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Enlever les redondances des listes de mots


Sujet :

Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 175
    Points : 64
    Points
    64
    Par défaut Enlever les redondances des listes de mots
    Bonjour à tous,

    J'ai des fichiers contenant chacun des dizaines de milliers de mots simples et complexes. Nous avons remarqué que quelques mots se répètent plusieurs fois mais qui non qu'un seul sens sémantique dans notre cas (Par exemple, dans l'un des fichiers on trouve plein des Préfectures ( des différentes villes), Hôtels et parcs nationale.....). Du coup, notre idée est d'enlever ces redondances et de garder que le mot qui se répètent. Par exemple, pour les préfectures ( Préfecture de Paris, Préfecture de nantes... ----> on ne gardera que le mot Préfecture, pareil pour les autres comme Hôtels et Parcs).

    Avez-vous une idée comment le faire, s'il y-a une fonction prédéfinie ou api qui peut m'aider à le faire d'une manière efficace puisque chaque fichier contient des dizaines de milliers de mots..

    parfois le mot qui se répetent est complexe: par exemple le mot parc national (parc national de clichy, parc national de nanterre,...) --> pour cet exemple nous devons garder que le mot parc national....

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il y a 2 approches :
    1. l'approche sémantique : c'est un domaine qui a ses spécialistes dont je ne fais pas partie (il existe de outils qui font d'ailleurs ces regroupements).
    2. l'approche que je qualifirais de naïve

      Déjà je commencerais par définir une notion de motif (à base de regexp et/ou de tests divers), qui permetrait d'une part de reconnaître un motif (par exemple "Prefecture(s) (de <quelquechose>")) et d'y associer l'expression à conserver (ici "Préfecture"). Bien sûr, il faut inventorier toutes les expressions qu'on veut reconnaître et ça peut être fastidieux suivant le nombre.
      Mais sans passer par une analyse sémantique, la reconnaissance de motif risque de devenir une usine à gaz avec plein de tests.

      Ensuite, parser le texte, en cherchant ce qui correspond à un motif : au lieu d'obtenir une liste de String (mots), on cherche à obtenir une liste d'objets, qui sont soit des String (les mots qui correspondent à aucun motif), soit une expression correspondant à un motif (donc en gros, une abstraction(ou interface) avec 2 implémentations concrètes sous forme de wrapper. Ensuite, un dédoublonnage (les wrappers de String se dédoublonnes sur égalité des mots, les autres sur l'égalité d'un identifiant de motif) permet de ne conserver qu'une seule occurrence de chaque.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 175
    Points : 64
    Points
    64
    Par défaut
    Je vous remercie pour votre réponse rapide.

    Mais la taille et le nombre des fichiers est énorme et c'est vraiment trop difficile de parser manuellement tous les fichiers pour identifier les mots (motifs) qui se répètent et ainsi définir des regex particuliers..

    y' t-il un autre moyen ou une autre idée s'il vous plaît ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    En gros tu veux pouvoir entrer n'importe quel texte qui parle de n'importe quoi et que le programme soit capable de reconnaître des groupes de mots comment étant similaires sémantiquement et en extraire une version synthétique ! On touche à la linguistique-là, et tout un tas de techniques et algorithmes, que je n'ai fait qu'aborder lors de mes études, mais qui sont un domaine très spécialisé, qui n'a pas spécifiquement plus de rapport avec Java ou un autre langage.
    Existe-t-il des programmes qui font ça, qui proposent services ou API utilisables en Java. Oui : j'en ai intégré un (moteur de recherche et d'analyse sémantique) mais il est payant (et cher), donc je ne le citerais pas ici. En existe-t-il des gratuits ? Je n'en sais rien.

    En ce qui concerne le volume, il n'y a pas de secret : qu'il y ait 5 fichiers ou 5 millions, il faudra tous les traiter.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Mars 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 21
    Points : 33
    Points
    33
    Par défaut
    Salut,

    Je vais commencer par une remarque un peu contrariante:
    A supposer que tu as un algorithme qui fait comme tu dis: quand il trouve plusieurs parc nationaux: "parc national" de clichy et "parc national" de nanterre il va garder parc national, car c'est ce qui est commun, à ce stade il me semble que la partie commune va jusqu'à "parc national de ", du il va avoir du mal à s'arrêter à "parc national". Ensuite dans tes donnés, si tu as parc national de nanterre, il est fort probable que tu ait aussi piscine de nanterre, du coup l'algorithme ne risque-t-il pas de trouver que nanterre se répète, et que c'est donc nanterre qu'il faut garder...

    Ensuite, je ne suis pas convaincu que ton salut vienne du forum java, car là ton problème est un problème de math et la façon de le traiter est certainement à trouver du côté de ces mêmes maths. Mais maigre connaissance sur le sujet m'inciteraient à regarder les arbres utilisés pour faire du pattern matching et des recherches de séquence. J'ai oublié le nom de ces arbres mais on m'en avais expliqué la technique en m'expliquant que dans un contexte Big Data cette technique pouvait être utilisée pour les analyses de textes. Ces arbres ressemblent aux arbres lexicographiques. Mais là google va être ton ami car à mon avis une petite étude bibliographique s'impose.

    bon courage,

    Pierre

Discussions similaires

  1. Enlever les diacritiques des mots arabes
    Par bayouta19 dans le forum Langage
    Réponses: 11
    Dernier message: 09/12/2013, 15h44
  2. requetes eviter les doublages des listes
    Par gremy63 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/05/2008, 11h23
  3. Enlever les barres des formulaires
    Par RudyWI dans le forum IHM
    Réponses: 2
    Dernier message: 24/04/2008, 09h47
  4. les redondances en listes chainées?
    Par milouky dans le forum C
    Réponses: 13
    Dernier message: 14/04/2007, 23h29
  5. Réponses: 1
    Dernier message: 03/11/2005, 14h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo