GNU/Linux >> Tutoriels Linux >  >> Linux

Fréquence des mots dans un texte en langue non anglaise :comment puis-je fusionner des formes singulières et plurielles, etc. ?

Je trie français mots de langue dans certains fichiers texte selon la fréquence en mettant l'accent sur la perspicacité plutôt que la signification statistique. Le défi consiste à préserver les caractères accentués et à gérer les formes d'articles devant les voyelles (l' , d' ) dans le contexte de la mise en forme de jetons de mots pour le tri.

Le thème des mots les plus fréquents dans un fichier prend plusieurs formes( 1 | 2 | 3 | 4). J'ai donc créé cette fonction en utilisant GNU utilitaires :

compt1 () {
for i in *.txt; do
    echo "File: $i"
    sed -e 's/ /
/g' <"$i" | sed -e 's/^[[:alpha:]][[:punct:]](.*)/1/' | sed -e 's/(.*)/L1/' | grep -hEo "[[:alnum:]_'-]+" | grep -Fvwf /path_to_stop_words_file | sort | uniq -c | sort -rn 
done
}

… qui échange des espaces contre des sauts de lignes ; coupe un caractère suivi d'une ponctuation qui se trouve au début de la ligne ; puis convertit tout en minuscules ; utilise ce grep compact construction qui correspond aux caractères constitutifs du mot pour créer des jetons ; puis supprime les mots vides, et enfin il y a le tri habituel. Le fichier d'arrêt contient un segment avec des caractères individuels, vous devez donc faire attention à son utilisation, mais l'analyse fournie sur la façon de créer des radicaux pour des mots dans différentes langues est vraiment intéressante !

Maintenant, quand je compare la fréquence d'un mot significatif avec la sortie de grep -c directement sur les fichiers, je pense que c'est assez proche dans une certaine marge d'erreur.

Questions :

  • Comment puis-je modifier cela pour fusionner la fréquence des pluriels avec leurs
    formes singulières, c'est-à-dire des mots partageant un préfixe commun avec un suffixe variable de 1
     caractère ?
  • J'essaie d'évaluer si le grep une partie en particulier fonctionnerait avec ce qui est sur OSX ?

Réponse acceptée :

Vous ne pourrez vraiment pas faire cela avec un sed simpliste scénario. Je suppose que vous voudrez réduire aux "formes de citation", en regroupant toutes les inflexions dans une forme de base.

Cela signifie que des adjectifs comme protégé, protégés, protégé, protégés tous comptent pour la même chose, l'adjectif/participe de base protégé . De même, toutes les flexions du verbe protéger — comme protége, protégeons, protégeais, protégeasse, protégeâmes, protégeront, protégeraient , etc. - se réduiraient tous à ce verbe de base.

Cela signifie que vous devez savoir des choses sur la morphologie flexionnelle de la langue. Pire encore, vous devrez comprendre quelque chose sur la syntaxe réelle du langage, y compris pour les flexions et pour distinguer les homographes.

J'ai fait très des approches simples pour au moins la première partie de cela en utilisant Perl. C'est vraiment plutôt casse-pieds. Voici un exemple de code que j'ai utilisé pour générer des clés de tri pour les villes et villages de la péninsule ibérique :

       # 1st strip leading articles
          s/^L'//;    # Catalan
          s{ ^
            (?:
        # Castilian
                El
              | Los
              | La
              | Las

        # Catalan 
              | Els
              | Les         
              | Sa
              | Es

        # Gallego
              | O       
              | Os
              | A
              | As      
            ) 
            s+ 
          }{}x;
        # 2nd strip interior particles
          s/b[dl]'//g;   # Catalan
          s{ 
            b
            (?:
                el  | los | la | las | de  | del | y          # ES
              | els | les | i  | sa | es | dels               # CA 
              | o   | os  | a  | as  | do  | da | dos | das   # GAL
            )
            b
        }{}gx;

Cela dépouille les articles et les particules afin qu'ils ne comptent pas à des fins de tri. Mais vous devrez composer avec des formulaires comme l'autre avec un soi-disant guillemet bouclé, qui est en réalité U + 2019 GUILLEMET SIMPLE DROITE, la forme préférée pour l'apostrophe. Je les ai normalisés en lignes droites avec un s/’/'/g d'abord.

Connexe :Différence entre le shell de connexion et le shell sans connexion ?

Oh, et vous devrez vous occuper des encodages :MacRoman n'est pas la même chose que UTF-8 ou ISO-8859-1 - loin de là.

Honnêtement, vous voudrez probablement utiliser quelque chose comme l'algorithme de radical Snowball, en spécifiant le français comme langue. Certainement le Lingua::Stem::Snowball de Perl module sait comment faire cela. Vous pouvez rechercher des modules Perl liés à la linguistique française à l'aide de cette requête.

Mais le stemming ne vous mènera que jusqu'à présent. Vous ne ferez pas vraiment un bon travail tant que vous n'aurez pas appliqué l'analyse morphosyntaxique - ce qui signifie que vous devez générer une analyse des phrases et attribuer des parties du discours à chaque élément.

Cela demande beaucoup plus de travail. La bonne nouvelle est qu'il existe des outils dédiés à cela, dont certains fonctionnent effectivement sur le français. Mais c'est vraiment très mordant, car vous vous êtes maintenant aventuré dans les domaines du traitement du langage naturel et de la linguistique computationnelle. Il n'y a pas de grande maison pour de telles questions ici, mais elles pourraient probablement être mieux répondues sur Linguistics.SE; Je ne sais pas.


Linux
  1. Comment \n et \r sont-ils gérés différemment sous Linux et Windows ?

  2. Comment puis-je obtenir une liste de tous les mots mal orthographiés dans un texte en utilisant Linux ?

  3. Comment puis-je convertir des données textuelles à deux valeurs en binaire (représentation binaire)

  4. Comment `/etc/hosts` et DNS fonctionnent ensemble pour résoudre les noms d'hôte en adresses IP ?

  5. Pourquoi ma crontab ne fonctionne-t-elle pas et comment puis-je la dépanner ?

Comment comparer et fusionner des fichiers texte sous Linux

Comment comparer et fusionner des fichiers texte sous Linux (partie 2)

Comment utiliser des marqueurs et effectuer une sélection de texte dans Vim

Comment rechercher et remplacer du texte, un mot ou une chaîne dans un fichier

Comment installer et utiliser Sublime Text 4 sous Linux

Comment rechercher et remplacer du texte dans Vim