Python Web Scraping - Trattare con il testo
Nel capitolo precedente abbiamo visto come trattare i video e le immagini che otteniamo come parte del contenuto di web scraping. In questo capitolo ci occuperemo dell'analisi del testo utilizzando la libreria Python e lo impareremo in dettaglio.
introduzione
È possibile eseguire l'analisi del testo utilizzando la libreria Python chiamata Natural Language Tool Kit (NLTK). Prima di passare ai concetti di NLTK, comprendiamo la relazione tra analisi del testo e web scraping.
Analizzare le parole nel testo può portarci a sapere quali parole sono importanti, quali parole sono insolite, come le parole sono raggruppate. Questa analisi semplifica l'attività di web scraping.
Iniziare con NLTK
Il Natural language toolkit (NLTK) è una raccolta di librerie Python progettata appositamente per identificare e taggare parti del discorso trovate nel testo del linguaggio naturale come l'inglese.
Installazione di NLTK
È possibile utilizzare il seguente comando per installare NLTK in Python:
pip install nltk
Se stai usando Anaconda, allora un pacchetto conda per NLTK può essere creato usando il seguente comando:
conda install -c anaconda nltk
Download dei dati di NLTK
Dopo aver installato NLTK, dobbiamo scaricare repository di testo preimpostati. Ma prima di scaricare i repository di preset di testo, dobbiamo importare NLTK con l'aiuto diimport comando come segue -
mport nltk
Ora, con l'aiuto del seguente comando, è possibile scaricare i dati NLTK -
nltk.download()
L'installazione di tutti i pacchetti disponibili di NLTK richiederà del tempo, ma si consiglia sempre di installare tutti i pacchetti.
Installazione di altri pacchetti necessari
Abbiamo anche bisogno di altri pacchetti Python come gensim e pattern per eseguire analisi del testo e creare applicazioni per l'elaborazione del linguaggio naturale utilizzando NLTK.
gensim- Una robusta libreria di modelli semantici che è utile per molte applicazioni. Può essere installato con il seguente comando:
pip install gensim
pattern - Usato per fare gensimpacchetto funziona correttamente. Può essere installato con il seguente comando:
pip install pattern
Tokenizzazione
Il processo di suddivisione del testo dato, nelle unità più piccole chiamate token, è chiamato tokenizzazione. Questi gettoni possono essere parole, numeri o segni di punteggiatura. È anche chiamatoword segmentation.
Esempio
Il modulo NLTK fornisce diversi pacchetti per la tokenizzazione. Possiamo utilizzare questi pacchetti secondo il nostro requisito. Alcuni dei pacchetti sono descritti qui -
sent_tokenize package- Questo pacchetto dividerà il testo di input in frasi. È possibile utilizzare il seguente comando per importare questo pacchetto:
from nltk.tokenize import sent_tokenize
word_tokenize package- Questo pacchetto dividerà il testo di input in parole. È possibile utilizzare il seguente comando per importare questo pacchetto:
from nltk.tokenize import word_tokenize
WordPunctTokenizer package- Questo pacchetto dividerà il testo di input così come i segni di punteggiatura in parole. È possibile utilizzare il seguente comando per importare questo pacchetto:
from nltk.tokenize import WordPuncttokenizer
Stemming
In qualsiasi lingua, ci sono diverse forme di parole. Una lingua include molte variazioni dovute ai motivi grammaticali. Ad esempio, considera le paroledemocracy, democratic, e democratization. Per i progetti di machine learning così come per i progetti di web scraping, è importante che le macchine comprendano che queste diverse parole hanno la stessa forma di base. Quindi possiamo dire che può essere utile estrarre le forme base delle parole durante l'analisi del testo.
Ciò può essere ottenuto mediante lo stemming che può essere definito come il processo euristico di estrazione delle forme base delle parole tagliando le estremità delle parole.
Il modulo NLTK fornisce diversi pacchetti per lo stemming. Possiamo utilizzare questi pacchetti secondo il nostro requisito. Alcuni di questi pacchetti sono descritti qui:
PorterStemmer package- L'algoritmo di Porter viene utilizzato da questo pacchetto di stemming Python per estrarre il form di base. È possibile utilizzare il seguente comando per importare questo pacchetto:
from nltk.stem.porter import PorterStemmer
Ad esempio, dopo aver dato la parola ‘writing’ come input per questo stemmer, l'output sarebbe la parola ‘write’ dopo lo stemma.
LancasterStemmer package- L'algoritmo di Lancaster viene utilizzato da questo pacchetto di stemming Python per estrarre il modulo di base. È possibile utilizzare il seguente comando per importare questo pacchetto:
from nltk.stem.lancaster import LancasterStemmer
Ad esempio, dopo aver dato la parola ‘writing’ come input per questo stemmer, l'output sarebbe la parola ‘writ’ dopo lo stemma.
SnowballStemmer package- L'algoritmo di Snowball viene utilizzato da questo pacchetto di stemming Python per estrarre il modulo di base. È possibile utilizzare il seguente comando per importare questo pacchetto:
from nltk.stem.snowball import SnowballStemmer
Ad esempio, dopo aver fornito la parola "scrittura" come input a questo stemmer, l'output sarebbe la parola "write" dopo lo stemmer.
Lemmatizzazione
Un altro modo per estrarre la forma base delle parole è la lemmatizzazione, che normalmente mira a rimuovere le terminazioni flessive usando il vocabolario e l'analisi morfologica. La forma base di qualsiasi parola dopo la lemmatizzazione è chiamata lemma.
Il modulo NLTK fornisce i seguenti pacchetti per la lemmatizzazione:
WordNetLemmatizer package- Estrarrà la forma base della parola a seconda che sia usata come sostantivo come verbo. È possibile utilizzare il seguente comando per importare questo pacchetto:
from nltk.stem import WordNetLemmatizer
Chunking
Il chunking, che significa dividere i dati in piccoli blocchi, è uno dei processi importanti nell'elaborazione del linguaggio naturale per identificare le parti del discorso e frasi brevi come frasi nominali. Chunking è fare l'etichettatura dei gettoni. Possiamo ottenere la struttura della frase con l'aiuto del processo di chunking.
Esempio
In questo esempio, implementeremo il chunking Noun-Phrase utilizzando il modulo NLTK Python. Il chunking NP è una categoria di chunking che troverà i frammenti delle frasi nominali nella frase.
Passaggi per implementare la suddivisione in frasi nominali
Dobbiamo seguire i passaggi indicati di seguito per implementare il chunking di frasi nominali -
Passaggio 1: definizione della grammatica a blocchi
Nel primo passaggio definiremo la grammatica per il chunking. Consisterà nelle regole che dobbiamo seguire.
Passaggio 2: creazione di un parser di blocchi
Ora creeremo un parser di blocchi. Analizzerebbe la grammatica e darebbe l'output.
Passaggio 3: l'output
In quest'ultimo passaggio, l'output sarebbe prodotto in un formato ad albero.
Innanzitutto, dobbiamo importare il pacchetto NLTK come segue:
import nltk
Successivamente, dobbiamo definire la frase. Qui DT: il determinante, VBP: il verbo, JJ: l'aggettivo, IN: la preposizione e NN: il sostantivo.
sentence = [("a", "DT"),("clever","JJ"),("fox","NN"),("was","VBP"),("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]
Successivamente, stiamo dando la grammatica sotto forma di espressione regolare.
grammar = "NP:{<DT>?<JJ>*<NN>}"
Ora, la prossima riga di codice definirà un parser per analizzare la grammatica.
parser_chunking = nltk.RegexpParser(grammar)
Ora, il parser analizzerà la frase.
parser_chunking.parse(sentence)
Successivamente, forniamo il nostro output nella variabile.
Output = parser_chunking.parse(sentence)
Con l'aiuto del seguente codice, possiamo disegnare il nostro output sotto forma di un albero come mostrato di seguito.
output.draw()
Modello Bag of Word (BoW) Estrazione e conversione del testo in forma numerica
Bag of Word (BoW), un modello utile nell'elaborazione del linguaggio naturale, viene fondamentalmente utilizzato per estrarre le caratteristiche dal testo. Dopo aver estratto le caratteristiche dal testo, può essere utilizzato nella modellazione in algoritmi di apprendimento automatico perché i dati grezzi non possono essere utilizzati nelle applicazioni ML.
Funzionamento del modello BoW
Inizialmente, model estrae un vocabolario da tutte le parole nel documento. Successivamente, utilizzando una matrice dei termini del documento, costruirà un modello. In questo modo, il modello BoW rappresenta il documento solo come un sacchetto di parole e l'ordine o la struttura viene scartato.
Esempio
Supponiamo di avere le seguenti due frasi:
Sentence1 - Questo è un esempio del modello Bag of Words.
Sentence2 - Possiamo estrarre le caratteristiche utilizzando il modello Bag of Words.
Ora, considerando queste due frasi, abbiamo le seguenti 14 parole distinte:
- This
- is
- an
- example
- bag
- of
- words
- model
- we
- can
- extract
- features
- by
- using
Costruire un modello di borsa di parole in NLTK
Esaminiamo il seguente script Python che costruirà un modello BoW in NLTK.
Innanzitutto, importa il seguente pacchetto:
from sklearn.feature_extraction.text import CountVectorizer
Quindi, definisci il set di frasi -
Sentences=['This is an example of Bag of Words model.', ' We can extract
features by using Bag of Words model.']
vector_count = CountVectorizer()
features_text = vector_count.fit_transform(Sentences).todense()
print(vector_count.vocabulary_)
Produzione
Mostra che abbiamo 14 parole distinte nelle due frasi precedenti:
{
'this': 10, 'is': 7, 'an': 0, 'example': 4, 'of': 9,
'bag': 1, 'words': 13, 'model': 8, 'we': 12, 'can': 3,
'extract': 5, 'features': 6, 'by': 2, 'using':11
}
Topic Modeling: identificazione di modelli nei dati di testo
Generalmente i documenti sono raggruppati in argomenti e la modellazione di argomenti è una tecnica per identificare i modelli in un testo che corrisponde a un particolare argomento. In altre parole, la modellazione degli argomenti viene utilizzata per scoprire temi astratti o strutture nascoste in un dato insieme di documenti.
È possibile utilizzare la modellazione degli argomenti nei seguenti scenari:
Classificazione del testo
La classificazione può essere migliorata dalla modellazione dell'argomento perché raggruppa parole simili insieme piuttosto che utilizzare ciascuna parola separatamente come caratteristica.
Sistemi di raccomandazione
Possiamo costruire sistemi di raccomandazione utilizzando misure di somiglianza.
Topic Modeling Algoritmi
Possiamo implementare la modellazione degli argomenti utilizzando i seguenti algoritmi:
Latent Dirichlet Allocation(LDA) - È uno degli algoritmi più popolari che utilizza i modelli grafici probabilistici per l'implementazione della modellazione degli argomenti.
Latent Semantic Analysis(LDA) or Latent Semantic Indexing(LSI) - Si basa sull'algebra lineare e utilizza il concetto di SVD (Singular Value Decomposition) sulla matrice dei termini del documento.
Non-Negative Matrix Factorization (NMF) - Si basa anche sull'algebra lineare come LDA.
Gli algoritmi sopra menzionati avrebbero i seguenti elementi:
- Numero di argomenti: parametro
- Matrice documento-parola: input
- WTM (Word Topic Matrix) e TDM (Topic Document Matrix): output