Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/02/2017, à 23:38

jean-luc5629

[resolu] Eliminer les caractères type japonais, chinois, ...

Bonsoir;

J'ai fait un script bash afin de récupérer les données de mes films de vacance à partir de fichiers nfo généré par kodi:

#!/bin/bash
function fct()
{
if grep "<title>.*</title>" "$0" > /dev/null
then
titre=$(cat "$0" | grep -o '<title>.*</title>' | sed -n 's/\([^>]*>\)\([^<]*\)<.*/\2/p' | sed -e "s/\&apos;/\'/g" | sed -e "s/\&quot;/\"/g" | sed -e "s/\&amp;/\&/g" | sed -e "s/\&lt;/\</g" | sed -e "s/\&gt;/\</g") 
otitre=$(cat "$0" | grep -o '<originaltitle>.*</originaltitle>' | sed -n 's/\([^>]*>\)\([^<]*\)<.*/\2/p' | sed -e "s/\&apos;/\'/g" | sed -e "s/\&quot;/\"/g" | sed -e "s/\&amp;/\&/g" | sed -e "s/\&lt;/\</g" | sed -e "s/\&gt;/\</g")
an=$(cat "$0" | grep -o '<year>.*</year>' | sed -n 's/\([^>]*>\)\([^<]*\)<.*/\2/p')
id=$(cat "$0" | grep -o '<id>.*</id>' | sed -n 's/\([^>]*>\)\([^<]*\)<.*/\2/p')
var=$(dirname "$0")
echo "$titre;$otitre;$an;$id;$var" >>/tmp/films-141.txt
fi
}
export -f fct
find /home/nfs -name "*.nfo" -exec /bin/bash -c "fct "$0"" {} \;

Pas de soucis, la récupération sous forme de tableau fonctionne
Le soucis viens du titre original (variable <$otitre> ) de certains films (japonais, coréens; iraniens,...) avec des caractères qui ne sont pas présents sur notre clavier Fr du genre:

;無間道;
;황해;
;추격자;
;٦٧٨;

Et je n'arrive pas à filtrer ces derniers afin de les remplacer par un "." ou un "_" ou "-" ou rien tout simplement "".
Je sais que certains sont doués via sed, mais moi, pas trop...

Merci

Dernière modification par jean-luc5629 (Le 10/02/2017, à 11:47)

Hors ligne

#2 Le 09/02/2017, à 06:31

Watael

Re : [resolu] Eliminer les caractères type japonais, chinois, ...

salut,

mes films de vacance

titre original de certains films [est en] japonais, coréens, iraniens,...

parce que je suis curieux, je voudrais savoir comment TES films peuvent porter des titres dans des alphabets étrange(r)s.

sinon, la méthode est affreuse : tous ces enchainements d'UUOC, de grep, et de sed à la queue leu-leu, c'est écœurant.
et on va pas les corriger, parce qu'on n'a pas accès aux textes originaux.

pour info : $0 c'est le processus en cours; c'est soit bash, soit le nom du script.

Dernière modification par Watael (Le 09/02/2017, à 06:33)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 09/02/2017, à 08:35

serged

Re : [resolu] Eliminer les caractères type japonais, chinois, ...

man iconv

peut être ?
avec :

iconv -f UTF8 -t ISO_8859-1//TRANSLIT entree | iconv -f ISO_8859-1 -t UTF8>sortie

(convertir de UTF8 vers ISO-8859-1 pour éliminer le chinois, puis d'ISO-8859-1 vers UTF8 pour que ce soit de l'UTF8)


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#4 Le 09/02/2017, à 10:08

MicP

Re : [resolu] Eliminer les caractères type japonais, chinois, ...

bonjour

Vu le format de fichiers .nfo, un parser XML serait sans doute plus efficace pour extraire les données à traiter.

=======
Peut être vaudrait-il mieux essayer de traduire ces chaînes de caractère…

;無間道; <Chinois - Français > ;Infernal Affairs;
;황해;    < Coréen - Français > ;Jaune;
;추격자; < Coréen - Français > ;The Chaser;

Dernière modification par MicP (Le 09/02/2017, à 10:21)

Hors ligne

#5 Le 09/02/2017, à 10:39

jean-luc5629

Re : [resolu] Eliminer les caractères type japonais, chinois, ...

Watael a écrit :

salut,

mes films de vacance

titre original de certains films [est en] japonais, coréens, iraniens,...

parce que je suis curieux, je voudrais savoir comment TES films peuvent porter des titres dans des alphabets étrange(r)s.

sinon, la méthode est affreuse : tous ces enchainements d'UUOC, de grep, et de sed à la queue leu-leu, c'est écœurant.
et on va pas les corriger, parce qu'on n'a pas accès aux textes originaux.

pour info : $0 c'est le processus en cours; c'est soit bash, soit le nom du script.

Bonjour;

- Le $0 dans ce script  me retourne bien le chemin du .nfo trouvé !!!!! (des spécialistes de la programmation plus doués que toi et moi t'expliqueront sans doute pourquoi...)

-L'enchainement du grep et de tous les sed, même si pas présentable (je ne suis pas codeur..) fonctionne aussi: ça me récupère les données entre les balises et ensuite me substitue les codes xml par leur équivalent texte (apostrophe, etc..).

- Pour répondre à ta première phrase "je voudrais savoir comment TES films peuvent porter des titres dans des alphabets étrange(r)s." , si tu avais lu, le soucis ne viens pas de la récupération du titre mais du titre original que je veux aussi importer (car il existe des films qui portent parfois le même titre en étant 2 films différents tout simplement).

Donc pour résumer, ce script fonctionne parfaitement, même si la présentation ne te convient pas....

Voilà, sinon merci pour cette réponse !!!!

Dernière modification par jean-luc5629 (Le 09/02/2017, à 13:55)

Hors ligne

#6 Le 09/02/2017, à 12:45

k3c

Re : [resolu] Eliminer les caractères type japonais, chinois, ...

MicP a écrit :

bonjour

Vu le format de fichiers .nfo, un parser XML serait sans doute plus efficace pour extraire les données à traiter.

=======
Peut être vaudrait-il mieux essayer de traduire ces chaînes de caractère…

;無間道; <Chinois - Français > ;Infernal Affairs;
;황해;    < Coréen - Français > ;Jaune;
;추격자; < Coréen - Français > ;The Chaser;

Un exemple de script qui analyse du xml, détecte l'encoding...

https://forum.ubuntu-fr.org/viewtopic.p … #p21663401


Archlinux sur Xiaomi Air 13

Hors ligne

#7 Le 09/02/2017, à 14:04

MicP

Re : [resolu] Eliminer les caractères type japonais, chinois, ...

Un exemple de script qui analyse du xml, détecte l'encoding...

https://forum.ubuntu-fr.org/viewtopic.p … #p21663401

Et puis là, il s'agit aussi de vidéos.
(Je pensais aussi à celle "très belle soupe" si bien faite et pratique)

=======

jean-luc5629 a écrit :

…parfois le même titre en étant 2 films différents…

Aïe ! C'est vrais que c'est pas toujours si simple…

Dernière modification par MicP (Le 09/02/2017, à 14:06)

Hors ligne

#8 Le 09/02/2017, à 14:18

jean-luc5629

Re : [resolu] Eliminer les caractères type japonais, chinois, ...

k3c a écrit :
MicP a écrit :

bonjour

Vu le format de fichiers .nfo, un parser XML serait sans doute plus efficace pour extraire les données à traiter.

=======
Peut être vaudrait-il mieux essayer de traduire ces chaînes de caractère…

;無間道; <Chinois - Français > ;Infernal Affairs;
;황해;    < Coréen - Français > ;Jaune;
;추격자; < Coréen - Français > ;The Chaser;

Un exemple de script qui analyse du xml, détecte l'encoding...

https://forum.ubuntu-fr.org/viewtopic.p … #p21663401

Merci beaucoup pour ta réponse;

Mais ce n'est pas un problème d'encoding du fichier qui est en UTF-8 que je ne cherche pas du tout à modifier,dont voici en exemple une partie:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<movie>
    <title>Hard Day</title>
    <originaltitle>끝까지 간다</originaltitle>
./...

Je ne cherche pas à changer cet encoding et veut laisser ce fichier tel quel; mais je cherche uniquement le moyen de substituer lors de la récupération vers un simple fichier texte par le script plus haut de l'originaltitle  les caractères non conventionnels à notre clavier par de simples underscores par exemple.
Mais dès lors que l' originaltitle correspond à des caractères de notre clavier qu'il soit récupéré tel qu'il est (ce que fait d'ailleurs très bien mon script plus haut, même si sa présentation laisse à désirer et que ça peut heurter le côté geek de certains)...
comme dans cet exemple:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<movie>
    <title>L&apos;Ange de la vengeance</title>
    <originaltitle>Ms .45</originaltitle>

Là aucun soucis avec mon script, il me récupère bien "l'ange de la vengeance" en title et "Ms .45" en originaltitle.

J'espère avoir été plus clair.

Merci.

Dernière modification par jean-luc5629 (Le 09/02/2017, à 14:35)

Hors ligne

#9 Le 09/02/2017, à 14:34

MicP

Re : [resolu] Eliminer les caractères type japonais, chinois, ...

Le problème est donc de définir une liste des caractères "acceptables" ou "non acceptés" de façon à pouvoir faire "le tri"

Il est sans doute possible de filtrer les caractères en fonction du bloc UTF-8 auquel ils appartiennent (en fonction de leur valeur point de code)

voir :
http://www.utf8-chartable.de/
et
https://fr.wikipedia.org/wiki/UTF-8

Hors ligne

#10 Le 09/02/2017, à 14:47

Watael

Re : [resolu] Eliminer les caractères type japonais, chinois, ...

$ otitle='끝까지 간다'
$ echo "$otitle" | sed 's/[[:graph:]]/_/g'
___ __

?
trouvé dans le man 7 regex.
testé au pif.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 09/02/2017, à 17:08

k3c

Re : [resolu] Eliminer les caractères type japonais, chinois, ...

tu pourrais utiliser

https://github.com/kent37/guess-language

pour "deviner" la langue, puis traduire et écrire
la langue d'origine
la traduction du texte de la langue d'origine


Archlinux sur Xiaomi Air 13

Hors ligne

#12 Le 10/02/2017, à 11:17

jean-luc5629

Re : [resolu] Eliminer les caractères type japonais, chinois, ...

Bonjour;
J'ai fini par trouver une solution qui me convient mieux en googolant :

otitre=$(echo "$otitre" | tr -cd '[:print:]')
if [[ $otitre != *[!\ ]* ]];then otitre=$titre;fi

Avec l'avantage de conserver nos caractères dans la variable si éventuellement un mixte dans celle ci.

-Si la variable ne contient que des caractères exotiques (avec ou sans espaces) comme '끝까지 간다'  ou '끝  까 지 간 다'; ça me retournera en titre original le titre Fr tout simplement.

-Si la variable contient éventuellement un mixte (ce qui doit être rare, mais sait on jamais..) comme '끝까지 간다 texte occidental'; çà me laissera le texte occidental seulement.

Bref, résolu, et merci à tous.

Dernière modification par jean-luc5629 (Le 10/02/2017, à 19:25)

Hors ligne