Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractères
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractères



  1. #1
    assange

    Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractères


    ------

    Salut la communauté

    J'aimerai créer un algorithme à partir d'un fichier texte, mais étant débutant je rencontre des difficultés dans l'élaboration de l'algorithme, j'en suis pour l'instant seulement à la rédaction manuscrite.

    Je vous explique l'idée :

    J'aimerai extraire d'un fichier texte (en l’occurrence un fichier de sous-titrage vidéo au format srt.), uniquement les parties qui m'intéresse (à savoir les dialogues) qui sont entrecoupées par les marqueurs temporels pour indiquer le timing des sous-titres lors de la lecture vidéo. Je cherche donc à récupérer toutes les phrases du fichier et les remettre dans l'ordre, à la suite.

    ---
    Petit exemple :

    94
    00:06:08,076 --> 00:06:11,021
    J'ai pris soin
    de préciser l'heure et le lieu

    95
    00:06:11,188 --> 00:06:12,956
    lors de mon appel anonyme.
    ---

    Du coup, j'aimerai que mon résultat final soit : "J'ai pris soin de préciser l'heure et le lieu lors de mon appel anonyme."

    L'idée la plus simple serait peut-être de supprimer tous les nombres, mais c'est pas très satisfaisant car si il y a des nombres dans le dialogue que j'aimerais garder. Est-ce que je pourrais faire en sorte de ne pas supprimer les nombres qui sont insérés dans une chaîne de caractères ? Ex : " Il est partit à 11h du matin". Est-ce que je pourrais par exemple faire comprendre à l'ordinateur : 1) ceci est une phrase 2) tous les chiffres doivent être supprimés sauf ceux qui sont insérés dans une phrase ??

    Aussi, vous me recommandez d'utiliser quel langage pour faire ça ? Python ?

    En tout cas merci d'avance pour votre aide je vous serais infiniment reconnaissant ! Clem.

    -----

  2. #2
    loftyramitsu

    Lightbulb Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    Bonsoir,
    Le seul language avec lequel je peut t'aider est le python, donc voici ce que je te propose :
    Code:
    On ouvre le fichier
          Une boucle for qui lit toutes le lignes, une par une :
                  Si il y a une lettre de l'alphabet dans la ligne :
                         On ajoute la ligne dans une variable de type str, et ensuite on rajoute un espace.
    On ferme le fichier

    Je te laisse écrire ça sous forme d'un programme en python, et dis-moi si tu coinces quelque part,
    A bientôt.

  3. #3
    Ikhar84
    Animateur Informatique

    Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    Quel que soit le langage choisi, tu vois que le marquage temporel répond à un pattern précis (un timecode).
    La ligne précedente peut aussi être supprimé.

    Tu peux même utiliser une expression régulière en fonction du langage choisi.

    Par contre, pour "assembler" les phrases étalées sur plusieurs marqueurs et en faire des paragraphes cohérents, ce sera plus subtile...
    J'ai glissé Chef !

  4. #4
    umfred

    Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    a priori, il suffirait de regarder si le 1er caractère de la ligne est un chiffre.
    Si c'est une lettre, on copie la ligne (on l'ajoute à une chaine avec un séparateur de fin de ligne par exemple)
    sinon on passe à la ligne suivante

    Vérifier tout de même si il n'y a pas de lignes de texte qui commence par un chiffre

    Une autre approche pourrait consister à lire le fichier d'un coup et de séparer le texte par bloc qui présente 2 retours à la ligne successifs (si il y a une ligne vide entre les blocs de sous-titres)
    Ensuite dans chaque bloc, tu ne conservent que les lignes 3 et suivantes (si elles existent) (les lignes 1 étant le nombre ordinal (92, 93, ...), et les lignes 2 étant le positionnement temporel)

  5. A voir en vidéo sur Futura
  6. #5
    pm42

    Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    Perso, je prendrais une des librairies qui lisent les srt parce sur le papier, le format est simple :

    Index (le n°)
    Timestamp (de quand à quand l'afficher)
    Texte (suite de lignes non vides)
    Ligne vide pour marquer la fin

    Et on recommence. Sauf que certains srt n'ont pas ligne vide à la fin, que parfois, il y a des lignes vide au milieu du texte alors que c'est techniquement illégal.
    Bref, cela complique.

    Bon, coder la reconnaissance du format donné est facile dans pratiquement n'importe quel langage. Gérer la fin de fichier sans ligne vide peut-être rajouté après.
    On peut sans doute s'épargner la détection des lignes vides dans le texte pour commencer.

    Ce qui donne parmi les hypothèses :
    - on code tout ça à la main
    - on utilise des expressions régulières
    - on utilise une grammaire et un outil de génération de code
    - on prend une librairie.

    A titre indicatif, voici un petit exemple d'un fichier qui fait tout avec des expressions régulières un peu viriles : https://github.com/cdown/srt/blob/develop/srt.py

  7. #6
    goaoute

    Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    Il faudrait que tu montre un bout de texte avec plusieurs occurrences de times dans son état d'origine.

  8. #7
    assange

    Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    Merci à tous pour vos réponses ! Encore une fois sachez que je suis vraiment débutant, je m'y met seulement depuis quelques jours, je peine à comprendre tout le vocabulaire, bon j'arrive un peu à comprendre comment ça marche d'une manière générale mais c'est très partiel. Le truc c'est que j'ai une idée de programme vraiment précise et je veux être sûr qu'il soit réalisable avant de me lancer vraiment dans un apprentissage approfondi ou essayer de monter un projet pro avec un programmeur si ça en vaut la peine. Du coup, on m'a aidé à faire ce code (dont je comprends le début et la fin : mode lecture, pas d'expressions régulières, suppression des lignes avec les --> comme vous l'avez évoqué dans les messages précédents) qui fonctionne mais dont je ne sais que faire pour passer aux étapes suivantes (et donc voir si c'est vraiment faisable). En fait je bloque surtout maintenant au passage d'écriture et à la sauvegarde des modifications apportées à mon fichier ! Comment copie-t-on le résultat d'une opération réalisée dans un fichier A en mode lecture, dans un fichier B en mode écriture ? En gros l'idée, c'est qu'à partir de ce résultat, je vais travailler mes phrases unes à unes et les comparer à un fichier du même type pour que mon programme puisse déterminer : phrase 1 du fichier texte 1 = phrase 1 du fichier texte 2, phrase 35 du fichier 1 = phrase 35 du fichier 2 etc. Voilà l'océan dans lequel je suis haha si vous avez des tutos qui pourraient me guider je suis preneur. Après, j'ai l'impression que j'ai déjà un gros problème de vocabulaire et de compréhension des concepts (qui en plus sont mathématiques, et j'ai un niveau dégueulasse haha), et donc forcément j'ai du mal à trouver les tutos qui m'intéressent pour mon truc... Bon voici le code et merci d'avance !

    Code:
    with open("robot.srt", "r") as file:
        lines = file.read().split("\n")
     
        i = 0; new_lines = []; n = len(lines) - 1
        for i, line in enumerate(lines):
            if i == n or ('-->' not in line and '-->' not in lines[i + 1]):
                if line:
                    new_lines.append(line) 
        text = " ".join(new_lines)
     
        for sub_str in ("<i>", "</i>"):
            text = text.replace(sub_str, "")
    
        text = text.replace(". ", ".\n").replace("? ", "?\n").replace("! ", "\n")
        print(text)
    Dernière modification par JPL ; 15/05/2020 à 15h55. Motif: ajout de la balise Code (#) pour garder l’indentation

  9. #8
    assange

    Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    Je viens de capter ce qu'était un module. Du coup si je comprends bien je veux importer un module dans un second module pour pouvoir travailler sur le résultat du premier module

  10. #9
    pm42

    Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    Citation Envoyé par assange Voir le message
    Je viens de capter ce qu'était un module. Du coup si je comprends bien je veux importer un module dans un second module pour pouvoir travailler sur le résultat du premier module
    Tu ajoutes un fichier de sortie :
    Code:
    with open("robot.srt", "r") as file, open("robot_out.srt", "w") as output:
    Et à la place de
    Code:
    print(text)
    tu mets
    Code:
    output.write(text)

  11. #10
    assange

    Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    oh merci beaucoup ça marche ! et après je peux lire ce second fichier dans un autre module et créer une variable pour chaque ligne du texte ? (phrase 1, phrase 2 etc ?).

  12. #11
    pm42

    Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    Citation Envoyé par assange Voir le message
    oh merci beaucoup ça marche ! et après je peux lire ce second fichier dans un autre module et créer une variable pour chaque ligne du texte ? (phrase 1, phrase 2 etc ?).
    Oui bien sur.

  13. #12
    assange

    Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    Ouais je pense que mon code que je suis en train de faire me donne le nombre de caractères et non le nombre de lignes non ?

    file2 = open ("robot_out.srt","r")
    content = file2.read()
    print(content)

    lines = content.split('\n')
    lines_nb=len(content)
    print(lines_nb)

    PS : Quelles sont les balises pour insérer du code sur le forum ?

  14. #13
    pm42

    Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    Citation Envoyé par assange Voir le message
    Ouais je pense que mon code que je suis en train de faire me donne le nombre de caractères et non le nombre de lignes non ?
    Je ne sais pas mais si tu utilises files2.readlines() à la place de ton read puis split, cela devrait marcher.

    Citation Envoyé par assange Voir le message
    PS : Quelles sont les balises pour insérer du code sur le forum ?
    Logiquement CODE et /CODE entre accolades.

  15. #14
    JPL
    Responsable des forums

    Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    Pour poster du code il faut aller dans l’éditeur en mode avancé et cliquer sur #, ce qui insère le couple [Code]...[/Code] dans le message.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  16. #15
    assange

    Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    C'est bon j'ai réussi merci ! Comment on fait pour passer en mode résolu ?

  17. #16
    JPL
    Responsable des forums

    Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    Ce mode n’existe pas sur le forum. Il faut qu’un modérateur modifie le titre et on n’a pas l’habitude de le faire dans ces forums d’informatique.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  18. #17
    umfred

    Re : Probléme d'élaboration d'un algorithme (débutant) : purger des nombres d'une chaine de caractèr

    Citation Envoyé par assange Voir le message
    Ouais je pense que mon code que je suis en train de faire me donne le nombre de caractères et non le nombre de lignes non ?

    file2 = open ("robot_out.srt","r")
    content = file2.read()
    print(content)
    Code:
    lines = content.split('\n')
    lines_nb=len(content)
    print(lines_nb)
    pour le nombre de ligne, il faut plutot faire
    Code:
    lines_nb=len(lines)
    sinon tu as le nombre de caractères du ficher

Discussions similaires

  1. Algorithme - chaine de caractères
    Par tulipe96 dans le forum Programmation et langages, Algorithmique
    Réponses: 17
    Dernier message: 10/05/2016, 14h44
  2. chaîne de caractères
    Par invite11df21b5 dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 30/01/2013, 19h36
  3. Réponses: 1
    Dernier message: 10/08/2010, 17h26
  4. Chaine de caractères en C
    Par invite953f8104 dans le forum Électronique
    Réponses: 8
    Dernier message: 03/03/2009, 20h28
  5. PIC : Chaine de caractères
    Par Toufinet dans le forum Électronique
    Réponses: 2
    Dernier message: 24/05/2006, 17h49