Introduksjon av Natural Language Toolkit (NLTK)

Naturlig språkbehandling (NLP) er automatisk eller halvautomatisk behandling av menneskelig språk. NLP er nært knyttet til lingvistikk og har lenker til forskning innen kognitiv vitenskap, psykologi, fysiologi og matematikk. I datavitenskapsdomen er NLP spesielt relatert til kompilerteknikker, formell språkteori, menneske-datamaskin-interaksjon, maskinlæring og teoremetoder. Dette Quora-spørsmålet viser ulike fordeler med NLP.

I denne opplæringen skal jeg gå gjennom en interessant Python-plattform for NLP kalt Natural Language Toolkit (NLTK). Før vi ser hvordan vi skal jobbe med denne plattformen, la meg først fortelle hva NLTK er.

Hva er NLTK?

Natural Language Toolkit (NLTK) er en plattform som brukes til å bygge programmer for tekstanalyse. Plattformen ble opprinnelig utgitt av Steven Bird og Edward Loper i forbindelse med et beregningsfaglig språkkurs ved University of Pennsylvania i 2001. Det er en tilhørende bok for plattformen Natural Process Processing with Python.

Installere NLTK

La oss nå installere NLTK for å begynne å eksperimentere med naturlig språkbehandling. Det blir moro!

Installere NLTK er veldig enkelt. Jeg bruker Windows 10, så i min kommandoprompt (MS-DOS) Jeg skriver inn følgende kommando:

pip installasjon nltk

Hvis du bruker Ubuntu eller macOS, kjører du kommandoen fra Terminal. Mer informasjon om installering av NLTK på ulike plattformer finnes i dokumentasjonen.

Hvis du lurer på hva pip er, det er et pakkehåndteringssystem som brukes til å installere og administrere programvarepakker skrevet i Python. Hvis du bruker Python 2> = 2.7.9 eller Python 3> = 3.4, har du allerede pip installert! For å sjekke Python-versjonen, skriv inn følgende i kommandoprompten:

python - versjon

La oss gå videre og se om vi har installert NLTK med hell. For å gjøre det, åpne Python IDLE og skriv de to linjene som er vist i figuren nedenfor:


Hvis du får versjonen av NLTK tilbake, så gratulerer, har du NLTK installert med hell!

Så det vi har gjort i trinnet ovenfor er at vi installerte NLTK fra Python Package-indeksen (pip) lokalt i vårt virtuelle miljø.

Legg merke til at du kanskje har en annen versjon av NLTK, avhengig av når du har installert plattformen, men det bør ikke forårsake et problem.

Arbeider med NLTK

Det første vi må gjøre for å jobbe med NLTK, er å laste ned det som heter NLTK corpora. Jeg skal laste ned hele korporasjonen. Jeg vet at det er veldig stort (10,9 GB), men vi skal bare gjøre det en gang. Hvis du vet hvilken corpora du trenger, trenger du ikke å laste ned hele korporasjonen. 

Skriv inn følgende i Pythons IDLE:

import nltk nltk.download ()

I dette tilfellet får du en GUI som du kan spesifisere destinasjonen og hva du skal laste ned, som vist på figuren nedenfor:

Jeg skal laste ned alt på dette punktet. Klikk på nedlasting knappen nederst til venstre i vinduet, og vent en stund til alt blir lastet ned til målkatalogen din.

Før du går videre, kan du lure på hva en corpus (entall av corpora) er. Et corpus kan defineres som følger:

Corpus, flertall corpora; En samling av språklige data, enten samlet som skrevet tekst eller som transkripsjon av innspilt tale. Hovedformålet med et corpus er å verifisere en hypotese om språk - for eksempel å bestemme hvordan bruken av en bestemt lyd, et ord eller en syntaktisk konstruksjon varierer. Corpus lingvistikk handler om prinsipper og praksis for bruk av corpora i språkstudie. En datakorpus er en stor del maskinlesbare tekster.
(Crystal, David. 1992. En encyklopedisk ordbok av språk og språk. Oxford: Blackwell.)

En tekstkorpus er dermed bare en hvilken som helst stor teksttekst.

Stopp ord

Noen ganger må vi filtrere ut ubrukelige data for å gjøre dataene mer forståelige av datamaskinen. I naturlig språkbehandling (NLP) kalles slike ubrukelige data (ord) stoppe ord. Så, disse ordene til oss har ingen betydning, og vi vil gjerne fjerne dem.

NLTK gir oss noen stoppord for å begynne med. For å se disse ordene, bruk følgende skript:

fra nltk.corpus import stopwords print (sett (stopwords.words ('engelsk'))))

I så fall får du følgende utgang:

Det vi gjorde er at vi trykte ut et sett (uordnet samling av gjenstander) av stoppord på det engelske språket.

Hvordan kan vi fjerne stoppordene fra vår egen tekst? Eksempelet nedenfor viser hvordan vi kan utføre denne oppgaven:

fra nltk.corpus importere stopwords fra nltk.tokenize import word_tokenize text = 'I denne opplæringen lærer jeg NLTK. Det er en interessant plattform. ' stop_words = set (stopwords.words (engelsk)) ord = word_tokenize (text) new_sentence = [] for ord i ord: hvis ord ikke i stop_words: new_sentence.append (word) print (new_sentence)

Utgangen av det ovennevnte skriptet er:

Tokenisering, som definert i Wikipedia, er:

Prosessen med å bryte en strøm av tekst opp i ord, setninger, symboler eller andre meningsfulle elementer som kalles tokens.

Så hva word_tokenize () funksjonen er:

Tokeniser en streng for å dele av tegnsetting annet enn perioder

Søker

La oss si at vi har følgende tekstfil (last ned tekstfilen fra Dropbox). Vi ønsker å søke etter (søk) ordet Språk. Vi kan ganske enkelt gjøre dette ved hjelp av NLTK-plattformen som følger:

importer 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ølgende utgang:

Legg merke til det samstemmighet () returnerer hver forekomst av ordet Språk, i tillegg til noen kontekst. Før det, som vist i skriptet ovenfor, tokenker vi lesefilen og konverterer den deretter til en nltk.Text gjenstand.

Jeg vil bare merke at første gang jeg kjørte programmet, fikk jeg følgende feil, som synes å være relatert til kodingen som konsollen bruker:

Fil "test.py", linje 7, i  match = text.concordance ('language'). Dekode ('utf-8') Fil "C: \ Python35 \ lib \ site-packages \ nltk \ text.py", linje 334, i concordance self._concordance_index.print_concordance ord, bredde, linjer) Fil "C: \ Python35 \ lib \ site-packages \ nltk \ text.py", linje 200, i print_concordance-utskrift (venstre, self._tokens [i], høyre) Fil "C: \ Python35 \ lib \ encodings \ cp437.py ", linje 19, i kode tilbake kodecs.charmap_encode (input, self.errors, encoding_map) [0] UnicodeEncodeError: 'charmap' codec kan ikke kode karakter '\ u2014' i posisjon 11: tegn kart til 

Det jeg bare gjorde for å løse dette problemet, er å kjøre denne kommandoen i konsollen før jeg kjører programmet: chcp 65001.

Gutenberg Corpus

Som nevnt i Wikipedia:

Prosjekt Gutenberg (PG) er et frivillig forsøk på å digitalisere og arkivere kulturarbeid, for å "oppmuntre til opprettelse og distribusjon av ebøker". Det ble grunnlagt i 1971 av Michael S. Hart og er det eldste digitale biblioteket. De fleste av elementene i samlingen er de fulle teksten til bøker om offentlig domene. Prosjektet prøver å gjøre disse så gratis som mulig, i langvarige, åpne formater som kan brukes på nesten hvilken som helst datamaskin. Fra 3. oktober 2015 nådde Project Gutenberg 50.000 gjenstander i sin samling.

NLTK inneholder et lite utvalg av tekster fra Project Gutenberg. For å se de medfølgende filene fra Project Gutenberg gjør vi følgende:

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

Utgangen av det ovennevnte skriptet vil være som følger:

Hvis vi vil finne antall ord for tekstfilen bryant-stories.txt for eksempel kan vi gjøre følgende:

import nltk bryant_words = nltk.corpus.gutenberg.words ('bryant-stories.txt') print (len (bryant_words))

Skriften ovenfor skal returnere følgende antall ord: 55563

Konklusjon

Som vi har sett i denne opplæringen, gir NLTK-plattformen oss et kraftig verktøy for arbeid med naturlig språkbehandling (NLP). Jeg har bare riper overflaten i denne opplæringen. Hvis du ønsker å gå dypere inn i bruk av NLTK for forskjellige NLP-oppgaver, kan du se NLTKs tilhørende bok: Natural Language Processing with Python.