Pytonorm

Hur man extraherar meningar från text med NLTK Python-modulen

Hur man extraherar meningar från text med NLTK Python-modulen
Natural Language Toolkit (NLTK) är en språk- och textbehandlingsmodul för Python. NLTK kan analysera, bearbeta och tokenisera text som finns på många olika språk med hjälp av det inbyggda biblioteket med korpor och en stor pool av lexikala data. Python är ett av de mest populära programmeringsspråken som används inom datavetenskap och språkbehandling, främst på grund av språkets mångsidighet och tillgängligheten av användbara moduler som NLTK. Denna artikel kommer att förklara hur man extraherar meningar från textavsnitt med hjälp av NLTK. Koden i den här guiden har testats med Python 3.8.2 och NLTK 3.4.5 på Ubuntu 20.04 LTS.

Installerar NLTK i Linux

För att installera NLTK i Ubuntu, kör kommandot nedan:

$ sudo apt installera python3-nltk

NLTK-paket finns i alla större Linux-distributioner. Sök efter nyckelordet “NLTK” i pakethanteraren för att installera paketen. Om NLTK av någon anledning inte är tillgängligt i din distribution kan du installera det från pip-pakethanteraren genom att köra kommandot nedan:

$ pip install --user -U nltk

Observera att du först måste installera pip från din pakethanterare för att kommandot ovan ska fungera. På vissa distributioner kan det kallas pip3. Du kan också följa detaljerade installationsinstruktioner som finns på officiell hemsida av NLTK.

Extrahera meningar från ett stycke med NLTK

För stycken utan komplicerade skiljetecken och avstånd kan du använda den inbyggda NLTK-meningstoken, kallad "Punkt tokenizer", som kommer med en förutbildad modell. Du kan också använda dina egna utbildade datamodeller för att tokenisera text till meningar. Anpassade utbildade datamodeller omfattas inte av denna artikel, så koden nedan använder den inbyggda Punkt English tokenizer. För att ladda ner Punkt-resursfilen, kör följande tre kommandon i följd och vänta tills nedladdningen är klar:

$ python3
$ import nltk
$ nltk.ladda ner ('punkt')

Ett stycke från "Alice's Adventures in Wonderland" kommer att användas i kodprovet nedan:

importera nltk
para = "Antingen var brunnen väldigt djup eller så föll hon långsamt, för hon hade gjort det
gott om tid när hon gick ner för att leta efter henne och undra vad som gick
att hända nästa. Först försökte hon titta ner och ta reda på vad hon kom till,
men det var för mörkt för att se någonting; sedan tittade hon på brunnens sidor och
märkte att de var fyllda med skåp och bokhyllor; här och där hon
såg kartor och bilder hängda på pinnar. Hon tog ner en burk från en av hyllorna
när hon passerade; det märktes 'ORANGE MARMALADE', men till hennes stora besvikelse det
var tom: hon tyckte inte om att tappa burken av rädsla för att döda någon, så lyckades det
att sätta den i ett av skåpen när hon föll förbi den."
tokens = nltk.sent_tokenize (para)
för t i tokens:
skriva ut (t, "\ n")

Att köra ovanstående kod ger dig följande resultat:

Antingen var brunnen väldigt djup eller så föll hon långsamt, för hon hade gott om tid som
hon gick ner för att leta efter henne och undra vad som skulle hända härnäst.
Först försökte hon se ner och se vad hon kom till, men det var för mörkt
att se någonting; sedan tittade hon på brunnens sidor och märkte att de var
fyllda med skåp och bokhyllor; här och där såg hon kartor och bilder hänga
på pinnar.
Hon tog ner en burk från en av hyllorna när hon passerade; det märktes 'ORANGEMARMALADE',
men till hennes stora besvikelse var det tomt: hon tyckte inte om att tappa burken av rädsla för
dödade någon, så lyckades sätta den i ett av skåpen när hon föll förbi den.

Den inbyggda Punkt-meningstoken fungerar bra om du vill tokenisera enkla stycken. Efter att ha importerat NLTK-modulen är allt du behöver göra att använda metoden “sent_tokenize ()” på ett stort textkorpus. Punkt-meningen tokenizer kan dock inte detektera meningar korrekt när det finns ett komplext stycke som innehåller många skiljetecken, utropstecken, förkortningar eller upprepade symboler. Det är inte möjligt att definiera ett vanligt sätt att lösa dessa problem. Du måste skriva anpassad kod för att hantera dessa problem med regex, strängmanipulation eller genom att träna din egen datamodell istället för att använda den inbyggda Punkt-datamodellen.

Du kan också försöka justera den befintliga Punktmodellen för att fixa felaktig tokenisering genom att använda några ytterligare parametrar. För att göra det, följ den officiella Punkt-tokeniseringsdokumentationen som finns tillgänglig här. För att använda dina egna anpassade justeringar krävs en liten ändring av koden:

från nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters
para = "Antingen var brunnen väldigt djup eller så föll hon mycket långsamt, för hon hade gott
när hon gick ner för att leta efter henne och undra vad som skulle hända
Nästa. Först försökte hon titta ner och ta reda på vad hon kom till, men det var det
för mörkt för att se någonting; sedan tittade hon på brunnens sidor och märkte
att de var fyllda med skåp och bokhyllor; här och där såg hon kartor
och bilder hängde på pinnar. Hon tog ner en burk från en av hyllorna medan hon
passerade; det märktes 'ORANGE MARMALADE', men till hennes stora besvikelse var det
tom: hon tyckte inte om att tappa burken av rädsla för att döda någon, så lyckades det
lägg det i ett av skåpen när hon föll förbi det."
punkt_params = PunktParameters ()
punkt_params.abbrev_types = set (['Mr', 'Mrs', 'LLC'])
tokenizer = PunktSentenceTokenizer (punkt_params)
tokens = tokenizer.tokenize (para)
för t i tokens:
skriva ut (t, "\ n")

Koden ovan gör samma jobb som metoden “sent_tokenize ()”. Nu kan du dock definiera dina egna regler med hjälp av inbyggda metoder och skicka dem som argument, som beskrivs i dokumentationen. Till exempel har vissa förkortningar lagts till i koden ovan. Om dessa förkortningar följs av skiljetecken bryts de inte in i en ny mening. Det normala beteendet är att använda en punkt eller punkt som en indikation på slutet av en mening.

Slutsats

NLTK och dess tokeniseringsmetoder är ganska effektiva för tokenisering och bearbetning av textdata. Men de förutbildade modellerna kanske inte fungerar 100% med olika typer av texter. Du kan behöva förbättra de befintliga modellerna, träna och leverera dina egna eller skriva din egen kod för att fixa avvikelser.

Mus Emulera musklick genom att sväva med Clickless Mouse i Windows 10
Emulera musklick genom att sväva med Clickless Mouse i Windows 10
Att använda en mus eller tangentbord i fel hållning av överdriven användning kan resultera i många hälsoproblem, inklusive stam, karpaltunnelsyndrom o...
Mus Lägg till musgester i Windows 10 med dessa gratisverktyg
Lägg till musgester i Windows 10 med dessa gratisverktyg
Under senare år har datorer och operativsystem utvecklats kraftigt. Det fanns en tid då användare var tvungna att använda kommandon för att navigera g...
Mus Kontrollera och hantera musrörelser mellan flera skärmar i Windows 10
Kontrollera och hantera musrörelser mellan flera skärmar i Windows 10
Dual Display Mouse Manager låter dig kontrollera och konfigurera musrörelser mellan flera skärmar genom att sakta ner dess rörelser nära gränsen. Wind...