Analyse de chaines de caracteres (VB ?)
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Analyse de chaines de caracteres (VB ?)



  1. #1
    JLB29

    Cool Analyse de chaines de caracteres (VB ?)


    ------

    Bonjour,
    Je dispose d'une liste de milliers de mots (noms propres)
    je cherche à établir une liste de toutes les combinaisons de trois lettres successives réalisables avec ces chaines de caractères
    Exemple: avec MARTIN et MARSOUIN
    MARTIN = MAR+ART+RTI+TIN
    MARSOUIN = MAR+ARS+RSO+SOU+OUI+UIN

    Une fois cette liste de 3 générée, je souhaite balayer la base avec chaque mot de 3 lettres afin de déterminer leur fréquence.
    la liste de fréquence pour cet exemple: MAR=2 les autres=1

    Ce problème est certainement élémentaire pour un statisticien ou programmeur; mais pour un citoyen lambda comme moi c'est un peu du chinois.
    Si quelqu'un connait une application toute faite (en VB de préférence) merci de m'en faire part !
    Pas la peine de répondre avec de belle équations, je ne les comprendrais pas...

    Mon réel problème: la décomposition de chaque nom en groupes de 3 lettres sachant que le premier résultat comporte les 3 premières lettres (du 1er mot), le 2eme résultat commence à la 2eme lettre etc et que l'analyse d'un mot s'arrête lorsqu'il reste moins de 3 lettres. On passe alors au mot suvant.
    Pour analyser la fréquence, j'ai déjà d'un outil: TextSTAT.exe (merci au concepteur).

    -----

  2. #2
    invite24357dd0

    Re : Analyse de chaines de caracteres (VB ?)

    Bonjour,

    Sous quelle forme as-tu ta liste de mots ? Un fichier texte avec un mot par ligne ou tous les mots séparés par un espace/point virgule/tabulation ? Si tu nous dis comment ton fichier est fait, on pourra te faire facilement un petit programme qui te donne les fréquences

  3. #3
    JLB29

    Re : Analyse de chaines de caracteres (VB ?)

    Merci de votre (ton) attention.
    Fichier ASCII actuel = un nom par ligne (200 000 lignes et pas fini !)
    Peut être modifié en insérant une virgule comme séparateur ou les mettre à la suite en considérant chaque espace comme un séparateur.

    Comme il s'agit de noms propres, je n'avais pas pensé qu'il y a des noms composés. Je peux les négliger et les traiter comme autant de chaines indépendantes (articles, apostrophes et mots de moins de 3 lettres ne seront pas prix en compte)

  4. #4
    invite24357dd0

    Re : Analyse de chaines de caracteres (VB ?)

    Bonsoir,

    Si je comprends bien :
    - DE BENEDICTIS devient BENEDICTIS
    - D'ASILVA devient ASILVA
    - DU PONTON devient PONTON

    Est-ce qu'il y a des tirets entre certains de tes noms propres ? Comment doit-on les traiter ? Comme des caractères ou on les oublie ? Laquelle de ces 2 solutions :
    - MARTIN-DUPONT devient MARTINDUPONT
    - MARTIN-DUPONT devient MARTIN DUPONT (et donc 2 noms propres) ?

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

    Re : Analyse de chaines de caracteres (VB ?)

    - DE BENEDICTIS devient BENEDICTIS
    - D'ASILVA devient ASILVA
    - DU PONTON devient PONTON
    MARTIN-DUPONT devient MARTIN DUPONT

    en effet, je n'ai pas pensé à tout !
    Il serait donc (à mon sens) plus simple de mettre tous les noms à la suite avec un espace comme séparateur, de remplacer tous les caractères non alphabétiques (- ' et autre s'il en existe) par un espace, toute chaine de 1 ou 2 lettre par des espaces avant d'exécuter l'analyse.
    Le but étant de sortir un base (imparfaite) des suites de 3 caractères dans les noms (une fois cette version réalisée, il me sera facile j'espère de modifier le programme pour refaire une autre analyse avec 2 ou 4 ou 5 lettres...).

    Merci de ton aide !

  7. #6
    invite24357dd0

    Cool Re : Analyse de chaines de caracteres (VB ?)

    Bonsoir,

    Voilà le programme ...



    En entrée (via le bouton "Choix du fichier"), tu peux lui indiquer un nom de fichier. Ce fichier doit posséder une structure bien précise : chaque nom doit être séparé par un espace ou un retour à la ligne (et çà doit être un fichier texte). Les apostrophes et les tirets sont traités correctement.

    Une fois le fichier chargé (son nom apparaît à droite), tu peux régler le nombre de lettres pour l'analyse et appuyer sur "Démarrer" pour lancer l'analyse. Le statut de l'analyse est situé à droite du bouton "Démarrer" (arrêt, en traitement ou terminé).

    Une fois l'analyse terminée, tu peux sauver le fichier avec le bouton "Sauver". Le format du fichier de sortie est très simple : un fichier texte avec 2 colonnes séparées par une tabulation. La première colonne contient les chaînes de caractères (de 3 caractères, par exemple) et la seconde le nombre d'occurences de chacune des chaînes.

    Le programme se trouve ici : SuiteDeCaracteres.jar (13ko). Pour le faire fonctionner, il faut que tu aies installé Java 6 (ou supérieur) sur ta machine. Si tu ne l'as pas encore, tu peux le télécharger gratuitement ici (site officiel de Java). Une fois Java installé, il te suffit de double-cliquer sur le programme (extension .jar) et voilà

    Je pense que je n'ai rien oublié ...

  8. #7
    JLB29

    Re : Analyse de chaines de caracteres (VB ?)

    Merci beaucoup, cela semble correspondre parfaitement à ce qui m'est nécessaire.
    Pour une utilisation "professionnelle", il serait probablement plus judicieux non pas de compter le nombre d'occurrences d'une chaine, mais le nombre de mots dans lesquels on trouve cette chaine; mais ce n'est pas mon sujet.

    Je suis "bluffé" par ta rapidité d'analyse et d'exécution.
    A moins que tu ne sois un farfadet, vivant sur un plan d'univers avec une "chrono biologie" différente !

    Peut-on estimer la durée de traitement en fonction du Nb de caractères ? (à la louche)

    Encore merci et bravo (et pour ton site)

  9. #8
    invite24357dd0

    Cool Re : Analyse de chaines de caracteres (VB ?)

    Citation Envoyé par JLB29 Voir le message
    Peut-on estimer la durée de traitement en fonction du Nb de caractères ? (à la louche)
    On pourrait effectivement faire des tests très complets. Je suis certain que la manière dont j'ai programmé n'est pas nécessairement la plus rapide. Mais je viens de faire un petit test en traitant un livre entier de Balzac :

    - Livre : Eugénie Grandet (http://www.gutenberg.org/files/11049/11049-8.txt)
    - Auteur : Honoré de Balzac
    - Source : Projet Gutenberg (http://www.gutenberg.org/)
    - Taille du fichier texte : 397Ko
    - Nombre de lignes : 7743
    - Nombre de caractères (espaces compris) : 390397
    - Temps de traitement : 14 secondes (sur mon ordinateur)

    Soit approximativement 1673130 caractères à la minute

    (Evidemment, il y a des caractères qui arrivent et dont le programme ne tient pas compte : point, chiffres, ponctuation, ...)

  10. #9
    JLB29

    Re : Analyse de chaines de caracteres (VB ?)

    Après avoir récupéré par pages de 400 une base des noms les plus répendus en France 300 543 d'après
    http://www.geopatronyme.com
    (merci à eux aussi) je constate que j'ai mal analysé mon problème.
    En fait, je cherche à récupérer le maximum du contenu d'une base de donnée (style pages jaunes) dont je ne connais pas l'étendue, et dont je peux extraire des enregistrements d'après un nom (ou au moins 3 lettres consécutives de ce nom); le système me retournant tous les noms contenant ces trois lettres.
    Je pensais me servir de ma liste "geopatronyme" comme modèle, considérant que la base de donnée à explorer en aveugle ne contient pas d'autres patronymes (ce qui n'est pas vrai, mais constitue une approximation acceptable).

    et partir d'une base exploitable sur EXCEL en utilisant sur une colonne un FILTRE AUTOMATIQUE PERSONNALISE - AFFICHER LES LIGNES - NE CONTIENT PAS - {les trois lettres les plus fréquentes]
    Puis copier le relicat et refaire la même opération.
    Il s'avère que la base geopatronyme est plus grosse que prévue (EXCEL permet 65 000 lignes), mais surtout qu'il y a un petit défaut de conception, à savoir que (je prends un exemple simpliste pour expliquer quelque chose que je ne sais pas formuler) si pour le nom MARTIN = MAR+ART+RTI+TIN (à suposer que TIN soit le triplet le plus répandu); la première passe sélectionnera MARTIN, MARTINEZ, BERTIN, etc...
    A supposer toujours que le triplet ART soit en 10eme position de la liste de fréquence, mais ne figure QUE dans des noms déjà sélectionnés lors des passes antérieures, il ne sert à rien de le chercher!
    Cela parrait être du "pinaillage". Mais comme on traite une importante quantité de mots et qu'en prime leur structure n'est pas aléatoire (il y a des noms et leurs dérivés),

    Une fois geopatronyme analysée grace à "SuiteDeCaracteres.jar",
    A1 - je classe en ordre inverse de fréquence les occurances de triplet .
    B1 - je prends le groupe le plus fréquent et je sélectionne tous les noms contenant ce triplet
    C1 - je les suprime de la base modèle geopatronyme
    D1 - je crée une liste de triplets et j'y ajoute ce triplet

    A2 - je relance "SuiteDeCaracteres.jar"
    etc...
    Je signale ce détail pour le cas où quelqu'un voudrait employer cet utilitaire "SuiteDeCaracteres.jar" pour lequel je remercie encore Jean-Etienne Poirrier pour sa bonne volonté et sa rapidité (nouveau sunom: LukyLuc, l'homme qui programme plus vite que son ombre)...

    Après quelques nuits de réflexion, je découvre que cette recherche - compte tenu de mon besoin - portera sur les prénoms et non sur les patronymes: les prénoms étant 10 fois moins nombreux, et davantage de syllabes étant identiques.

    Ces observations étant uniquement destinées à aider quiconque tentera le même genre de travail.

  11. #10
    invite24357dd0

    Post Re : Analyse de chaines de caracteres (VB ?)

    Bonsoir,

    Finalement, comment pourrait-on formuler ce que tu cherches ? Comme ceci : "Classemement par ordre de fréquence décroissant des triplets de lettres contenus dans les (pré)noms d'une liste" ?

    Si tu supprimes tous les (pré)noms contenant le triplet le plus fréquent, une fois celui-ci trouvé, ne risques-tu pas de fausser tes recherches puisque, toujours selon ton exemple, il se peut que "ART" soit le second triplet le plus fréquent mais tu l'as supprimé après ta trouvaille de "TIN" ?

    Je viens de faire un tour sur Geopatronyme.com. Il s'avère qu'ils prennent leurs données de l'INSEE mais ce dernier ne mets vraiment pas grand chose à disposition des utilisateurs (ou il faut payer ; est-ce qu'ils ne travaillent pas avec l'impôt des français(e) ?). StatBel est l'équivalent belge et propose un certain nombre d'information en téléchargement gratuit dont des fichiers de données brutes qui devraient t'intéresser (sur les prénoms, notamment).

  12. #11
    JLB29

    Re : Analyse de chaines de caracteres (VB ?)

    En supprimant tous les (pré)noms contenant le triplet le plus fréquent, une fois celui-ci trouvé, je fausse en effet les recherches, mais je ne cherche pas à faire des stats, (sauf dans un 1er temps pour avoir une base de départ), mais à exploiter le contenu d'une "boite noire" en un minimum de coups, et en ayant un relicat aussi faible que possible (en fait, je ne saurais pas si relicat il y a, à moins bien entendu de tester tous les triplets possibles).
    Ma recherche étant pratique, je me limite au pragmatisme...
    En tout cas, merci pour le coup de main.
    J'ai trouvé une base de prénoms sur
    http://www.geneawiki.com/index.php/D...oms_-_lettre_A
    http://www.aufeminin.com/world/mater...origine=4.html

    Il y a d'autres sources plus complètes, mais accessibles au coup par coup, alors que celles-ci sont listables.
    La source belge est également intéressante.

    Je me permets de proposer une solution "Européenne" au problème séparatiste:
    et si on faisait une confédération des régions aspirant à l'indépendane en associant
    Flandre, Bretagne, Corse, Pays Basque, Irlande, etc...? le conglomérat résultant serait plus gros que chaqu'une des nations dont ces régions veulent se séparer ! Il faudrait en prime s'assurer que les provinces associées n'aient pas de frontières communes...

    Bonne nuits au lutin programmeur...

  13. #12
    JLB29

    Re : Analyse de chaines de caracteres (VB ?)

    En guise de conclusion provisoire:
    Après analyse d'une liste de 19 300 prénoms (les doublons ayant été exclus)
    les triplets les plus fréquents sont:
    INE MAR ARI ANN LIN IAN
    Si on suprime tous les prénoms contenant le 1er triplet (INE)
    relance l'analyse de fréquence sur le relicat, etc
    on arrive à une nouvelle liste de fréquence:
    INE MAR ANN INA ANA AND (INA passe de la position 10 à la 4, AND de 15 à 6...)
    A première vue c'est positif, mais en fait, il y a simplement un décalage significatif dans l'ordre des fréquences, mais pas élimination de certains triplets (pour les 10 premiers tests).
    L'intéret de cette méthode est donc plus que discutable (sauf à l'automatiser entièrement), et une recherche "au pif" semble aussi efficace ! soit, plutôt que de chercher par triplets, chercher par prénoms les plus courrants...

Discussions similaires

  1. Chaines de caractères/passement de fonctions
    Par invite91a05f0b dans le forum Électronique
    Réponses: 3
    Dernier message: 12/07/2006, 09h06
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...