Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1360 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Résolu] Convertir regexp Perl->Java

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Convertir regexp Perl->Java

n°2044860
axert19
Posté le 28-12-2010 à 18:20:26  profilanswer
 

Bonjour,
 
Je réalise un programme en Java et j'ai un fragment de code perl que je n'arrive pas à convertir, utilisant les regex pour récupérer les mots d'une chaine de caractères.
 
Voici le code perl qui me pose problème :

Citation :

@formes = split(/\s*[,\.\?\!\;\:\(\{\[\)\]\}]?\s+/, $ligne);


 
que j'ai tenté de convertir en Java :  
String[] mots = ligne.split("\\s*[\\.\\,\\!\\?\\;\\:\\(\\)\\{\\}\\[\\]]?\\s+" );
 
Mais vu le résultat de mon programme, ça n'a pas l'air de très bien fonctionner (le reste de mon programme est Ok).
 
De même, je n'arrive pas à traduire :

Citation :

if ($forme !~ /^(.)\1+$/ && $forme !~ /^(\s+|[\s\&\"\'\#\{\(\[\|\-\`\\\_\)\]\=\}\*\+\:\%]+)$/) { ... }


 
 
Voilà, si un expert Java a un peu de temps à me consacrer je l'en remercie beaucoup. :jap:


Message édité par axert19 le 29-12-2010 à 20:42:08
mood
Publicité
Posté le 28-12-2010 à 18:20:26  profilanswer
 

n°2044874
gilou
Modérateur
Modosaurus Rex
Posté le 28-12-2010 à 20:42:51  profilanswer
 

En tout cas, écrire en perl [,\.\?\!\;\:\(\{\[\)\]\}] dans une regexp, c'est déjà surprenant, vu que dans un groupement de caractères entre [ et ] il n'y a pas besoin d'échapper avec \ la plupart des caractères (sauf \] bien sur, \\, \-, \b, et \^ s'il figure en premier).
Donc ceci serait beaucoup plus justement réécrit en perl comme [,.?!;:({[)\]}] voire [][(){},.?!;:] (cette dernière forme obtenue car il y a des règles spéciales pour \] qu'on trouve dans la doc perl, à Special Characters Inside a Bracketed Character Class: si le ] est après le [ ou [^ il a son sens habituel de caractère et non de fin de classe commençant avec [, sinon, il faut employer \].)
A+,


Message édité par gilou le 28-12-2010 à 20:46:17

---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- No jab ? No job ! -- (╯°□°)╯︵ ┻━┻
n°2045021
axert19
Posté le 29-12-2010 à 19:44:00  profilanswer
 

Bonjour,

 

merci beaucoup pour ta réponse. En fait j'avais mal lu, la chaîne de découpage est la suivante :

Citation :

 @formes = split(/[\p{IsPunct}\p{IsSpace}\p{IsBlank}\p{IsDigit}]+/, $ligne);

 

if ($forme !~ /^(.)\1+$/ && $forme !~ /^(\s+|[\s\&\"\'\#\{\(\[\|\-\`\\\_\)\]\=\}\*\+\:\%]+)$/)
{...}

 

et

Citation :

if ($ngram !~ /^[\s&\"\'\#\{\(\[\|\-\`\\\_\)\]\=\}\*\+\:\%]+$/)
{...}

 

Mais ta remarque est valable et j'en prends note. Du coup, j'en déduis pour le deuxième quote qu'il s'agit de vérifier que la variable ne doit pas être constituée uniquement des caractères  : \s&"'#{([|-`\_)]=}*+:%... Que j'ai donc traduit en java par :
if(! Pattern.matches("^[\\s&\"'#{(\\[|-`\\_)\\]=}*+:%]+$", ngram) ) {...}
Mais j'ai une exception à l'exécution (caractères inattendus dans la regex...)

 

En fait c'est dommage car les résultats que j'obtiens ne sont pas super, alors que le reste de mon script marche :/ . En fait il s'agit d'un projet pour déterminer la langue d'un document de langue inconnue... et donc si les mots du fichier à analyser sont mal découpés (en utilisant justement ces regex) ça fausse les calculs  :pt1cable:

 


[edit] : en fait là où apparait un '\' en perl, et bien il suffit de rajouter un \ en java, sauf dans le cas de certains caractères : \", \' ... qui restent pareil.

 

De même pour \p{isPunct} qui va devenir en java \\p{Punct} (bien Punct et pas isPunct)


Message édité par axert19 le 29-12-2010 à 23:41:37
n°2045063
gilou
Modérateur
Modosaurus Rex
Posté le 30-12-2010 à 00:25:59  profilanswer
 

Tu avais regardé les techniques employées dans le module perl Lingua::Identify ?
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- No jab ? No job ! -- (╯°□°)╯︵ ┻━┻
n°2045067
axert19
Posté le 30-12-2010 à 01:53:45  profilanswer
 

Bonsoir,

 

En fait il s'agit d'un tp scolaire. Une première étape consiste à se servir de documents existants dans différentes langues et d'apprendre les mots. En fonction de leurs occurrences dans les fichiers on détermine les probabilités liant les mots aux différentes langues.

 

Puis une deuxième étape consiste à déterminer la langue d'un document inconnu. On procède de même mais au lieu de réaliser une phase d'apprentissage on va utiliser les résultats précédents pour calculer les probabilités du fichier d'appartenir à chacune des langues (voire aucune si les mots n'ont pas tous été trouvés dans notre "dictionnaire" ).

 

C'est pas très utile, mais c'est dans un cadre scolaire :D  :jap:


Message édité par axert19 le 30-12-2010 à 01:58:58
n°2047441
Ju -
Posté le 07-01-2011 à 17:52:05  profilanswer
 

Salut,
Alors très rapidement car le weekend n'attend pas (ouioui 17h50), je propose la regex approximative suivante, si le but est comme je l'imagine de capturer les mots:
"[A-Za-z]+[\\.\\,\\!\\?\\;\\:\\(\\)\\{\\}\\[\\] ]+"
 
Bonne année!


Message édité par Ju - le 07-01-2011 à 17:52:36

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Résolu] Convertir regexp Perl->Java

 

Sujets relatifs
Convertir un tableau en liste de données VBA sous ExcelPlugin pour une application en Java
[Perl] Demande authentification avec le script mais pas avec Firefox[java] Afficher une BufferedImage dans un Jframe ?
traduction du diagrame de classe UML en JAVAboutons en java
Code Igniter et JqUploaderCréer EXE à partir d'un code aspx (.NET)
Drop and drag - Java - Jeux de dameaider moi a compiler mon code
Plus de sujets relatifs à : [Résolu] Convertir regexp Perl->Java


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)