Hvordan trekke ut setninger fra tekst ved hjelp av NLTK Python -modulen

Hvordan trekke ut setninger fra tekst ved hjelp av NLTK Python -modulen
The Natural Language Toolkit (NLTK) er en språk- og tekstbehandlingsmodul for Python. NLTK kan analysere, behandle og tokenisere tekst tilgjengelig på mange forskjellige språk ved hjelp av det innebygde biblioteket med korpora og et stort basseng med leksikale data. Python er et av de mest populære programmeringsspråkene som brukes i datavitenskap og språkbehandling, hovedsakelig på grunn av allsidigheten til språket og tilgjengeligheten av nyttige moduler som NLTK. Denne artikkelen vil forklare hvordan du henter ut setninger fra tekstparagraf ved hjelp av NLTK. Koden i denne guiden er testet med Python 3.8.2 og NLTK 3.4.5 på Ubuntu 20.04 LTS.

Installere NLTK i Linux

For å installere NLTK i Ubuntu, kjør kommandoen nedenfor:

$ sudo apt install python3-nltk

NLTK -pakker er tilgjengelige i alle større Linux -distribusjoner. Søk etter nøkkelordet “NLTK” i Package Manager for å installere pakkene. Hvis ikke av en eller annen grunn er NLTK ikke tilgjengelig i depotene for distribusjonen din, kan du installere den fra PIP -pakkebehandleren ved å kjøre kommandoen nedenfor:

$ pip install -bruker -u nltk

Merk at du først må installere PIP fra pakkebehandleren for kommandoen ovenfor for å fungere. På noen distribusjoner kan det kalles PIP3. Du kan også følge detaljerte installasjonsinstruksjoner tilgjengelig på den offisielle nettstedet til NLTK.

Trekke ut setninger fra et avsnitt ved hjelp av NLTK

For avsnitt uten komplekse punkteringer og avstand, kan du bruke den innebygde NLTK-setningstokenizer, kalt “Punkt Tokenizer,” som følger med en forhåndsutdannet modell. Du kan også bruke dine egne trente datamodeller for å tokenisere tekst til setninger. Tilpassede datamodeller er utenfor omfanget av denne artikkelen, så koden nedenfor vil bruke den innebygde Punkt English Tokenizer. For å laste ned Punkt Resource -filen, kjør følgende tre kommandoer etter hverandre, og vent til nedlastingen skal fullføre:

$ python3
$ Import NLTK
$ nltk.Last ned ('Punkt')

Et avsnitt fra "Alice's Adventures in Wonderland" vil bli brukt i kodeprøven nedenfor:

Importer NLTK
para = "Enten var brønnen veldig dyp, eller så falt hun veldig sakte, for hun hadde
god tid da hun gikk ned for å se på henne og lure på hva som gikk
å skje videre. Først prøvde hun å se ned og lage ut hva hun kom til,
Men det var for mørkt å se noe; Så så hun på sidene av brønnen, og
la merke til at de var fylt med skap og bokhelver; Her og der hun
så kart og bilder hengt på knagger. Hun tok ned en krukke fra en av hyllene
mens hun gikk; Det ble merket 'Orange Marmalade', men til hennes store skuffelse det
var tom: Hun likte ikke å slippe krukken i frykt for å drepe noen, så klarte
å legge det inn i et av skapene da hun falt forbi det.""
Tokens = nltk.sent_tokenize (para)
for t i symboler:
trykk (t, "\ n")

Å kjøre ovennevnte kode vil gi deg følgende utdata:

Den innebygde Punkt-setningstokenisatoren fungerer bra hvis du vil tokenisere enkle avsnitt. Etter å ha importert NLTK -modulen, er alt du trenger å gjøre å bruke “Sent_tokenize ()” -metoden på et stort tekstkorpus. Imidlertid kan det hende at PUNKT -setningstokenisatoren ikke oppdager setninger riktig når det er et komplekst avsnitt som inneholder mange tegnsettingsmerker, utropstegn, forkortelser eller repeterende symboler. Det er ikke mulig å definere en standard måte å overvinne disse problemene på. Du må skrive tilpasset kode for å takle disse problemene ved hjelp av regex, strengmanipulering eller ved å trene din egen datamodell i stedet for å bruke den innebygde PUNKT-datamodellen.

Du kan også prøve å finpusse den eksisterende PUNKT -modellen for å fikse feil tokenisering ved å bruke noen ekstra parametere. For å gjøre det, følg den offisielle dokumentasjonen for Punkt Tokenization tilgjengelig her. For å bruke dine egne tilpassede justeringer, kreves det en liten endring i koden:

Fra NLTK.tokenize.Punkt Import PunktSentencetokenizer, punktparametre
para = "Enten var brønnen veldig dyp, eller så falt hun veldig sakte, for hun hadde mye
av tiden da hun gikk ned for å se på henne og lure på hva som skulle skje
NESTE. Først prøvde hun å se ned og lage ut hva hun kom til, men det var det
For mørkt til å se noe; Så så hun på sidene av brønnen, og la merke til
at de var fylt med skap og bokhelver; Her og der så hun kart
og bilder hang på knagger. Hun tok ned en krukke fra en av hyllene som hun
passert; Det ble merket 'oransje marmelade', men til hennes store skuffelse var det
tom: Hun likte ikke å slippe krukken i frykt for å drepe noen, så klarte det
Sett den i et av skapene da hun falt forbi det.""
punkt_params = punktParameters ()
PUNKT_PARAMS.forkortelse Types = Set (['Mr', 'Mrs', 'LLC'])
Tokenizer = PUNKTSENTECETOKENIZER (PUNKT_PARAMS)
Tokens = tokenizer.Tokenize (para)
for t i symboler:
trykk (t, "\ n")

Koden over gjør den samme jobben som “Sent_tokenize ()” -metoden. Du kan imidlertid nå definere dine egne regler ved å bruke innebygde metoder og gi dem som argumenter, som beskrevet i dokumentasjonen. For eksempel er noen forkortelser blitt lagt til i koden ovenfor. Hvis disse forkortelsene blir fulgt av tegnsetting, vil de ikke bli brutt i en ny setning. Den normale oppførselen er å bruke en prikk eller periode som en indikasjon på slutten av en setning.

Konklusjon

NLTK og dens tokeniseringsmetoder er ganske effektive til tokenisering og behandling av tekstdata. Imidlertid fungerer de forhåndsutdannede modellene kanskje ikke 100% med forskjellige typer tekster. Det kan hende du må forbedre de eksisterende modellene, trene og levere din egen eller skrive din egen kode for å fikse anomalier.