GNU/Linux >> Linux Esercitazione >  >> Linux

Frequenza delle parole in testo in lingua non inglese:come posso unire forme singolari e plurali ecc.?

Sto ordinando il francese parole della lingua in alcuni file di testo in base alla frequenza con un focus su approfondimenti piuttosto che la significatività statistica. La sfida consiste nel preservare i caratteri accentati e nel gestire i moduli dell'articolo davanti alle vocali(l' , d' ) nel contesto della formazione di token di parole per l'ordinamento.

L'argomento delle parole più frequenti in un file assume molte forme( 1 | 2 | 3 | 4). Quindi ho messo insieme questa funzione usando GNU utilità:

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
}

…che scambia gli spazi con le nuove righe; taglia un carattere seguito dalla punteggiatura che si trova all'inizio della riga; quindi converte tutto in minuscolo; usa questo compatto grep costrutto che abbina i caratteri costitutivi della parola per creare token; quindi rimuove le parole di arresto e infine c'è il solito ordinamento. Il file stop contiene un segmento con i singoli caratteri, quindi devi stare attento a come viene utilizzato, ma l'analisi fornita su come creare radici per parole in diverse lingue è davvero interessante!

Ora, quando confronto la frequenza di una parola significativa con l'output di grep -c direttamente sui file, penso che sia abbastanza vicino con un certo margine di errore.

Domande :

  • Come posso modificarlo per unire la frequenza dei plurali con le loro
    forme singolari, ovvero parole che condividono un prefisso comune con un suffisso di 1
    carattere variabile?
  • Sto cercando di valutare se il grep parte in particolare funzionerebbe con ciò che è su OSX ?

Risposta accettata:

Non sarai davvero in grado di farlo con un semplicistico sed sceneggiatura. Presumo che vorrai ridurre a "forme di citazione", comprimendo tutte le inflessioni in una forma base.

Ciò significa che aggettivi come protégé, protégés, protégée, protégées contano tutti come la stessa cosa, l'aggettivo/participio di base protégé . Allo stesso modo, tutte le inflessioni del verbo proteger — come protetto, protégeons, protégeais, protégeasse, protégeâmes, protégeront, protégeraient , ecc. — si ridurrebbe tutti a quel verbo di base.

Ciò significa che devi conoscere le cose sulla morfologia flessiva della lingua. Peggio ancora, dovrai capire qualcosa sull'effettiva sintassi del linguaggio, anche per le inflessioni e per distinguere gli omografi.

Ho fatto molto approcci semplici almeno alla prima parte di questo usando Perl. È davvero piuttosto un rompiscatole. Ecco un esempio di codice che ho usato per generare chiavi di ordinamento per città e paesi della penisola iberica:

       # 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;

Ciò rimuove gli articoli e le particelle in modo che non contino ai fini dello smistamento. Ma dovrai occuparti di moduli come l'autre con la cosiddetta virgoletta arricciata, che in realtà è U+2019 RIGHT SINGLE QUOTATION MARK, la forma preferita per l'apostrofo. Li ho normalizzati in quelli dritti con un s/’/'/g prima.

Correlati:differenza tra shell di accesso e shell non di accesso?

Oh, e dovrai occuparti delle codifiche:MacRoman non è lo stesso di UTF-8 o ISO-8859-1, non da lontano.

Onestamente, probabilmente vorrai usare qualcosa come l'algoritmo di stemming Snowball, specificando il francese come lingua. Certamente Lingua::Stem::Snowball di Perl il modulo sa come farlo. Puoi cercare i moduli Perl che hanno a che fare con la linguistica francese usando questa query.

Ma lo stemming ti porterà solo così lontano. Non farai davvero un buon lavoro finché non applichi l'analisi morfosintattica, il che significa che devi generare un'analisi per le frasi e assegnare parti del discorso a ciascun elemento lì.

Ciò richiede molto più lavoro. La buona notizia è che ci sono strumenti dedicati per questo là fuori, alcuni dei quali funzionano davvero sul francese. Ma questo sta davvero mordendo molto, perché ora ti sei avventurato nei campi dell'elaborazione del linguaggio naturale e della linguistica computazionale. Non c'è una grande casa per tali domande qui, ma probabilmente potrebbero trovare una risposta migliore su Linguistics.SE; Non lo so.


Linux
  1. In che modo la tecnologia cloud può potenziare l'eLearning e l'apprendimento a distanza?

  2. Come posso ottenere parole tra le prime due istanze di testo/modello?

  3. Come posso ordinare ls per proprietario e gruppo?

  4. Come posso giustificare il testo normale in Linux?

  5. Come posso convertire i dati di testo a due valori in binario (rappresentazione in bit)

Come confrontare e unire file di testo su Linux

Come confrontare e unire file di testo su Linux (parte 2)

Come utilizzare i marcatori ed eseguire la selezione del testo in Vim

Come trovare e sostituire testo, parola o stringa in un file

Come installare e utilizzare Sublime Text 4 in Linux

Come trovare e sostituire il testo in Vim