Python

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 som er tilgjengelig på mange forskjellige språk ved hjelp av det innebygde korpusbiblioteket og det store bassenget med leksikalske data. Python er et av de mest populære programmeringsspråkene som brukes i datavitenskap og språkbehandling, hovedsakelig på grunn av allsidigheten i språket og tilgjengeligheten av nyttige moduler som NLTK. Denne artikkelen vil forklare hvordan man trekker ut setninger fra tekstavsnitt 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 installere python3-nltk

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

$ pip install - bruker -U nltk

Merk at du først må installere pip fra pakkebehandleren for at kommandoen ovenfor skal fungere. På noen distribusjoner kan det kalles pip3. Du kan også følge detaljerte installasjonsinstruksjoner som er tilgjengelige på offesiell nettside av NLTK.

Pakke ut setninger fra et avsnitt ved hjelp av NLTK

For avsnitt uten komplekse tegnsetting og avstand, kan du bruke den innebygde NLTK setningstokeneren, kalt "Punkt tokenizer", som kommer med en forhåndstrent modell. Du kan også bruke dine egne trente datamodeller for å tokenisere tekst til setninger. Skreddersydde datamodeller er utenfor omfanget av denne artikkelen, så koden nedenfor vil bruke den innebygde Punkt English tokenizer. For å laste ned Punkt-ressursfilen, kjør følgende tre kommandoer etter hverandre, og vent til nedlastingen er ferdig:

$ python3
$ import nltk
$ nltk.last ned ('punkt')

Et avsnitt fra “Alice's Adventures in Wonderland” vil bli brukt i kodeeksemplet nedenfor:

importer nltk
para = "Enten var brønnen veldig dyp, eller så falt hun veldig sakte, for hun hadde gjort det
god tid mens hun gikk ned for å se etter henne og lure på hva som skjedde
å skje neste. Først prøvde hun å se ned og finne ut hva hun kom til,
men det var 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 bokhyller; her og der hun
så kart og bilder hengt på tappene. Hun tok ned en krukke fra en av hyllene
da hun passerte; det ble merket 'ORANGE MARMALADE', men til hennes store skuffelse
var tom: hun likte ikke å slippe krukken av frykt for å drepe noen, så klarte det
å sette den inn i et av skapene mens hun falt forbi den."
tokens = nltk.sent_tokenize (para)
for t i tokens:
skriv ut (t, "\ n")

Å kjøre ovenstående kode vil gi deg følgende utdata:

Enten var brønnen veldig dyp, eller så falt hun veldig sakte, for hun hadde god tid som
hun gikk ned for å se etter seg og lure på hva som skulle skje videre.
Først prøvde hun å se ned og finne 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 det
fylt med skap og bokhyller; her og der så hun kart og bilder hang
på pinner.
Hun tok ned en krukke fra en av hyllene mens hun passerte; den ble merket 'ORANGEMARMALADE',
men til sin store skuffelse var den tom: hun likte ikke å slippe krukken av frykt for
drepte noen, så klarte å sette den inn i et av skapene da hun falt forbi den.

Den innebygde Punkt setningstokeneren fungerer bra hvis du vil tokenisere enkle avsnitt. Etter at du har importert NLTK-modulen, er alt du trenger å bruke metoden “sent_tokenize ()” på et stort tekstkorpus. Punkt setningstokeneren kan imidlertid ikke oppdage setninger riktig når det er et komplekst avsnitt som inneholder mange skilletegn, utropstegn, forkortelser eller gjentatte symboler. Det er ikke mulig å definere en standard måte å løse 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 å tilpasse den eksisterende Punkt-modellen for å fikse feil tokenisering ved å bruke noen ekstra parametere. For å gjøre dette, følg den offisielle Punkt tokenization-dokumentasjonen som er tilgjengelig her. For å bruke dine egne tilpassede justeringer, kreves det en liten endring av koden:

fra nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters
para = "Enten var brønnen veldig dyp, eller så falt hun veldig sakte, for hun hadde rikelig
av tiden da hun gikk ned for å se etter henne og lure på hva som skulle skje
neste. Først prøvde hun å se ned og finne 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 det
at de var fylt med skap og bokhyller; her og der så hun kart
og bilder hang på pinnene. Hun tok ned en krukke fra en av hyllene mens hun
bestått; det ble merket 'ORANGE MARMALADE', men til hennes store skuffelse var det
tom: hun likte ikke å slippe krukken av frykt for å drepe noen, så klarte det
la den inn i et av skapene mens hun falt forbi den."
punkt_params = PunktParameters ()
punkt_params.abbrev_types = set (['Mr', 'Mrs', 'LLC'])
tokenizer = PunktSentenceTokenizer (punkt_params)
tokens = tokenizer.tokenize (para)
for t i tokens:
skriv ut (t, "\ n")

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

Konklusjon

NLTK og dets tokeniseringsmetoder er ganske effektive til tokenisering og behandling av tekstdata. Imidlertid fungerer de forhåndstrente modellene kanskje ikke 100% med forskjellige typer tekster. Du må kanskje forbedre eksisterende modeller, trene og levere dine egne, eller skrive din egen kode for å fikse avvik.

Kamp for Wesnoth 1.1. 3.6 Utvikling utgitt
Kamp for Wesnoth 1.1. 3.6 utgitt i forrige måned, er den sjette utgivelsen i 1.1. 3.x-serien, og den leverer en rekke forbedringer, spesielt til bruke...
Slik installerer du League Of Legends på Ubuntu 14.04
Hvis du er fan av League of Legends, er dette en mulighet for deg å prøvekjør League of Legends. Merk at LOL støttes på PlayOnLinux hvis du er en linu...
Installer det siste OpenRA-strategispillet på Ubuntu Linux
OpenRA er en Libre / Free Real Time Strategy-spillmotor som gjenskaper de tidlige Westwood-spillene som den klassiske Command & Conquer: Red Alert. Di...