Conteggio della frequenza delle parole in un file usando Python

Vi siete mai chiesti di un modo rapido per dire su cosa si sta concentrando un documento? Qual è il suo argomento principale? Lascia che ti dia questo semplice trucco. Elenca le parole uniche menzionate nel documento, quindi controlla quante volte ogni parola è stata menzionata (frequenza). In questo modo ti darebbe un'indicazione di cosa riguarda principalmente il documento. Ma non funzionerebbe facilmente manualmente, quindi abbiamo bisogno di un processo automatico, no??

Sì, un processo automatizzato renderà tutto più semplice. Vediamo come possiamo elencare le diverse parole uniche in un file di testo e controllare la frequenza di ogni parola usando Python.

Test File

In questo tutorial, useremo test.txt come nostro file di test. Vai avanti e scaricalo, ma non aprirlo! Facciamo un piccolo gioco. Il testo all'interno di questo file di test proviene da uno dei miei tutorial su Envato Tuts +. In base alla frequenza delle parole, indovina quale dei miei tutorial è stato estratto da questo testo.

Che il gioco abbia inizio!

Espressioni regolari

Dato che applicheremo uno schema nel nostro gioco, dobbiamo usare espressioni regolari (regex). Se "espressioni regolari" è un termine nuovo per te, questa è una bella definizione di Wikipedia:

Una sequenza di caratteri che definisce un modello di ricerca, principalmente per l'uso nella corrispondenza di modelli con stringhe o corrispondenza di stringhe, cioè operazioni "Trova e sostituisci". Il concetto nacque negli anni '50, quando il matematico americano Stephen Kleene formalizzò la descrizione di un linguaggio regolare, e divenne di uso comune con le utility di elaborazione testi Unix ed, un editor e grep, un filtro

Se vuoi saperne di più sulle espressioni regolari prima di andare avanti con questo tutorial, puoi vedere il mio altro tutorial Regular Expressions in Python e tornare di nuovo per continuare questo tutorial.

Costruire il programma

Lavoriamo passo dopo passo alla costruzione di questo gioco. La prima cosa che vogliamo fare è memorizzare il file di testo in una variabile stringa.

document_text = open ('test.txt', 'r') text_string = document_text.read ()

Ora, per rendere più semplice l'applicazione della nostra espressione regolare, trasformiamo tutte le lettere del nostro documento in lettere minuscole, usando la funzione lower (), come segue:

text_string = document_text.read (). lower ()

Scriviamo la nostra espressione regolare che restituirebbe tutte le parole con il numero di caratteri nell'intervallo [3-15]. Partendo da 3 aiuterà ad evitare parole che potrebbero non essere interessate a contare la loro frequenza come Se, di, nel, eccetera., e parole di lunghezza maggiore di 15 potrebbero non essere parole corrette L'espressione regolare per un tale modello si presenta come segue:

\ B [a-z] 3,15 \ b

\ b è relazionato a confine di parole. Per ulteriori informazioni sul limite della parola, puoi consultare questo tutorial.

L'espressione regolare sopra può essere scritta come segue:

match_pattern = re.search (r '\ b [a-z] 3,15 \ b', text_string) 

Dal momento che vogliamo esaminare più parole nel documento, possiamo usare il trova tutto funzione:

Restituisce tutte le corrispondenze non sovrapposte di modello nel stringa, come una lista di stringhe. Il stringa viene scansionato da sinistra a destra e le corrispondenze vengono restituite nell'ordine trovato. Se uno o più gruppi sono presenti nel modello, restituisce un elenco di gruppi; questo sarà un elenco di tuple se il modello ha più di un gruppo. Le partite vuote sono incluse nel risultato a meno che non tocchino l'inizio di un'altra partita.

A questo punto, vogliamo trovare la frequenza di ogni parola nel documento. Il concetto adatto da usare qui è Dizionari di Python, dal momento che abbiamo bisogno valore-chiave coppie, dove chiave è il parola, e il valore rappresenta il frequenza le parole sono apparse nel documento.

Supponendo di aver dichiarato un dizionario vuoto frequenza = , il paragrafo precedente avrebbe il seguente aspetto:

per word in match_pattern: count = frequency.get (word, 0) frequency [word] = count + 1

Ora possiamo vedere le nostre chiavi usando:

frequency_list = frequency.keys ()

Infine, al fine di ottenere la parola e la sua frequenza (numero di volte che è apparso nel file di testo), possiamo fare quanto segue:

per le parole in frequency_list: print words, frequency [words]

Mettiamo insieme il programma nella prossima sezione e vediamo come appare l'output.

Mettere tutto insieme

Dopo aver discusso il programma passo dopo passo, vediamo ora come appare il programma:

import re import string frequency =  document_text = open ('test.txt', 'r') text_string = document_text.read (). lower () match_pattern = re.findall (r '\ b [az] 3,15  \ b ', text_string) per word in match_pattern: count = frequency.get (word, 0) frequency [word] = count + 1 frequency_list = frequency.keys () per le parole in frequency_list: print words, frequency [words]

Se esegui il programma, dovresti ottenere qualcosa di simile al seguente:

Torniamo al nostro gioco. Passando attraverso le frequenze delle parole, cosa pensi che stia parlando del file di test (con il contenuto del mio altro tutorial Python)? 

(Suggerimento: controlla la parola con la frequenza massima).