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

avec Java Discussion :

Supprimer le caractère ' à partir d'un texte


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 60
    Points : 43
    Points
    43
    Par défaut Supprimer le caractère ' à partir d'un texte
    Bonsoir,

    j'ai un programme java ou je lis un texte à partir d'un fichier .doc avec Scanner() et puis je réalise des traitement sur ce texte. comme premier traitement je veux supprimer tous les ' apostrophes présentes. j'ai essayé skip() et replace mais ça marche pas. avez vous d'autres fonctions à me proposer?

  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 : 54
    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,

    Quand tu dis fichier .doc, tu parles de fichier Microsoft Word ?

    Et de quelle méthode replace() tu parles ?

    Un Scanner est efficace pour lire du flux depuis la console, éventuellement pour du flux texte (personnellement, je préfère un BufferedReader et FileReader, mais soit, va pour le Scanner).
    Par contre, pour lire un fichier et le modifier, il faut, en fait, le lire d'un coté, et en écrire un autre de l'autre (et éventuellement, à la fin, supprimer le fichier d'origine, et renommer le nouveau). Tu ne peux pas remplacer à la volée, dans un fichier des caractères par d'autres, surtout si, en plus, si ce n'est pas le même nombre de caractères (remplacer une quote par rien, donc remplacer 1 caractère par 0 caractère).

    En ce qui concerne un doc word, pour le coup, comme ce n'est pas un fichier texte, les apostrophes ne sont certainement pas lisible sous forme de quote, et en plus tu risques de corrompre la structure du fichier.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 60
    Points : 43
    Points
    43
    Par défaut
    Merci pour la réponse

    oui, je lis le contenu d'un fichier Microsoft Word .doc ou un .txt, je récupère ce contenu pour construire un résume, alors je vais pas réécrire le fichier. mais j'ai besoin de supprimer les apostrophes car la méthode : scanner.hasNextLine() saute tout un paragraphe si elle tombe sur une apostrophe et je perd du contenu. j'ai utilisé replaceAll(), mais elle me pose un problème pour la suite. .

  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 : 54
    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
    Il n'y a aucune raison que hasNextLine() saute des paragraphes, s'il y a des quotes dans le texte. Il doit y avoir un autre problème dans ton code de lecture. Postes-le que je puisse voir.

    Pour les fichiers Word, il ne faut pas utiliser Scanner. Un fichier .doc est un fichier qui a une structure particulière (BIFF). Tu dois utiliser une API adaptée, comme par exemple, Apache POIFS, pour le lire. Et tu pourras récupérer le texte sans perdre de paragraphe.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 60
    Points : 43
    Points
    43
    Par défaut
    Je dois préciser que le problème de saut de paragraphes se pose pour les fichiers .txt et .doc. pour le code le voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    package Application_finale2;
     
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.StreamTokenizer;
    import java.io.StringBufferInputStream;
    import java.util.ArrayList;
    import java.util.Scanner;
     
    public class ReadCorpus {
    	static ArrayList<ArrayList<String>> LirTockenizCorpus(String directoryPath) throws IOException {
    		File directory = new File(directoryPath);
    		ArrayList<ArrayList<String>> Words=new ArrayList<ArrayList<String>>();
    		if(!directory.exists()){
    			System.out.println("Le fichier/répertoire '"+directoryPath+"' n'existe pas");
    		}else if(!directory.isDirectory()){
    			System.out.println("Le chemin '"+directoryPath+"' correspond à un fichier et non à un répertoire");
    		}else{
    			//lister le contenu du dossier
    			File[] subfiles = directory.listFiles();
    			int longueur=subfiles.length;
    			//lire le contenu des fichiers
    			String filePath="";
    			String S="/";
     
     
     
    			for(int i=0;i<longueur;i++)
    			{//ArrayList<String> docu=new ArrayList<String>();
    			filePath=directoryPath.concat(S.concat(subfiles[i].getName()));
    			Scanner scanner=new Scanner(new File(filePath));
    			String Text="";
    			while (scanner.hasNextLine()) {
    				ArrayList<String> docu=new ArrayList<String>();
    			     Text = scanner.nextLine();//contenu d'un paragraphe
    			     Text=Text.replaceAll("'*"," ");
    			     Text=Text.toLowerCase();
    			     InputStream in;
    			      in = new StringBufferInputStream( Text );
    			      StreamTokenizer parser = new StreamTokenizer( in );
    			      while ( parser.nextToken() != StreamTokenizer.TT_EOF )
    			         {
    			         if ( parser.ttype == StreamTokenizer.TT_WORD) docu.add(parser.sval);
    			        }
    				Words.add(docu);
    			}
     
    			scanner.close();
    			}	
    		}
    		return Words;
     
    	}	
    }

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par hanadi_09 Voir le message
    mais j'ai besoin de supprimer les apostrophes car la méthode : scanner.hasNextLine() saute tout un paragraphe si elle tombe sur une apostrophe
    Absolument pas. C'est StreamTokenizer qui fait ça.
    Cela arrive parce qu'une apostrophe indique le début d'un token string littéral, et que typiquement il ne verra jamais d'autre apostrophe sur la même ligne pour terminer ce token.

    StreamTokenizer sert à faire des parseurs de langage informatique, il n'a rien à faire sur du langage naturel comme on en trouve dans les fichiers .txt
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 60
    Points : 43
    Points
    43
    Par défaut
    Absolument pas. C'est StreamTokenizer qui fait ça.
    Cela arrive parce qu'une apostrophe indique le début d'un token string littéral, et que typiquement il ne verra jamais d'autre apostrophe sur la même ligne pour terminer ce token.
    Si j'ai bien compris scanner.hasNextLine() lit tout le texte et c'est StreamTokenizer() qui supprime ce qu'il y a après une apostrophe. Je dois dire que StreamTokenizer() me convient bien (je travaille sur l'anglais) sauf cette histoire d'apostrophe, quelqu'un pourrait me dire comment faire pour régler ce problème d'apostrophe?

  8. #8
    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 : 54
    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
    L'anglais n'est pas un langage informatique

    Si le but est de découper les chaînes lues par scanner.nextLine(), suivant les espaces, tu peux très bien faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] mots = scanner.nextLine().split(" ");
    Si tu veux découper ta chaîne plus finement, par exemple, en prenant en compte la ponctuation, le paramètre de split est une expression régulière.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String[] mots =  scanner.nextLine().split("[ ,;:!?.]+");
    Ou une version plus complète de la regexp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String[] mots =  scanner.nextLine().split("[ .!?,;:\"()\\[\\]*§+/]+");
    Avec cette dernière, les mots composés avec des tirets ne sont pas séparés (mais attention toutefois aux nombres négatifs qui le sont). Les mots avec quotes ne sont pas séparés non plus. Les parenthèses et crochets sont ignorés (supprimés du résultat). Les guillemets sont ignorés également.

    Par exemple :
    J'ai rendez-vous (ce soir) près de l'arbre centenaire.
    donne
    J'ai
    rendez-vous
    ce
    soir
    près
    de
    l'arbre
    centenaire
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 60
    Points : 43
    Points
    43
    Par défaut
    Merci beaucoup, ça résout mon problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer tous les caractères à partir de 120
    Par esisa1 dans le forum Shell et commandes POSIX
    Réponses: 5
    Dernier message: 14/02/2012, 10h32
  2. Réponses: 1
    Dernier message: 12/05/2010, 19h52
  3. [XSLT] Supprimer les caractères spéciaux HTML d'un noeud texte
    Par Invité dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 25/12/2008, 22h59
  4. Réponses: 2
    Dernier message: 27/08/2008, 09h13
  5. Réponses: 1
    Dernier message: 06/08/2007, 03h23

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