Installerar NLTK i Linux
För att installera NLTK i Ubuntu, kör kommandot nedan:
$ sudo apt installera python3-nltkNLTK-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 nltkObservera 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 nltkpara = "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 somhon 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, PunktParameterspara = "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.