Python

Sådan udtrækkes sætninger fra tekst ved hjælp af NLTK Python-modulet

Sådan udtrækkes sætninger fra tekst ved hjælp af NLTK Python-modulet
Natural Language Toolkit (NLTK) er et sprog- og tekstbehandlingsmodul til Python. NLTK kan analysere, behandle og tokenisere tekst, der er tilgængelig på mange forskellige sprog ved hjælp af det indbyggede korpusbibliotek og den store pool af leksikale data. Python er et af de mest populære programmeringssprog, der bruges i datavidenskab og sprogbehandling, primært på grund af sprogets alsidighed og tilgængeligheden af ​​nyttige moduler som NLTK. Denne artikel forklarer, hvordan man udtrækker sætninger fra tekstafsnit ved hjælp af NLTK. Koden i denne vejledning er testet med Python 3.8.2 og NLTK 3.4.5 på Ubuntu 20.04 LTS.

Installation af NLTK i Linux

For at installere NLTK i Ubuntu skal du køre kommandoen nedenfor:

$ sudo apt installere python3-nltk

NLTK-pakker er tilgængelige i alle større Linux-distributioner. Søg efter nøgleordet “NLTK” i pakkehåndteringen for at installere pakkerne. Hvis NLTK af en eller anden grund ikke er tilgængeligt i repositorierne i din distribution, kan du installere det fra pip-pakkehåndteringen ved at køre kommandoen nedenfor:

$ pip install - bruger -U nltk

Bemærk, at du først skal installere pip fra din pakkehåndtering for at ovenstående kommando skal fungere. På nogle distributioner kan det kaldes pip3. Du kan også følge detaljerede installationsinstruktioner, der er tilgængelige på officiel hjemmeside af NLTK.

Uddrag af sætninger fra et afsnit ved hjælp af NLTK

For afsnit uden komplekse tegnsætning og afstand, kan du bruge den indbyggede NLTK-sætningstoken, kaldet "Punkt tokenizer", der kommer med en foruddannet model. Du kan også bruge dine egne uddannede datamodeller til at tokenisere tekst til sætninger. Tilpasset trænede datamodeller er uden for denne artikels anvendelsesområde, så koden nedenfor bruger den indbyggede Punkt English tokenizer. For at downloade Punkt-ressourcefilen skal du køre følgende tre kommandoer i rækkefølge og vente på, at downloadet er afsluttet:

$ python3
$ import nltk
$ nltk.download ('punkt')

Et afsnit fra "Alice's Adventures in Wonderland" vil blive brugt i nedenstående kodeeksempel:

import nltk
para = "Enten var brønden meget dyb, eller så faldt hun meget langsomt, for hun havde gjort det
masser af tid, da hun gik ned for at se efter hende og undre sig over, hvad der foregik
at ske næste. Først forsøgte hun at se ned og finde ud af, hvad hun kom til,
men det var for mørkt til at se noget; så kiggede hun på brøndens sider og
bemærkede, at de var fyldt med skabe og bogreoler; her og der hun
så kort og billeder hængt på pinde. Hun tog en krukke ned fra en af ​​hylderne
da hun gik forbi; det blev mærket 'ORANGE MARMALADE', men til hendes store skuffelse var det
var tom: hun kunne ikke lide at tabe krukken af ​​frygt for at dræbe nogen, så det lykkedes
at lægge det i et af skabene, da hun faldt forbi det."
tokens = nltk.sent_tokenize (para)
for t i tokens:
udskriv (t, "\ n")

Kørsel af ovenstående kode giver dig følgende output:

Enten var brønden meget dyb, eller så faldt hun meget langsomt, for hun havde masser af tid som
hun gik ned for at se efter hende og undre sig over, hvad der skulle ske næste gang.
Først forsøgte hun at se ned og finde ud af, hvad hun kom til, men det var for mørkt
at se noget; så kiggede hun på brøndens sider og bemærkede, at de var der
fyldt med skabe og bogreoler; her og der så hun kort og billeder hænge
på pinde.
Hun tog en krukke ned fra en af ​​hylderne, da hun passerede; det blev mærket 'ORANGEMARMALADE',
men til hendes store skuffelse var det tomt: hun kunne ikke lide at tabe krukken af ​​frygt for
dræbte nogen, så det lykkedes at sætte det i et af skabe, da hun faldt forbi det.

Den indbyggede Punkt sætning tokenizer fungerer godt, hvis du vil tokenisere enkle afsnit. Efter import af NLTK-modulet er alt, hvad du skal gøre, at bruge metoden “sent_tokenize ()” på et stort tekstkorpus. Punkt-sætningstokeneren kan dog muligvis ikke registrere sætninger korrekt, når der er et komplekst afsnit, der indeholder mange tegnsætningstegn, udråbstegn, forkortelser eller gentagne symboler. Det er ikke muligt at definere en standard måde at løse disse problemer på. Du bliver nødt til at skrive brugerdefineret kode til at tackle disse problemer ved hjælp af regex, strengmanipulation eller ved at træne din egen datamodel i stedet for at bruge den indbyggede Punkt datamodel.

Du kan også prøve at tilpasse den eksisterende Punkt-model for at rette forkert tokenisering ved hjælp af nogle yderligere parametre. For at gøre dette skal du følge den officielle Punkt-tokeniseringsdokumentation, der er tilgængelig her. For at bruge dine egne brugerdefinerede tweaks kræves en lille ændring af koden:

fra nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters
para = "Enten var brønden meget dyb, eller så faldt hun meget langsomt, for hun havde rigeligt
af tid, da hun gik ned for at se efter hende og undre sig over, hvad der skulle ske
Næste. Først forsøgte hun at se ned og finde ud af, hvad hun kom til, men det var det
for mørkt til at se noget; så kiggede hun på brøndens sider og bemærkede det
at de var fyldt med skabe og bogreoler; her og der så hun kort
og billeder hængt på pinde. Hun tog en krukke ned fra en af ​​hylderne, mens hun
bestået; det blev mærket 'ORANGE MARMALADE', men til hendes store skuffelse var det
tom: hun kunne ikke lide at tabe krukken af ​​frygt for at dræbe nogen, så det lykkedes det
sætte det i et af skabene, da hun faldt forbi det."
punkt_params = PunktParameters ()
punkt_params.abbrev_types = set (['Mr', 'Mrs', 'LLC'])
tokenizer = PunktSentenceTokenizer (punkt_params)
tokens = tokenizer.tokenize (para)
for t i tokens:
udskriv (t, "\ n")

Koden ovenfor udfører det samme job som metoden “sent_tokenize ()”. Du kan dog nu definere dine egne regler ved hjælp af indbyggede metoder og videregive dem som argumenter, som beskrevet i dokumentationen. For eksempel er nogle forkortelser blevet tilføjet til koden ovenfor. Hvis disse forkortelser efterfølges af tegnsætning, brydes de ikke i en ny sætning. Den normale adfærd er at bruge en prik eller punktum som en indikation på slutningen af ​​en sætning.

Konklusion

NLTK og dets tokeniseringsmetoder er ret effektive til tokenisering og behandling af tekstdata. Imidlertid fungerer de foruddannede modeller muligvis ikke 100% med forskellige typer tekster. Det kan være nødvendigt at forbedre de eksisterende modeller, træne og levere dine egne eller skrive din egen kode for at rette anomalier.

Mus Museklik på venstre museknap fungerer ikke på Windows 10
Museklik på venstre museknap fungerer ikke på Windows 10
Hvis du bruger en dedikeret mus med din bærbare computer eller stationære computer, men musens venstre-klik-knap fungerer ikke på Windows 10/8/7 af en...
Mus Markøren hopper eller bevæger sig tilfældigt, mens han skriver i Windows 10
Markøren hopper eller bevæger sig tilfældigt, mens han skriver i Windows 10
Hvis du finder ud af, at din musemarkør hopper eller bevæger sig alene, automatisk tilfældigt, mens du skriver Windows-bærbar computer eller computer,...
Mus Sådan vender du musens og touchpadsens rulle retning i Windows 10
Sådan vender du musens og touchpadsens rulle retning i Windows 10
Mus og Touchpads gør ikke kun computing let, men mere effektiv og mindre tidskrævende. Vi kan ikke forestille os et liv uden disse enheder, men det er...