split + perl - Perl - Programmation
Marsh Posté le 06-11-2013 à 03:12:01
Citation : le problème lorsque il ya des mots tels que : il le decompose en deux alors que c'est un seul mot !!! |
Non, chez moi ce code marche correctement avec les fichiers CorpusNettoye.txt et tata.txt en utf-8 et les ouvertures avec
open (IN_Ara, "<:utf-8", $FicAraInt ) or die "erreur d'ouverture.";
open (OUT_Ara, ">:utf-8", $FicAraOut ) or die "Impossible ouvrir fichier $FicAraOut en sortie\n";
Citation : je veux savoir pkoi dans l'affichage au lieu de m'afficher : .أَيْ تْفَضَّلْ خُويَا |
Pareil, en utilisant des fichiers en UTF-8 je n'ai pas de déplacement du point dans le fichier d'arrivée.
A+,
Marsh Posté le 06-11-2013 à 08:58:21
pour la segmentation c'est bon , mais pour le nettoayage de corpus ,
car au lieu de m'afficher :
. أَيْ تْفَضَّلْ خُويَا
مْعَ وَقْتَاشْ بِاللهْ التْرَانْ يِمْشِي ؟
. مَاضِي سَاعَةْ وَ أَرْبْعَةْ
il m'affiche :
أَيْ تْفَضَّلْ خُويَا.
مْعَ وَقْتَاشْ بِاللهْ التْرَانْ يِمْشِي ؟
مَاضِي سَاعَةْ وَ أَرْبْعَةْ.
le problème seulement avec les points ( les points d'interrogation restent à gauche ) !!!!!! est ce que le problème parceque je suis sous ubunto ???
Marsh Posté le 06-11-2013 à 11:42:54
Il me faudrait vôtre fichier de départ pour que je puisse tester.
A+,
Marsh Posté le 06-11-2013 à 11:52:44
voilà mon fichier de depart :
<dialogue>
<Agent>.أَيْ تْفَضَّلْ خُويَا </Agent>
<Client>مْعَ وَقْتَاشْ بِاللهْ التْرَانْ يِمْشِي ؟</Client>
<Agent>.مَاضِي سَاعَةْ وَ أَرْبْعَةْ</Agent>
<Client>مَا ثَمَّاشْ وَاحِدْ آخِرْ تَوَّةْ؟</Client>
<Agent>.لاَ هَاكَ هَذَاكَ هُوَ</Agent>
<Client>ثَمَّاشِي وَاحِدْ آخِرْ بَعْدُو؟</Client>
<Agent> ثَمَّةْ الحْدَاشْ مْتَاعْ اللِيلْ </Agent>
</dialogue>
<dialogue>
<Client>سَلَامُ عَلَيْكُمْ بِاللهْ تِكَايْ لْتُونِسْ بْقَدَّاهْ ؟</Client>
<Agent>ثْنَاشْ وُ تْسْعَةْ مِيَّةْ</Agent>
</dialogue>
<dialogue>
<Client>.سَلَامُ عَلَيْكُمْ</Client>
<Client>.زُوزْ زُوزْ لْتُونِسْ</Client>
<Client>وَقْتَاشْ يُخْرِجْ هُوَ؟</Client>
<Agent>.مَاضِي سَاعَةْ وُ رْبُعْ</Agent>
</dialogue>
<dialogue>
<Agent>.أَيْ خُويَا</Agent>
<Client>بِاللهْ تِسْكْرَةْ لْتُونِسْ مَاضِي سَاعَةْ</Client>
<Client>مَاضِي سَاعَةْ وُ قَدَّاشْ هُوَ؟</Client>
<Agent>وُ رْبُعْ حْدَاشْ وُ تْسْعَةْ مِيَّةْ</Agent>
<Agent>شُوفْلِي تْسْعَةْ مِيَّةْ يْعَيِّشِكْ</Agent>
<Client>.مَا عَنْدِيشْ تِسْعَةْ مِيَّةْ</Client>
<Agent>خَمْسَةْ آلاَفْ عَنْدِكْشِي؟</Agent>
<Agent>.بَرَّةْ جِيبْلِي أَلْفِينْ</Agent>
</dialogue>
Marsh Posté le 06-11-2013 à 14:28:04
Ben non. Avec votre code modifié pour travailler dans mon répertoire de travail:
Code :
|
et en copiant-collant votre source sous notepad et en le sauvant en utf-8, j'obtiens un résultat correct:
.أَيْ تْفَضَّلْ خُويَا |
A+,
Marsh Posté le 06-11-2013 à 14:55:29
ça marche pas pour moi ; en fait le chagement de code de :
Code :
|
vers
Code :
|
les balises xml ds ce cas ne sont pas supprimé
Marsh Posté le 06-11-2013 à 15:38:12
Je n'ai pas fait de changement de code du tout (sauf pour les noms de fichiers et le fait qu'ils sont explicitement en utf-8).
Manifestement, c'est le code du forum qui a transformé les < en < quand j'ai fait un copier-coller.
A+,
Marsh Posté le 06-11-2013 à 15:40:30
alors le mme problème persiste encore pour moi toujours le point est au debut de la phrase et non pas à la fin !!!
une autre question gilou SVP :
après avoir afficher le continu d'un fichier dans un Scrolled , je veux executer une autre fonction et affficher le resultat dans le meme Scrolled , cependant le texte s'ajoute tjours , j'ai fait : $txt->delete(0,'end'); mais dans ce cas l'ancien texte est supprimer et le resultat ne s'affiche pas !! que dois je faire !!
merci d'avance
Marsh Posté le 06-11-2013 à 16:32:56
Ce genre d'exemple n'est pas explicite?
Code :
|
A+,
Marsh Posté le 06-11-2013 à 18:31:11
bsr gilou , merci en fait il suffit de changer $textbox->delete('1.0', 'end'); : par $textbox->delete('0.0', 'end');
ainsi avec l'arabe j'ai tjrs des problèmes d'affichage en effet pour ouvrir un fichier contenant :
اَ هَاكَ هَذَاكَ هُوَ
ثَمَّاشِي وَاحِدْ آخِرْ بَعْدُو
ثَمَّ الحْدَاشْ مْتَاعْ اللِيلْ
سَلَامُ عَلَيْكُمْ بِاللَهْ تِكَايْ لْتُونِسْ بْقَدَاهْ
ثْنَاشْ وُ تِسْعَةْ مِيَّةْ
سَلَامُ عَلَيْكُمْ
كُلْ عَامْ وَانْتِي بْخِيرْ
بَارَكَ اللهُ فِيكْ
رَبِّي يوَصْلَكْ سَالْمَةْ
يْبَارِكْ فِي عُمْرِكْ سَلَامُ عَلَيْكُمْ بِاللَهْ تِكَايْ لْتُونِسْ بْقَدَاهْ
voici le code :
Code :
|
vous pouvez testé et voir le resultat c'est une ecriture illisible , je ne sais pas la cause , qu'en pensez vous ????
Marsh Posté le 06-11-2013 à 23:34:33
Par défaut on doit être avec une fonte systeme de taille fixe, donc le rendering est moche.
En insérant:
$widget_texte->configure(-font => [-family => 'Arial']);
après avoir défini le $widget_texte, ça devient bien bien meilleur (en partant de ton exemple de texte, sauvé dans un fichier utf8)
Code :
|
Ça me semble assez correct. Bon, il y a peut être des fontes encore plus adaptées.
A+,
Marsh Posté le 07-11-2013 à 07:44:23
bjr,
peut etre sur windows le problème est résolu mais sur ubunto l'écriture est tjrs illisible , vous pouvez testeé sur ubunto et voir le resultat !!!
Marsh Posté le 07-11-2013 à 11:30:53
Désolé, mais je n'ai pas de machine sous linux pour tester, Arial étant une fonte typiquement Windows, choisissez en une qui soit typiquement linux pour tester. S'il n'y a pas de progrès, c'est alors sans doute une limitation de Tk sous linux, et je n'ai pas de solution pour cela.
A+,
Marsh Posté le 07-11-2013 à 12:05:56
sous linux il ya le font : {Simplified Arabic} mais ça ne resou pas le problème malheureusement !!!
Marsh Posté le 07-11-2013 à 15:46:57
Si vous avez une fonte qui affiche correctement votre texte dans une fenêtre linux, choisissez celle la pour le script.
A+,
Marsh Posté le 09-11-2013 à 19:24:51
bsr,
mme avec {Simplified Arabic} le problème reste encore !!!!
Marsh Posté le 11-11-2013 à 09:47:14
bjr gilou,
j'ai passé des nuits à cherché une solution à mon pblme d'affichage de l'arabe sous linux , mais malheureusement j'ai rien trouvé , sauf sur un forum voici ce qu'ils disent :
L'informatique ayant été inventé par des occidentaux pour des occidentaux, les alphabets complexes qui comportent notamment des caractères à échappement nul sont rarement pris en compte correctement, du moins avec les outils conçus avant l'an 2000 en gros !
Des foutoirs similaires sont observables en Word 2000 (après je ne sais pas), Ultraedit version de 2013... à ce jour je n'ai trouvé que le bloc note de Windows qui ne se comporte pas trop mal... et encore c'est une galère pour faire un copier/coller ou pour positionner un point d'exclamation ou d'interrogation...
Si tu dois diffuser ton application, Perl/Tk n'est pas la bonne solution, tu n'arriveras pas à afficher de l'arabe dans un scrolled text voir la longue discussion
Pour de l'affichage uniquement on obtient de vrais bons résultats en HTML...
Prospecte auprès d'informaticiens véritablement arabophones, qui pourront mieux que moi t'orienter vers des outils adaptés, s'il en existe...
En résumé, en arabe dans un scrolled text :
- Le texte s'il est cadré à droite, comme il se doit, il est décalé vers la gauche d'autant de caractères qu'il y à de diacritiques dans la phrase !
Si tu affichais du texte SANS diacritique se phénomène serait résolu !
SVP si vous avez compris pouvez vous m'expliquer !!!
merci d'avance !!
Marsh Posté le 11-11-2013 à 12:23:13
C'est plus ou moins simple à comprendre:
Sous windows, il y a un moteur unique service de rendu des fontes qui quand on lui passe une chaîne de texte unicode, fait le travail de combinaison de caractères, calcul des positionnements et affichage. Sous Mac, c'est la même chose.
Une application qui a besoin d'afficher du texte fait appel à ce service a travers une API système, et pratiquement toute les applications travaillent ainsi (sauf peut être celles d'Adobe, qui utilisent un moteur de rendu propriétaire).
Sous unix/linux, un tel service n'existe pas "en standard", puis qu'il n'y a pas de GUI standard pour ces systèmes.
Je ne sais pas à quelle librairie Tk fait appel sous linux pour afficher du texte unicode (edit, j'ai trouvé, c'est Xft) mais si elle se comporte comme tu le dis
>> il est décalé vers la gauche d'autant de caractères qu'il y à de diacritiques dans la phrase !
C'est qu'elle est buggée (ou que le code d'interface de Tk avec cette librairie l'est) et calcule à un moment la longueur de la ligne avec le nombre de caractères unicodes, au lieu de calculer cette longueur avec le nombre de glyphes après combinaisons. De toute façon, c'est au niveau de l'implémentation interne de Tk que ça se passe, et donc non correctible à moins de vouloir rentrer dans le code de l'implémentation de Tk (ou de ce à quoi elle fait appel)
Sous Linux, il existe (entre autres) un moteur de rendu, FreeType, au dessus duquel est construit une librairie, Pango, qu'utilise la GUI GTK+.
Je suppose que les applis qui font appel a GTK+ comme GUI n'ont pas le problème.
Vous pouvez donc aussi jeter un œil a Perl Gtk2, qui marche sans doute mieux pour afficher du texte en arabe.
A+,
Marsh Posté le 12-11-2013 à 15:13:03
Bonsoir,
merci infiniment gilou ,
maintenant j'utilise perl gtk 2 pour resoudre le problème d'affichage de l'arabe ,
je veux inserer le continu de mon fichier dans un text buffer , voici mon code :
Code :
|
La fonction qui ouvre le fichier :
Code :
|
cependant dans mon texte buffer seulement le premier ligne du fichier est affiché , pourquoi ????
merci d'avance ..
Marsh Posté le 12-11-2013 à 15:20:19
et voilà j'ai trouvé une solution )))
Code :
|
Marsh Posté le 12-11-2013 à 16:11:27
Chouette!
A+,
Marsh Posté le 12-11-2013 à 19:50:48
bsr,
comme c'est mon premier programme avec gtk2 , je rencontre ce problème :
avec cette procedure :
Code :
|
ainsi à chaque fois je fais print $fh1 je veux ecrire aussi ds le text buffer
Code :
|
cependant le programme se bloque et il n'ya pas de resultat !!
Marsh Posté le 12-11-2013 à 23:25:57
Citation : foreach (<$fh> ) { |
Avec ce que vous faites, $txt est vide ou avec juste une BOM (qui ne devrait pas être la, les BOMs c'est pour les fichiers, pas les buffers)
Ça devrait être à mon avis
foreach (<$fh> ) {
# Si BOM initiale
unless ($linenum++ or not /^\x{feff}/) {
s/^\x{feff}// ;
print $fh1 "\x{feff}";
}
my @words = split /(?<!-)(\b|\x{061F}|\x{061B})(?!-)/;
foreach (@words) {
s/^\s+|\s+$//g;
next if (/^$/);
next if (/^\r?\n$/);
print $fh1 $_;
$txt .= $_;
if ($syn{$_}) {
print $fh1 " $syn{$_}";
$txt .= " $syn{$_}";
}
print $fh1 " \n";
$txt .= " \n";
}
}
close $fh1;
close $fh;
$textbuffer->set_text("$txt" );
A+,
Marsh Posté le 13-11-2013 à 00:51:01
rim_enis a écrit : Bonjour , |
Ca nous rappelle les heures sombres de notre histoire ©
Marsh Posté le 26-12-2013 à 00:14:00
quelles heures sombre et quelle hstoire !!!!!!!!!!!!!!!!!! n'importe quoi
Marsh Posté le 05-11-2013 à 16:15:33
Bonjour ,
J'ai un fichier .xml contenat des textes en arabe , en fait je veux enlever tous ce qui est balise xml , point virgule , point d'exclamation etc ... voici mon code :
je veux savoir pkoi dans l'affichage au lieu de m'afficher : .أَيْ تْفَضَّلْ خُويَا
il m'affiche : le mme phrase mais le point est au debut ( càd à droite )
mon deuxième problème est avec le split , en effet je veux spliter mon texte en se basant seulement sur les espace voici mon code :
#Script de Segmentation de corpus en mots
use File::Spec;
use strict;
use utf8;
my $RepBase ='/home/hp/Bureau/';
my $FicAraInt = File::Spec->catfile( $RepBase, 'CorpusNettoye.txt');
my $FicAraOut = File::Spec->catfile( $RepBase, 'tata.txt');
open (IN_Ara, "<", $FicAraInt ) or die "erreur d'ouverture.";
open (OUT_Ara, ">", $FicAraOut ) or die "Impossible ouvrir fichier $FicAraOut en sortie\n";
my @tab = <IN_Ara>;
my $size = $#tab+1;
for (my $i = 0; $i < $size; $i++)
{
chomp();
chomp($tab[$i]);
#my @words = split /(?<!-)(\b|\x{061F}|\x{061B})(?!-)/;
my @words = split(/ /, $tab[$i]);
chomp();
foreach my $val ( @words )
{
chomp();
chomp($val);
print OUT_Ara "$val\n"; chomp($val);
}
}
le problème lorsque il ya des mots tels que : il le decompose en deux alors que c'est un seul mot !!!
exemple dans cette phrase :
مَاضِي-سَاعَةْ وَ أَرْبْعَةْ
le resultat est normalement :
مَاضِي-سَاعَةْ
وَ
أَرْبْعَةْ
mais le resultat :
مَاضِي
سَاعَةْ
وَ
أَرْبْعَةْ