Journal trouver la langue d'un texte

Posté par  .
Étiquettes : aucune
0
12
mar.
2004
Salut
avez-vous une idée comment faire ?
existe-t-il un outil qui permettrait d'indiquer la langue d'un texte ?
je m'explique :
j'ai plusieurs milliers de textes (fichiers ou strings), certains en anglais, certains en français, allemand, espagnol, italien, russe, japonais, etc.
y'aurait-il moyen pour un script/un programme de dire :
- le texte 1 est en français, le 2 en anglais, le 3 en français, le 4 en allemand, le 5 en russe, etc.
ou par tout ou rien :
- le texte 1 est en anglais, le texte 2 est pas en anglais, le 3 est en anglais, le 4 est en anglais, le 5 est pas en anglais, etc.

j'avais l'idée de faire une analyse statistique de chaque bout de texte par rapport à des dictionnaires de mots, mots pluriels et conjugués y compris, avec autant de dictionnaires que de langues possibles,
existe-t-il des dictionnaires sous forme de base de données, de fichiers textes ?

je sens que c'est assez difficile comme problème
  • # Re: trouver la langue d'un texte

    Posté par  (site web personnel) . Évalué à 1.

    Rechercher les caractere propre a une langue?
    • [^] # Re: trouver la langue d'un texte

      Posté par  . Évalué à 2.

      c'est après avoir écrit ce texte que j'ai pensé à quelque chose
      je pourrais vérifier la présence de mots basique de la langue, comme :

      - français : je tu il le la me un une suis mais or
      - anglais : I you the he am but
      - allemand : ich du bin ein was
      - italien : si ...... (connais pas l'italien...)
      - espagnol : yo uno por soy
      - hollandais : ?
      - suédois : ? ....

      ça en fait des langues, rien qu'en Europe.....
      • [^] # Re: trouver la langue d'un texte

        Posté par  . Évalué à 4.

        Là j'avais donné des pistes :

        http://linuxfr.org/comments/357202.html(...)

        A priori la technique la plus efficace serait celle avec les 3-grammes ... Mais peut être pas la plus simple à mettre en oeuvre (surtout pour avoir les 3-grammes spécifiques à la langue)

        Enfin, il n'y a pas de technique miracle : tu aura toujours des incertitudes ...

        Ce que je ferais :
        Trouver les ~10 mots les plus utilisés dans chaque texte, et regarder dans un dico de chaque langue s'ils y apparaissent.

        Tu peut affiner en les comparant principalement avec les mots-outils de chaque langue (style les pronoms, déterminants, ...)

        [bref, la loi de Zipf est ton amie]

        Tu peut avoir des outils (GPL) ici :
        http://monge.univ-mlv.fr/~unitex/(...)

        Y compris des dictionnaires sur plusieurs langues ...
  • # Re: trouver la langue d'un texte

    Posté par  (site web personnel) . Évalué à 1.

    > existe-t-il des dictionnaires sous forme de base de données, de fichiers textes ?

    ls /usr/dict
    • [^] # Re: trouver la langue d'un texte

      Posté par  . Évalué à 1.

      cube:~# ls /usr/dict
      ls: /usr/dict: No such file or directory
      cube:~#

      cube:/# tree -d |grep dict
      | |-- dictionaries-common



      :(
      • [^] # Re: trouver la langue d'un texte

        Posté par  . Évalué à 1.

        $ ls /usr/share/dict
        linux.words ooo/ words@
      • [^] # Re: trouver la langue d'un texte

        Posté par  (site web personnel) . Évalué à 1.

        apt-cache search wordlist
        lojban-common - Commonly used wordlists for the lojban language
        miscfiles - Dictionaries and other interesting files.
        witalian - The Italian dictionary words for /usr/share/dict/.
        wswedish - The Swedish dictionary.
        xletters - Type falling words before they land
        dictionaries-common - Common utilities for spelling dictionary tools
        dictionaries-common-dev - Developer tools and Policy for spelling dictionary tools
        iamerican - An American English dictionary for ispell
        ibritish - A British English dictionary for ispell
        ispell - International Ispell (an interactive spelling corrector)
        scowl - Spell-Checker Oriented Word Lists
        wamerican - American English dictionary words for /usr/share/dict
        wamerican-large - American English dictionary words for /usr/share/dict
        wamerican-small - American English dictionary words for /usr/share/dict
        wbritish - British English dictionary words for /usr/share/dict
        wbritish-large - British English dictionary words for /usr/share/dict
        wbritish-small - British English dictionary words for /usr/share/dict
        wbulgarian - The Bulgarian dictionary words for /usr/share/dict
        wcanadian - Canadian English dictionary words for /usr/share/dict
        wcanadian-large - Canadian English dictionary words for /usr/share/dict
        wcanadian-small - Canadian English dictionary words for /usr/share/dict
        wcatalan - Catalan dictionary words for /usr/share/dict
        wdanish - The Danish dictionary / wordlist
        wdutch - List of Dutch words in new (August 1996) spelling.
        wenglish - American English dictionary words for /usr/share/dict
        wfaroese - The Faroese dictionary / wordlist
        wfinnish - A small Finnish dictionary for /usr/share/dict
        wfrench - French dictionary words for /usr/share/dict
        wgalician-minimos - Wordlist for Galician (minimos)
        wngerman - New German orthography wordlist
        wnorwegian - Norwegian wordlist
        wogerman - The old German dictionary for /usr/share/dict
        wpolish - Polish dictionary words for /usr/share/dict
        wspanish - The Spanish dictionary words for /usr/share/dict
        wswiss - Swiss (German) orthography wordlist

        (ok c'etait /usr/share/dict)
  • # Re: trouver la langue d'un texte

    Posté par  (site web personnel) . Évalué à 5.

    mguesser.

    $ apt-cache show mguesser
    (...)
    mguesser is a standalone part of libudmsearch (a core of mnogo search
    engine http://mnogosearch.org(...)) which allows to guess text charsets
    and languages.
    .
    Homepage: http://www.mnogosearch.org/guesser/(...)
    • [^] # Re: trouver la langue d'un texte

      Posté par  . Évalué à 2.

      aaaaah ! merci
      en fait je travaille sur un indexage de textes avec htdig,
      et je ne voulais pas indexer certaines langues pour ne pas perturber l'index.
      J'ai commencé à m'intéresser à mnoGoSearch mais je débute.

      J'avais pensé aussi que je pourrais créer un dictionnaire de synonymes universels :
      dans htdig il y a un fichier de synonymes et on met tous les synonymes sur la même ligne, pratique, donc je peux mettre tous les synonymes pour chaque langue, tout sur une même ligne

      en fait séparer les langues c'est absurde, je m'en rend compte maintenant ;
      l'indexation doit se faire sur des concepts, la langue n'est que l'interface......
      • [^] # Re: trouver la langue d'un texte

        Posté par  . Évalué à 1.

        example pour le fichier de synonyms de htdig :

        color colour
        czar tsar tzar
        hemaglobin haemaglobin hemoglobin haemoglobin

        rien ne m'empêcherait de rajouter :
        hemaglobin haemaglobin hemoglobin haemoglobin hémoglobine

        plus toutes les variantes en allemand, espagnol....

        là où ça coince ce sont les mots qui s'écrivent pareil mais avec des sens différents.....
        genre :
        car (en) = voiture
        car (fr) = bus, voire la conjonction "car"

        enfin bon, à mon avis la meilleure solution reste encore de :
        1) déterminer la langue
        2) indexer le texte selon le dictionnaire de cette langue
        ou alors :
        2a) traduire grosso-modo les mots litigieux comme "car"/"car"
        2b) indexer selon un dico commun qui regroupe les synonymes de toutes les langues

        je crois que htdig ne peut pas indexer en une passe selon deux ou plusieurs dictionnaires, il faut indexer une deuxième fois sur un autre dictionnaire, ce qui crée un deuxième index.....
      • [^] # Re: trouver la langue d'un texte

        Posté par  (site web personnel) . Évalué à -4.

        Toutes les langues ne transportent pas les concepts..il est des choses que tu comprends parfaitement,qu un anglais comprend sans probleme, mais qu un chinois et un japonais ne pourront peut etre jamais saisir, et vice et versa.
        Il faut que tu arriveras à laisser les solutions dialectiques et sinusoidales de la pseudo facilité.

        Bref, si j etais toi, je ferais de la linguistique avant de vouloir m attaquer à un si vaste probleme, ou alors j ecrirai à Larry Wall (inventeur de Perl et linguiste)
        • [^] # Re: trouver la langue d'un texte

          Posté par  . Évalué à 3.

          Je ne sais pas où tu as été péché ça, mais c'est complètement absurde. Réfléchis deux secondes, et demande-toi s'il est possible qu'un chinois puisse ne pas comprendre certains concepts qui te sont familiers. Il est avéré que la langue peux constituer un frein pour expliquer certaines choses, mais n'est jamais la cause d'une impossibilité de compréhension. Certaines cultures ignorent totalement certains concepts qui sont courant chez d'autres, mais toutes les langues, je dis bien toutes, peuvent exprimer l'ensemble de tous les concepts. Des mots peuvent manquer, mais les concepts sont toujours exprimables par paraphrases ou analogie.

          En fait, tu te réfères probablement à l'hypothèse de Sapir-Whorf (http://www.zompist.com/lang21.html#29(...) ), dont on sait qu'elle est très douteuse.

          D'ailleurs la FAQ l'exprime clairement: However, the strong form of the hypothesis is not now widely believed. The conceptual systems of one language, after all, can be explained and understood by speakers of another.
          • [^] # Re: trouver la langue d'un texte

            Posté par  (site web personnel) . Évalué à 2.

            Je ne me basais pas sur cette hypothese qui m est encore inconnue au moment ou je tape cette reponse..

            Quant au concepts, c ets justement parceque j etudie des langues asiatiques que j en parle. Certes, on peut approcher de l expression du concept, mais ce n est pas parcequ on peut l ecrire noir sur blanc qu il a un sens pour le lecteur (et je ne parle pas de comprehension syntaxique ou grammaticale, ni meme de culture, mais je stipule bien que le lecteur peut tres bien etre incapable de discerner le concept)
            • [^] # Re: trouver la langue d'un texte

              Posté par  . Évalué à 1.

              Ce qui n'a rien à voir avec la langue, mais avec le lecteur. La précision était utile, car c'est un lieu commun que de dire qu'un langue ne peut exprimer tel ou tel concept, ou au contraire que telle ou telle langue possède une plus grande variété de concepts (l'exemple typique étant le nombre de mots pour qualifier la neige en inuit). N'importe quel linguiste te dira que c'est faux, d'autant, pour l'exemple de l'unuit, que c'est une langue agglutinante, comme l'allemand ou le japonais où des morphèmes sont associés à une racine, pouvant ainsi former un ensemble très créatif de "mots" (le terme "mot" perd ici un peu de son sens) et toute les gammes de nuances pour les concepts associés.
        • [^] # Re: trouver la langue d'un texte

          Posté par  . Évalué à 2.

          j'étais (et je pense l'être toujours) assez féru de grammaire et d'orthographe
          mais je crois que là tu m'as scotché :-)
          c'est quoi le "Il faut que tu arriveras à laisser les solutions dialectiques et sinusoidales de la pseudo facilité"
          c'est tiré d'un sketche de "Les inconnus" ? :-)

          OK, on va rester simple et pragmatique,
          je ne veux pas non plus réinventer un moteur de la complexité de celui de Google.

          je m'en tiens pour l'instant aux principales langues européennes, que je classe dans 4 grandes catégories (j'ai bon ?):
          - latines (français/canadien, italien, espagnol, portuguais/brésilien)
          - anglo-saxonnes (anglais/américain, allemand, autrichien, hollandais, flamant)
          - nordiques (suédois, norvégien, finlandais, danois)
          - slaves d'alphabets non-cyrilliques (polonais, tchèque, slovaque, roumain, hongrois, slovène, bulgare?)

          donc pas de cyrillique, pas d'arabe, pas de chinois/japonais/coréen, pas de sanscrit, pas de hiéroglyphes et pas de langue "Elvish" :-)
          je reste sur les 26 lettres de l'alphabet et leurs dérivées accentuées...

          ou alors si je faisais ça pour toutes les langues, faudrait que je pense linguistique globale.... et que je code en Unicode, et là j'ai pas fini, effectivement......

          enfin merci du conseil, je vais aller creuser l'aspect linguistique de Perl....
          • [^] # Re: trouver la langue d'un texte

            Posté par  . Évalué à 2.

            Juste un petit détail, le Roumain n'est pas du tout une langue slave mais une langue latine. Le hongrois n'est pas slave non plus, c'est une langue finno-ougrienne. Le bulgare s'écrit en caractères cyrilliques je crois. Voilà une liste avec plein de langues pour te donner des idées : http://fr.wikipedia.org/wiki/Langues_par_famille(...) :)
            • [^] # Re: trouver la langue d'un texte

              Posté par  . Évalué à 2.

              ooops désolé pour l'erreur et merci pour le lien,
              impressionnant le nombre de langues et de familles/sous-familles

              tiens, curieux, tout à la fin de la page :

              Autres familles ou orphelines, à classer :
              Nahuatl
              Maya
              Basque ........
              Hatti
              hourrite
          • [^] # Re: trouver la langue d'un texte

            Posté par  (site web personnel) . Évalué à 1.

            Oui pour les inconnus ( du genre "et vice et versa")

            Et pour les langues, fallait preciser... Grace a mes connaissances en langues asiatiques, je me suis fait moinsser...

            Et je ne crois pas que le "esset" (le double "s" en allemand d il y a 5 ans) soit une des 26 lettres accentuée de notre alphabet....
            Et tu vas devoir passer par unicode je pense..Ca sera ca de gagner si qq1 reprend ton prgramme par la suite.
            • [^] # Re: trouver la langue d'un texte

              Posté par  . Évalué à 2.

              "Et pour les langues, fallait preciser... Grace a mes connaissances en langues asiatiques, je me suis fait moinsser..."
              C'est surtout que tu exprimes des contre-vérités basées sur des connaissances trop spécifiques (terme plus gentil pour dire "insuffisantes").

              Pour ma part je ne moinsse pas pour ça, mais je préfère rectifier chaque fois que c'est possible, pour éviter la propagation d'idées fausses (toujours facile quand elles sont exprimées avec un ton péremptoire sur un site où les spécialistes du sujet ne sont pas légion).
  • # Re: trouver la langue d'un texte

    Posté par  (site web personnel) . Évalué à 3.

    J'avais vu un article sympa. Des gens qui devinaient la langue en utilisant d'abord gzip.
    Je crois que l'idée c'est que si tu ajoute ton texte a un long texte de la meme la,gue le gzip obtenu sera pas bcp plus gros que le gzip original vu que tu auras surtout des chaines dejà présentes alors que si tu ajoutes à une autre langue ca compressera moins bien le morceau ajouté. Mais bon je me souviens en fait plus de comment ils faisaient :)
    • [^] # Re: trouver la langue d'un texte

      Posté par  (site web personnel) . Évalué à 3.

      Peut-être parles-tu de l'excellent article de Jean-Paul Delahaye intitulé « Logique et calcul : Classer musiques, langues, images, textes et génomes » paru dans le magazine « pour la science », dans son numéro de Mars 2004 (317).

      Il explique comment les algorithmes de compressions sans pertes peuvent être utilisés pour calculer des distances entre les éléments (distance entre deux textes par exemple) et ainsi mettre au point des méthodes de classements automatiques.

      Le principe est simple.
      soit A et B deux textes. On calcule zip(A), zip(B) puis zip(A+B) où zip() est un algorithme de compression adapté à la nature de A et B.
      La distance de similarité entre A et B est donc d(A, B) = zip(A) + zip(B) - zip(A+B).

      Avec cette notion de distance, on peut alors classer l'ensemble des textes.
      Il est ainsi possible de classer les textes par langues et ainsi déterminer avec une marge d'erreur faible la langue des textes.

      Attention toutefois. Coment classer un texte en Français qui contient de larges citations en Anglais ?
  • # Re: trouver la langue d'un texte

    Posté par  . Évalué à 2.

    y'a quelques années j'ai rencontré ce problème (il s'agissait de déterminer la langue d'un email pour le vocaliser en synthèse de la parole). A l'époque j'avais trouvé un système statistique universitaire qui marchait pas mal. Il n'est plus en ligne apparemment mais si ça t'intéresses, contactes-moi je peux te le mailer.
    Si je me souviens bien, il suffisait de lui donner un corpus de texte représentatif de la langue target, et il générait des tables statistiques de référence. La reconnaissance était efficace en général à partir d'une 20aine de caractères (le sujet des email posait souvent un pb !)
  • # Re: trouver la langue d'un texte

    Posté par  . Évalué à 1.

    Un outil qui s'appelle CMU-Toolkit (sous Linux) http://mi.eng.cam.ac.uk/~prc14/toolkit.html(...) permet de faire une analyse de texte, comme c'est evoque plus haut a partir de n-gramme.
    J'ai pas essaye sur des textes de differentes langues, mais le fonctionnement est le suivant, tu prends un texte qui servira de reference (un par langue) puis tu compare ton nouveau texte avec ton model et ca te donne des valeurs notamment la complexite du model, qui devrait te permettre d'etablir la langue. Ceci est au conditionelle car je ne l'ai pas teste, mais etant donne le fonctionnement il n'y a pas de raison que ca ne marche pas. En plus vu qu'il fonctionne par module, tu peux utiliser selon ton besoin.

    Sous windows, j'ai vu un truc qui s'appelle Monkey, mais c'est plutot chaud a trouver, enfin une bonne recherche te le donne. Ca te donne une valeur d'entropie, que je pense il est possible d'interpreter car elle devrait etre differente selon les langues.

    Enfin la technique avec les algos de compression me semble une res bonne idee car elle se base sur le meme principe. Au changement de langue, la compression devrait etre moins bonne, donc ca te confirme si les textes sont bien de la meme langue. Reste a verifier les resultats.
  • # Re: trouver la langue d'un texte

    Posté par  . Évalué à 3.

    Si tu as certains textes dont tu connais la langue, tu peux utiliser un filtre bayesien.

    Quelques liens:
    http://www.divmod.org/Home/Projects/Reverend/index.html(...)
    http://www.lbreyer.com/gpl.html(...)
    http://freshmeat.net/search/?q=bayesian&section=projects(...)

    Perso, j'utilise le module reverand en python pour classer des objets selon leur description et je suis satisfait. Je recois en entrée des descriptions d'objets et je dois déterminer si c'est un meuble, de l'argenterie, un tableau, une sculpture, ...
    Par exemple, 90% des objets de cette page sont classés automatiquement de cette manière: http://auction-in-europe.com/index.py/ant_arts(...)
    J'ai environ 5% d'erreur mais les conditions sont dures: classer une description d'une ligne dans l'une des 30 catégories.
  • # Re: trouver la langue d'un texte

    Posté par  . Évalué à 1.

    En ce qui concerne les textes qui utilisent notre alphabet (par opposition aux langues asiatiques par exemple), je me souviens de la méthode utilisée pour casser le chiffrement de Vigenere, en utilisant les frequences d'apparition de chaque lettre. Et ces statistiques varient d'une langue à l'autre. En les utilisant tu pourrais peut-être te servir de ca comme une base pour en faire sortir une empreinte et la comparer avec d'autres connues.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.