Python

Kā izgūt teikumus no teksta, izmantojot NLTK Python moduli

Kā izgūt teikumus no teksta, izmantojot NLTK Python moduli
Dabiskās valodas rīkkopa (NLTK) ir Python valodas un teksta apstrādes modulis. NLTK var analizēt, apstrādāt un marķēt tekstu, kas pieejams daudzās dažādās valodās, izmantojot iebūvēto korpusu bibliotēku un lielu leksisko datu kopu. Python ir viena no populārākajām programmēšanas valodām, ko izmanto datu zinātnē un valodas apstrādē, galvenokārt pateicoties valodas daudzpusībai un tādu noderīgu moduļu kā NLTK pieejamībai. Šajā rakstā tiks paskaidrots, kā izgūt teikumus no teksta rindkopām, izmantojot NLTK. Šīs rokasgrāmatas kods ir pārbaudīts ar Python 3.8.2 un NLTK 3.4.5 Ubuntu 20.04 LTS.

NLTK instalēšana Linux

Lai instalētu NLTK Ubuntu, palaidiet zemāk esošo komandu:

$ sudo apt instalējiet python3-nltk

NLTK pakotnes ir pieejamas visos lielākajos Linux izplatījumos. Pakotņu pārvaldniekā meklējiet atslēgvārdu “NLTK”, lai instalētu paketes. Ja kāda iemesla dēļ NLTK nav pieejams jūsu izplatīšanas krātuvēs, varat to instalēt no pip pakotņu pārvaldnieka, izpildot zemāk esošo komandu:

$ pip install --lietotājs -U nltk

Ņemiet vērā, ka, lai darbotos iepriekš minētā komanda, vispirms būs jāinstalē pip no pakotņu pārvaldnieka. Dažos sadalījumos to var saukt par pip3. Varat arī sekot detalizētām instalēšanas instrukcijām, kas pieejamas vietnē oficiālā mājas lapa no NLTK.

Teikumu izgūšana no rindkopas, izmantojot NLTK

Rindkopām bez sarežģītām pieturzīmēm un atstarpēm varat izmantot iebūvēto NLTK teikumu marķieri ar nosaukumu “Punkt tokenizer”, kas nāk ar iepriekš apmācītu modeli. Varat arī izmantot savus apmācītos datu modeļus, lai tekstu marķētu teikumos. Pielāgoti apmācīti datu modeļi ir ārpus šī raksta darbības jomas, tāpēc zemāk esošajā kodā tiks izmantots iebūvētais angļu valodas marķieris Punkt English. Lai lejupielādētu Punkt resursu failu, pēc kārtas izpildiet trīs šīs komandas un gaidiet, līdz lejupielāde būs pabeigta:

$ python3
$ imports nltk
$ nltk.lejupielādēt ('punkt')

Turpmākajā koda paraugā tiks izmantots punkts no “Alises piedzīvojumi Brīnumzemē”:

importa nltk
para = "Vai nu aka bija ļoti dziļa, vai arī viņa krita ļoti lēni, jo viņai bija
daudz laika, kad viņa nokāpa, lai paskatītos uz sevi un domātu, kas notiek
kas notiks tālāk. Vispirms viņa centās skatīties uz leju un saprast, uz ko nāk,
bet bija pārāk tumšs, lai kaut ko redzētu; tad viņa paskatījās uz akas malām un
pamanīju, ka tie bija piepildīti ar skapjiem un grāmatu plauktiem; šur tur viņa
redzēju kartes un attēlus, kas karājās pie tapām. Viņa no viena plaukta noņēma burku
kad viņa pagāja garām; uz tā bija uzraksts “ORANGE MARMALADE”, bet viņai par lielu vilšanos
bija tukša: viņai nepatika nomest burku, baidoties kādu nogalināt, tāpēc tikusi galā
ielikt to vienā no skapjiem, kad viņa nokrita garām."
žetoni = nltk.sent_tokenize (para)
par t marķieros:
drukāt (t, "\ n")

Palaižot iepriekš minēto kodu, iegūsiet šādu izvadi:

Vai nu aka bija ļoti dziļa, vai arī viņa krita ļoti lēni, jo viņai bija pietiekami daudz laika
viņa nokāpa, lai paskatītos uz sevi un domātu, kas notiks tālāk.
Pirmkārt, viņa centās skatīties uz leju un saprast, uz ko nāk, bet bija pārāk tumšs
kaut ko redzēt; tad viņa paskatījās uz akas malām un pamanīja, ka tās ir
piepildīti ar skapjiem un grāmatu plauktiem; šur tur viņa redzēja karājamās kartes un attēlus
uz tapām.
Garām ejot, viņa no viena plaukta noņēma burku; uz tā bija uzraksts “ORANGEMARMALADE”,
bet par lielu vilšanos tas bija tukšs: viņai nepatika nomest burku, baidoties
nogalinot kādu, tāpēc izdevās to ievietot vienā no skapjiem, kad viņa nokrita garām.

Iebūvētais teikuma marķieris Punkt darbojas labi, ja vēlaties marķēt vienkāršas rindkopas. Pēc NLTK moduļa importēšanas viss, kas jums jādara, ir izmantot “sent_tokenize ()” metodi lielam teksta korpusam. Tomēr teikuma marķieris Punkt, iespējams, nevar pareizi noteikt teikumus, ja ir sarežģīta rindkopa, kurā ir daudz pieturzīmju, izsaukuma zīmju, saīsinājumu vai atkārtotu simbolu. Nav iespējams noteikt standarta veidu, kā pārvarēt šos jautājumus. Jums būs jāraksta pielāgots kods šo problēmu risināšanai, izmantojot regex, virknes manipulācijas vai apmācot savu datu modeli, nevis izmantojot iebūvēto Punkt datu modeli.

Varat arī mēģināt pielāgot esošo Punkt modeli, lai novērstu nepareizu marķēšanu, izmantojot dažus papildu parametrus. Lai to izdarītu, ievērojiet oficiālo pieejamo Punkt tokenizācijas dokumentāciju šeit. Lai izmantotu savus pielāgotos pielāgojumus, ir jāveic nelielas izmaiņas kodā:

no nltk.marķēt.punkt import PunktSentenceTokenizer, PunktParameters
para = "Vai nu aka bija ļoti dziļa, vai arī viņa krita ļoti lēni, jo viņai bija daudz
laiku, kad viņa nokāpa, lai paskatītos uz sevi un domātu, kas notiks
Nākamais. Pirmkārt, viņa centās skatīties uz leju un saprast, pie kā nāk, bet tā arī bija
pārāk tumšs, lai kaut ko redzētu; tad viņa paskatījās uz akas malām un pamanīja
ka tie bija piepildīti ar skapjiem un grāmatu plauktiem; šur tur viņa redzēja kartes
un bildes karājās pie tapām. Kad viņa bija, no viena plaukta viņa noņēma burku
pagājis; uz tā bija uzraksts “ORANGE MARMALADE”, taču viņai par lielu vilšanos tā bija
tukša: viņai nepatika nomest burku, baidoties kādu nogalināt, tāpēc izdevās
ielika to vienā no skapjiem, kad viņa nokrita garām."
punkt_params = PunktParameters ()
punkt_params.short_types = set (['Mr', 'Mrs', 'LLC'])
tokenizer = PunktSentenceTokenizer (punkt_params)
žetoni = marķieris.tokenize (para)
par t marķieros:
drukāt (t, "\ n")

Iepriekš minētais kods veic to pašu darbu kā metode “sent_tokenize ()”. Tomēr tagad jūs varat definēt savus noteikumus, izmantojot iebūvētās metodes, un nodot tos kā argumentus, kā aprakstīts dokumentācijā. Piemēram, iepriekš minētajam kodam ir pievienoti daži saīsinājumi. Ja pēc šiem saīsinājumiem sekos pieturzīmes, tie netiks sadalīti jaunā teikumā. Parasti uzvedībā punktu vai punktu izmanto kā norādi uz teikuma beigām.

Secinājums

NLTK un tā tokenizācijas metodes ir diezgan efektīvas, lai tokenizētu un apstrādātu teksta datus. Tomēr iepriekš apmācīti modeļi var nedarboties 100% ar dažāda veida tekstiem. Jums, iespējams, būs jāuzlabo esošie modeļi, jāapmāca un jāpiegādā savi, vai arī jāraksta savs kods, lai novērstu anomālijas.

Kā izstrādāt spēli Linux
Pirms desmit gadiem maz Linux lietotāju varētu paredzēt, ka viņu iecienītā operētājsistēma kādu dienu būs populāra spēļu platforma komerciālām videosp...
Komerciālo spēļu dzinēju atvērtā koda porti
Bezmaksas, atvērtā koda un starpplatformu spēļu dzinēju atpūtu var izmantot, lai spēlētu vecos, kā arī dažus no diezgan nesenajiem spēļu nosaukumiem. ...
Labākās komandrindas spēles Linux
Komandrinda nav tikai lielākais sabiedrotais, lietojot Linux, bet tā var būt arī izklaides avots, jo to var izmantot, lai spēlētu daudzas jautras spēl...