Introduktion till Natural Language Toolkit (NLTK)

Naturlig språkbehandling (NLP) är automatisk eller halvautomatisk behandling av mänskligt språk. NLP har nära anknytning till lingvistik och har länkar till forskning inom kognitiv vetenskap, psykologi, fysiologi och matematik. I datavetenskapsområdet är NLP relaterat till kompilatorteknik, formell språkteori, interaktion mellan människa och datorer, maskininlärning och teoremetoder. Denna Quora-fråga visar olika fördelar med NLP.

I denna handledning kommer jag att gå igenom en intressant Python-plattform för NLP, kallad Natural Language Toolkit (NLTK). Innan vi ser hur vi ska arbeta med den här plattformen, låt mig först berätta vad NLTK är.

Vad är NLTK?

Natural Language Toolkit (NLTK) är en plattform som används för att bygga program för textanalys. Plattformen släpptes ursprungligen av Steven Bird och Edward Loper i samband med en beräkningslingvistik vid University of Pennsylvania 2001. Det finns en åtföljande bok för plattformen Natural Process Processing with Python.

Installera NLTK

Låt oss nu installera NLTK för att börja experimentera med naturlig språkbehandling. Det blir kul!

Installera NLTK är väldigt enkelt. Jag använder Windows 10, så i mitt kommandoprompt (MS-DOS) Jag skriver följande kommando:

pip installationen nltk

Om du använder Ubuntu eller macOS kör du kommandot från Terminal. Mer information om hur du installerar NLTK på olika plattformar finns i dokumentationen.

Om du undrar vad pip det är ett pakethanteringssystem som används för att installera och hantera mjukvarupaket som är skrivna i Python. Om du använder Python 2> = 2.7.9 eller Python 3> = 3.4, har du redan pip installerat! För att kontrollera din Python-version, skriv bara följande i kommandotolken:

python - version

Låt oss fortsätta och kolla om vi har installerat NLTK framgångsrikt. För att göra det, öppna Pythons IDLE och skriv de två linjerna som visas i bilden nedan:


Om du får tillbaka versionen av din NLTK, så gratulerar du, har du NLTK installerat framgångsrikt!

Så vad vi gjort i ovanstående steg är att vi installerade NLTK från Python Package index (pip) lokalt i vår virtuella miljö.

Observera att du kanske har en annan version av NLTK beroende på när du har installerat plattformen, men det borde inte orsaka problem.

Arbeta med NLTK

Det första vi behöver göra för att arbeta med NLTK är att ladda ner det som kallas NLTK corpora. Jag ska ladda ner hela korporan. Jag vet att den är väldigt stor (10,9 GB), men vi ska bara göra det en gång. Om du vet vilken corpora du behöver behöver du inte ladda ner hela korporan. 

Skriv in din Pythons IDLE följande:

import nltk nltk.download ()

I det här fallet får du en GUI från vilken du kan ange destinationen och vad du ska ladda ner, som visas i bilden nedan:

Jag ska ladda ner allt på denna punkt. Klicka på Ladda ner knappen längst ner till vänster i fönstret och vänta ett tag tills allt laddas ner till din målkatalog.

Innan du går framåt kanske du undrar vad en corpus (singular av corpora) är. Ett corpus kan definieras enligt följande:

Corpus, plural corpora; En samling språkliga data, antingen sammanställda som skrivna texter eller som transkription av inspelat tal. Huvudsyftet med ett corpus är att verifiera en hypotes om språk - till exempel för att bestämma hur användningen av ett visst ljud, ord eller syntaktisk konstruktion varierar. Corpus lingvistik handlar om principer och övning av att använda corpora i språkstudier. En datorkorpus är en stor mängd maskinläsbara texter.
(Crystal, David. 1992. En Encyclopedic Dictionary of Language and Languages. Oxford: Blackwell.)

En textkorpus är alltså helt enkelt en stor textkropp.

Stoppa ord

Ibland behöver vi filtrera bort värdelösa data för att göra data mer begripliga av datorn. I naturlig språkbehandling (NLP) kallas sådana värdelösa data (ord) sluta ord. Så, dessa ord till oss har ingen betydelse, och vi skulle vilja ta bort dem.

NLTK ger oss några stoppord att börja med. För att se dessa ord, använd följande skript:

från nltk.corpus import stopwords print (set (stopwords.words ('engelska')))

I så fall får du följande utmatning:

Vad vi gjorde är att vi tryckte ut en uppsättning (oorderad samling av föremål) av stoppord på det engelska språket.

Hur kan vi ta bort stoppord från vår egen text? Exemplet nedan visar hur vi kan utföra denna uppgift:

från nltk.corpus importera stopwords från nltk.tokenize import word_tokenize text = 'I denna handledning läser jag NLTK. Det är en intressant plattform. ' stop_words = set (stopwords.words (engelska)) words = word_tokenize (text) new_sentence = [] för ord i ord: om ord inte i stop_words: new_sentence.append (word) print (new_sentence)

Utmatningen av ovanstående skript är:

Tokenisering, som definierad i Wikipedia, är:

Processen att bryta en ström av text upp i ord, fraser, symboler eller andra meningsfulla element som kallas tokens.

Så vad word_tokenize () funktionen är:

Tokenera en sträng för att dela upp skillnadsintervall än perioder

Sökande

Låt oss säga att vi har följande textfil (ladda ner textfilen från Dropbox). Vi skulle vilja söka efter (sök) ordet språk. Vi kan helt enkelt göra det här med NLTK-plattformen enligt följande:

import nltk file = open ('NLTK.txt', 'r') read_file = file.read () text = nltk.Text (nltk.word_tokenize (read_file)) match = text.concordance ('language')

I så fall får du följande utmatning:

Lägg märke till att överensstämmelse() returnerar varje förekomst av ordet språk, förutom vissa sammanhang. Innan det, som vi visar i skriptet ovan, markerar vi läsfilen och konverterar den sedan till en nltk.Text objekt.

Jag vill bara notera att första gången jag sprang programmet, fick jag följande fel, som tycks vara relaterat till kodning konsolen använder:

Filen "test.py", rad 7, in  matcha = text.concordance ('language'). Avkodning ('utf-8') Filen "C: \ Python35 \ lib \ site-packages \ nltk \ text.py", rad 334, i concordance self._concordance_index.print_concordance ord, bredd, rader) Fil "C: \ Python35 \ lib \ site-packages \ nltk \ text.py", rad 200, i print_concordance print (vänster, self._tokens [i], höger) Fil "C: \ Python35 \ lib \ encodings \ cp437.py ", rad 19, kodar tillbaka codecs.charmap_encode (inmatning, self.errors, encoding_map) [0] UnicodeEncodeError: 'charmap' codec kan inte koda tecken '\ u2014' i position 11: karaktärskartor till 

Vad jag bara gjorde för att lösa problemet är att köra det här kommandot i min konsol innan du kör programmet: chcp 65001.

Gutenberg Corpus

Som nämns i Wikipedia:

Projekt Gutenberg (PG) är ett frivilligt försök att digitalisera och arkivera kulturarbeten, att "uppmuntra skapandet och distributionen av e-böcker". Det grundades 1971 av Michael S. Hart och är det äldsta digitala biblioteket. De flesta av föremålen i samlingen är de fullständiga texterna av public domain-böcker. Projektet försöker göra dessa så gratis som möjligt, i långvariga öppna format som kan användas på nästan vilken dator som helst. Från och med 3 oktober 2015 nådde Project Gutenberg 50 000 objekt i sin samling.

NLTK innehåller ett litet urval av texter från Project Gutenberg. För att se de medföljande filerna från Project Gutenberg gör vi följande:

importera nltk gutenberg_files = nltk.corpus.gutenberg.fileids () print (gutenberg_files)

Resultatet av ovanstående skript kommer att vara enligt följande:

Om vi ​​vill hitta antalet ord för textfilen bryant-stories.txt till exempel kan vi göra följande:

importera nltk bryant_words = nltk.corpus.gutenberg.words ('bryant-stories.txt') skriv ut (len (bryant_words))

Ovanstående skript bör returnera följande antal ord: 55.563

Slutsats

Som vi har sett i den här handledningen ger NLTK-plattformen oss ett kraftfullt verktyg för att arbeta med naturligt språkbehandling (NLP). Jag har bara repat ytan i denna handledning. Om du vill gå djupare in i att använda NLTK för olika NLP-uppgifter, kan du se NLTK: s medföljande bok: Natural Language Processing with Python.