Partage
  • Partager sur Facebook
  • Partager sur Twitter

Épuration de texte

Sujet résolu
    3 juin 2017 à 13:45:06

    Bonjour,

    J'essaye d'écrire un programme java qui, en partant d'un fichier .txt quelconque, donne en sortie une interface avec les mots importants en grand et ceux moins importants avec une police et taille différentes. Pour cela, il faut d'abord enlever toutes les prépositions, ponctuations etc. Ce que j'ai fait, mais je me suis rendue compte qu'il fallait aussi enlever les pluriels et féminin. Par exemple, si dans le texte les mots maison et maisons sont écrits, mon programme considère que ce sont deux mots différents. Et pareil pour bleu et bleue. C'est là où j'ai des problèmes parce que je ne sais pas comment m'y prendre pour enlever ça. Si j'enlève du texte tous les mots qui se terminent par un s ou un e, ça va aussi enlever les mots qui ont naturellement un s ou e en fin (sans être au pluriel ou au féminin), ex : valise, brebis, etc. Faut il créer une méthode qui vérifie pour chaque mot si ce mot + s réapparaît et dans ce cas, ajoute +1 à l’occurrence et supprime le mot avec s ? Comment s'y prendre ?

    Et mon deuxième souci est pour créer l'interface graphique, une fois que j'aurais obtenu chaque mot important et son occurrence, comment créer l'image avec ces mots-là ? Par où commencer ?

    Voila mon code pour le moment : 

    import java.io.*;
    import java.util.*;
    import java.util.ArrayList;
    import java.util.List;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class WordsGetter {
    
       public static boolean toIgnore(String word) {
          List<String> toRemoveWords = Arrays.asList("le", "la", "les", "l", "du", "de", "des", "d", "mais", "ou", "et",
           "donc", "pas", "or", "ni", "car", "dans", "en", "ton", "ta", "tes", "se", "ses", "sa", "son", "ces", "ce",
           "ça", "il", "elle", "on", "je", "tu", "nous", "vous", "ils", "elles", "que", "qu", "un", "une", "qui", 
           "par", "pour", "alors", "ainsi", "cependant", "lui", "ne", "pas", "tous", "toutes", "toute", "quoiqu", "entre"); 
          return toRemoveWords.contains(word); 
       }
    
       public static String readFile(String file_name) throws IOException {
          BufferedReader br = null; 
          String line;
          String text = ""; 
          br = new BufferedReader(new InputStreamReader(new FileInputStream(file_name), "UTF-8")); 
          while ((line = br.readLine()) != null) 
              text = text + line; 
              br.close(); 
              return text; 
          }
    
       public static List<String> getWords(String line) throws IOException {
          List<String> wordsArray = new ArrayList<String>(); 
          Pattern pattern = Pattern.compile("[a-zA-Z]\\p{L}*"); 
          Matcher match = pattern.matcher(line);
          while (match.find()) {  
             if (!toIgnore(match.group().toLowerCase())) 
                wordsArray.add(match.group().toLowerCase()); 
          }
          return wordsArray; 
       }
       
       public static ArrayList<String[]> findOccurrence(List<String> wordsArray) {
          ArrayList<String[]> wordsOccurrence = new ArrayList<String[]>(); 
          Set<String> number = new HashSet<String>(wordsArray); 
          for (String word : number) { 
             String[] newArray = {word, Collections.frequency(wordsArray, word)+""}; 
             wordsOccurrence.add(newArray); 
          }
          return wordsOccurrence; 
       }
    
       public static void main(String argv[]) throws IOException {
          String text = readFile("test.txt"); 
          System.out.println(text);
          
          List<String> wordsArray = getWords(text);
          for (String wordOccur : wordsArray) {
              System.out.println("Mot : " + wordOccur);
           }
          ArrayList<String[]> wordsOccurrences = findOccurrence(wordsArray); 
          for (String wordOccur[] : wordsOccurrences) {
             System.out.println("Mot : " + wordOccur[0] + " ; Occurence : " + wordOccur[1]);
           }
       }
    }



    Merci d'avance pour toute aide.

    • Partager sur Facebook
    • Partager sur Twitter
      3 juin 2017 à 13:52:55

      Ce forum est consacré à Javascript qui est différent de Java !

      Sinon, je ne vois qu'un remède faire appel à un dictionnaire (on en trouve sur la toile), attention aussi aux verbes conjugués.

      • Partager sur Facebook
      • Partager sur Twitter
        3 juin 2017 à 13:55:33

        Excusez moi je n'avais pas fait attention.

        D'accord, merci !

        • Partager sur Facebook
        • Partager sur Twitter
          3 juin 2017 à 17:16:35

          Bonjour,

          Déplacé dans le forum Java ;)

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            16 juin 2017 à 10:57:42

            Rebonjour,

            J'ai bien avancé dans mon programme, la partie épuration est terminée (en entrant un fichier texte en paramètre, ça me ressort les mots et leur nombre d'occurrence sous forme de tableau).

            Mais j'ai toujours un problème pour le passage à l'interface graphique, je ne vois pas par où commencer pour intégrer le programme précédent dans l'interface, faut il créer une nouvelle classe ? Faut il créer une classe wordshape au préalable ?

            Merci d'avance pour toute indication.

            • Partager sur Facebook
            • Partager sur Twitter

            Épuration de texte

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown