Python

Kako izvleči stavke iz besedila z uporabo modula NLTK Python

Kako izvleči stavke iz besedila z uporabo modula NLTK Python
Zbirka orodij za naravni jezik (NLTK) je modul za obdelavo jezika in besedila za Python. NLTK lahko analizira, obdela in označi besedilo, ki je na voljo v različnih jezikih, z uporabo vgrajene knjižnice korpusov in velikega števila leksikalnih podatkov. Python je eden izmed najbolj priljubljenih programskih jezikov, ki se uporablja v znanosti o podatkih in obdelavi jezikov, predvsem zaradi vsestranskosti jezika in razpoložljivosti uporabnih modulov, kot je NLTK. Ta članek bo razložil, kako izvleči stavke iz odstavkov besedila z uporabo NLTK. Koda v tem priročniku je bila preizkušena s Python 3.8.2 in NLTK 3.4.5 na Ubuntu 20.04 LTS.

Namestitev NLTK v Linux

Če želite namestiti NLTK v Ubuntu, zaženite spodnji ukaz:

$ sudo apt namestite python3-nltk

Paketi NLTK so na voljo v vseh večjih distribucijah Linuxa. Za namestitev paketov poiščite ključno besedo »NLTK« v upravitelju paketov. Če iz nekega razloga NLTK ni na voljo v skladiščih vaše distribucije, ga lahko namestite iz upravitelja paketov pip tako, da zaženete spodnji ukaz:

$ pip install --user -U nltk

Najprej boste morali namestiti pip iz upravitelja paketov, da bo zgornji ukaz deloval. V nekaterih distribucijah se lahko imenuje pip3. Prav tako lahko sledite podrobnim navodilom za namestitev, ki so na voljo na uradna spletna stran NLTK.

Izvleček stavkov iz odstavka z uporabo NLTK

Za odstavke brez zapletenih ločil in presledkov lahko uporabite vgrajeni tokenizer stavkov NLTK, imenovan »Punkt tokenizer«, ki je priložen predhodno izurjenemu modelu. Za označevanje besedila v stavke lahko uporabite tudi svoje usposobljene podatkovne modele. Prilagojeni podatkovni modeli so izven področja uporabe tega članka, zato bo spodnja koda uporabila vgrajeni punkt angleški tokenizer. Če želite prenesti datoteko virov Punkt, zaporedoma zaženite naslednje tri ukaze in počakajte, da se prenos konča:

$ python3
$ uvoz nltk
$ nltk.prenesi ('punkt')

V spodnjem vzorčnem kodu bo uporabljen odstavek iz "Alice's Adventures in Wonderland":

uvozi nltk
para = "Ali je bil vodnjak zelo globok ali pa je padla zelo počasi, ker je
dovolj časa, ko se je spustila, da se je ozrla vanjo in se vprašala, kaj se dogaja
da se zgodi naslednje. Najprej je poskušala pogledati navzdol in razbrati, k čemur prihaja,
bilo je pa pretemno, da bi kaj videl; nato je pogledala ob strani vodnjaka in
opazili, da so napolnjene z omaricami in policami za knjige; tu in tam ona
videl zemljevide in slike, obešene na kljukice. Z ene od polic je snela kozarec
ko je minila; bila je označena z "ORANŽNA MARMALADA", a na njeno veliko razočaranje
je bila prazna: kozarca ni rada spustila iz strahu, da bi koga ubila, zato ji je uspelo
da jo je postavila v eno od omar, ko je padla mimo nje."
žetoni = nltk.sent_tokenize (odstavek)
za t v žetonih:
natisni (t, "\ n")

Z zagonom zgornje kode boste dobili naslednje rezultate:

Ali je bil vodnjak zelo globok, ali pa je padla zelo počasi, saj je imela dovolj časa kot
spustila se je pogledat vanjo in se vprašati, kaj se bo zgodilo naprej.
Najprej je poskušala pogledati navzdol in razbrati, k čemur prihaja, vendar je bilo pretemno
videti kaj; nato je pogledala ob strani vodnjaka in opazila, da so
napolnjene z omaricami in policami za knjige; tu in tam je videla obešene zemljevide in slike
na kljukice.
Ko je šla mimo, je z ene police snela kozarec; označena je bila z „ORANGEMARMALADA“,
a na njeno veliko razočaranje je bilo prazno: kozarec iz strahu pred njo ni rada spustila
nekoga ubila, zato jo je uspela spraviti v eno od omar, ko je padla mimo nje.

Vgrajeni punkt stavčni tokenizer deluje dobro, če želite označiti preproste odstavke. Po uvozu modula NLTK morate samo uporabiti metodo »sent_tokenize ()« v velikem besedilnem korpusu. Vendar tokenizer stavkov Punkt morda ne bo pravilno zaznal stavkov, če obstaja zapleten odstavek, ki vsebuje veliko ločil, klicajev, okrajšav ali ponavljajočih se simbolov. Standardnega načina za premagovanje teh težav ni mogoče določiti. Za reševanje teh težav boste morali napisati kodo po meri z uporabo regularnega izraza, manipulacijo nizov ali z usposabljanjem lastnega podatkovnega modela, namesto da bi uporabili vgrajeni podatkovni model Punkt.

Prav tako lahko poskusite prilagoditi obstoječi model Punkt, da popravite nepravilno označevanje z uporabo nekaterih dodatnih parametrov. To storite tako, da upoštevate uradno dokumentacijo o tokenizaciji Punkt, ki je na voljo tukaj. Če želite uporabiti lastne prilagoditve po meri, je potrebna manjša sprememba kode:

iz nltk.tokenizirati.punkt import PunktSentenceTokenizer, PunktParameters
para = "Ali je bil vodnjak zelo globok, ali pa je padla zelo počasi, saj je imela veliko
časa, ko se je spustila pogledat vanjo in se vprašati, kaj se bo zgodilo
Naslednji. Najprej je poskušala pogledati navzdol in razbrati, k čemur je prišla, a je bilo
pretemno, da bi kaj videl; nato je pogledala ob strani vodnjaka in opazila
da so bile napolnjene z omaricami in policami za knjige; tu in tam je videla zemljevide
in slike, obešene na kljukice. S ene police je snela kozarec
opravil; bila je označena z 'ORANŽNA MARMALADA', toda na njeno veliko razočaranje je bila
prazno: kozarca ni rada spustila iz strahu, da bi koga ubila, zato ji je uspelo
odložila v eno od omar, ko je padla mimo nje."
punkt_params = PunktParameters ()
punkt_params.extension_types = set (['Gospod', 'Gospa', 'LLC'])
tokenizer = PunktSentenceTokenizer (punkt_params)
žetoni = tokenizer.tokenizirati (odstavek)
za t v žetonih:
natisni (t, "\ n")

Zgornja koda opravlja enako delo kot metoda »sent_tokenize ()«. Vendar lahko zdaj z uporabo vgrajenih metod definirate svoja pravila in jih posredujete kot argumente, kot je opisano v dokumentaciji. Na primer, v zgornjo kodo so dodane nekatere okrajšave. Če tem okrajšavam sledi ločilo, jih ne bomo razdelili v nov stavek. Običajno je uporaba pike ali pike kot oznake za konec stavka.

Zaključek

NLTK in njegove metode tokenizacije so zelo učinkovite pri označevanju in obdelavi besedilnih podatkov. Vendar predhodno usposobljeni modeli morda ne bodo delovali stoodstotno z različnimi vrstami besedil. Morda boste morali izboljšati obstoječe modele, usposobiti in dobaviti svojega ali napisati svojo kodo za odpravo nepravilnosti.

Uporabna orodja za igralce Linux
Če radi igrate igre na Linuxu, obstaja verjetnost, da ste za izboljšanje igralne izkušnje uporabljali aplikacije in pripomočke, kot so Wine, Lutris in...
HD Remastered Games za Linux, ki prej še niso izdale Linuxa
Mnogi razvijalci iger in založniki pripravijo HD remaster starih iger, da podaljšajo življenjsko dobo franšize, zato oboževalci zahtevajo združljivost...
Kako uporabljati AutoKey za avtomatizacijo iger Linux
AutoKey je namizni pripomoček za avtomatizacijo za Linux in X11, programiran v Python 3, GTK in Qt. Z njegovo funkcijo skriptiranja in MACRO lahko avt...