„Python“

Kaip ištraukti sakinius iš teksto naudojant NLTK Python modulį

Kaip ištraukti sakinius iš teksto naudojant NLTK Python modulį
Natūralios kalbos įrankių rinkinys (NLTK) yra „Python“ kalbos ir teksto apdorojimo modulis. NLTK gali analizuoti, apdoroti ir žymėti daugeliu skirtingų kalbų pasiekiamą tekstą naudodamasis savo įmontuota korpusų biblioteka ir dideliu leksinių duomenų fondu. „Python“ yra viena iš populiariausių programavimo kalbų, naudojamų duomenų moksle ir kalbų apdorojime, daugiausia dėl kalbos universalumo ir naudingų modulių, tokių kaip NLTK, prieinamumo. Šiame straipsnyje bus paaiškinta, kaip ištraukti sakinius iš teksto pastraipų naudojant NLTK. Šiame vadove pateiktas kodas buvo išbandytas naudojant „Python 3“.8.2 ir NLTK 3.4.5 „Ubuntu 20“.04 LTS.

NLTK diegimas „Linux“

Norėdami įdiegti NLTK „Ubuntu“, vykdykite toliau nurodytą komandą:

$ sudo apt įdiekite python3-nltk

NLTK paketai yra prieinami visuose pagrindiniuose „Linux“ paskirstymuose. Norėdami įdiegti paketus, paketų tvarkyklėje ieškokite raktinio žodžio „NLTK“. Jei dėl kokių nors priežasčių NLTK nėra jūsų platinimo saugyklose, galite ją įdiegti iš „pip“ paketo tvarkyklės, vykdydami toliau nurodytą komandą:

$ pip install --naudotojas -U nltk

Atminkite, kad pirmiausia turėsite įdiegti „pip“ iš savo paketų tvarkyklės, kad veiktų aukščiau nurodyta komanda. Kai kuriuose paskirstymuose tai gali būti vadinama pip3. Taip pat galite sekti išsamias diegimo instrukcijas, pateiktas Oficiali svetainė NLTK.

Sakinių ištraukimas iš pastraipos naudojant NLTK

Pastraipoms be sudėtingų skyrybos ženklų ir tarpų galite naudoti integruotą NLTK sakinių žymeklį, vadinamą „Punkt tokenizer“, kuris pateikiamas su iš anksto apmokytu modeliu. Taip pat galite naudoti savo parengtus duomenų modelius, kad tekstas taptų sakiniais. Pagal šį straipsnį nepritaikyti duomenų modeliai nepatenka į šio straipsnio taikymo sritį, todėl žemiau pateiktame kode bus naudojamas integruotasis „Punkt English“ žymeklis. Norėdami atsisiųsti „Punkt“ išteklių failą, vykdykite šias tris komandas iš eilės ir palaukite, kol baigsis atsisiuntimas:

$ python3
$ importuoti nltk
$ nltk.atsisiųsti ('punkt')

Žemiau esančiame kodo pavyzdyje bus naudojama pastraipa iš „Alisos nuotykių stebuklų šalyje“:

importuoti nltk
para = "Arba šulinys buvo labai gilus, arba ji krito labai lėtai, nes turėjo
daug laiko, kai ji leidosi pažvelgti į save ir pasidomėti, kas vyksta
kad nutiktų toliau. Pirmiausia ji bandė pažvelgti žemyn ir išsiaiškinti, ko ji siekia,
bet buvo per tamsu ką nors pamatyti; tada ji pažvelgė į šulinio šonus ir
pastebėjo, kad jie buvo užpildyti spintelėmis ir knygų lentynomis; šen ir ten ji
pamatė ant kaiščių pakabintus žemėlapius ir paveikslėlius. Ji nuėmė stiklainį iš vienos lentynos
jai praeinant; jis buvo užrašytas „ORANGE MARMALADE“, tačiau jai labai nusivylė
buvo tuščia: ji nemėgo numesti stiklainio, bijodama ką nors nužudyti, todėl pavyko
įdėti jį į vieną iš spintelių, jai krintant pro šalį."
žetonai = nltk.sent_tokenize (para)
už t žetonuose:
spausdinti (t, "\ n")

Paleidus pirmiau nurodytą kodą gausite tokį išvestį:

Arba šulinys buvo labai gilus, arba ji krito labai lėtai, nes ji turėjo daug laiko
ji nusileido ieškoti savęs ir domėtis, kas bus toliau.
Pirmiausia ji bandė pažvelgti žemyn ir išsiaiškinti, į ką ateina, tačiau buvo per tamsu
ką nors pamatyti; tada ji pažvelgė į šulinio šonus ir pastebėjo, kad jie yra
pripildytos spintelių ir knygų lentynų; šen ir ten ji pamatė pakabintus žemėlapius ir paveikslėlius
ant kaiščių.
Praeidama ji nuėmė stiklainį iš vienos lentynos; jis buvo užrašytas „ORANGEMARMALADE“,
bet jai labai nusivylus buvo tuščia: ji nemėgo numesti stiklainio bijodama
nužudęs ką nors, todėl spėjo ją įdėti į vieną iš spintelių, kai ji praėjo pro ją.

Įmontuotas „Punkt“ sakinių žymiklis veikia gerai, jei norite pažymėti paprastas pastraipas. Importavus NLTK modulį, tereikia naudoti „sent_tokenize ()“ metodą dideliame teksto korpuse. Tačiau sakinių žymeklis „Punkt“ gali neteisingai aptikti sakinius, kai yra sudėtinga pastraipa, kurioje yra daug skyrybos ženklų, šauktukų, santrumpų ar pasikartojančių simbolių. Neįmanoma apibrėžti standartinio šių problemų įveikimo būdo. Turėsite parašyti pasirinktinį kodą, kad išspręstumėte šias problemas naudodami regex, manipuliacijas eilutėmis arba mokydami savo duomenų modelį, užuot naudoję integruotą „Punkt“ duomenų modelį.

Taip pat galite pabandyti pakoreguoti esamą „Punkt“ modelį, kad ištaisytumėte neteisingą žymėjimą naudodami keletą papildomų parametrų. Norėdami tai padaryti, vadovaukitės oficialia „Punkt“ tokenizacijos dokumentacija čia. Norint naudoti savo pasirinktus patobulinimus, reikia šiek tiek pakeisti kodą:

nuo nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters
para = "Arba šulinys buvo labai gilus, arba ji krito labai lėtai, nes ji turėjo daug
laiko, kai ji nusileido ieškoti savęs ir domėtis, kas nutiks
Kitas. Pirmiausia ji bandė pažvelgti žemyn ir išsiaiškinti, į ką ateina, bet taip buvo
per tamsu, kad nieko nematytum; tada ji pažvelgė į šulinio šonus ir pastebėjo
kad jie buvo pripildyti spintelių ir knygų lentynų; šen ir ten ji matė žemėlapius
ir ant kaiščių pakabintos nuotraukos. Eidama ji nuėmė stiklainį iš vienos lentynos
praėjo; jis buvo užrašytas „ORANGE MARMALADE“, tačiau jai labai nusivylė
tuščia: ji nemėgo numesti stiklainio, bijodama ką nors nužudyti, todėl sugebėjo
įdėjo ją į vieną iš spintelių, kai ji praėjo pro ją."
punkt_params = PunktParameters ()
punkt_params.short_types = set (['ponas', 'ponia', 'LLC'])
tokenizer = PunktSentenceTokenizer (punkt_params)
žetonai = tokenizer.tokenize (para)
už t žetonuose:
spausdinti (t, "\ n")

Aukščiau pateiktas kodas atlieka tą patį darbą kaip ir „sent_tokenize ()“ metodas. Tačiau dabar galite apibrėžti savo taisykles naudodami įmontuotus metodus ir perduoti jas kaip argumentus, kaip aprašyta dokumentacijoje. Pavyzdžiui, kai kurios santrumpos buvo pridėtos prie aukščiau esančio kodo. Jei po šių santrumpų bus skyryba, jos nebus suskaidytos į naują sakinį. Įprastas elgesys yra taško arba taško naudojimas kaip sakinio pabaigos nurodymas.

Išvada

NLTK ir jo tokenizavimo metodai yra gana efektyvūs tokenizuojant ir apdorojant tekstinius duomenis. Tačiau iš anksto paruošti modeliai gali neveikti 100% su skirtingų tipų tekstais. Jums gali tekti patobulinti esamus modelius, mokyti ir pateikti savo arba parašyti savo kodą, kad pašalintumėte anomalijas.

5 populiariausi „Linux“ skirtų ergonomiškų kompiuterinių pelių produktai
Ar ilgalaikis kompiuterio naudojimas sukelia riešo ar pirštų skausmą?? Ar jūs kenčiate nuo sąnarių standumo ir nuolat turite paspausti rankas? Ar jauč...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...
Peržiūrėkite pelės mygtukus skirtingai programinei įrangai naudodami „X-Mouse Button Control“
Galbūt jums reikia įrankio, kuris galėtų pakeisti jūsų pelės valdymą kiekvienoje jūsų naudojamoje programoje. Tokiu atveju galite išbandyti programą, ...