Piton

Cum se extrag propoziții din text folosind modulul Python NLTK

Cum se extrag propoziții din text folosind modulul Python NLTK
Natural Language Toolkit (NLTK) este un modul de procesare a limbajului și a textului pentru Python. NLTK poate analiza, prelucra și tokeniza textul disponibil în multe limbi diferite folosind biblioteca sa încorporată de corpusuri și un mare grup de date lexicale. Python este unul dintre cele mai populare limbaje de programare utilizate în știința datelor și procesarea limbajului, în principal datorită versatilității limbajului și disponibilității unor module utile precum NLTK. Acest articol va explica cum se extrag propoziții din paragrafe text folosind NLTK. Codul din acest ghid a fost testat cu Python 3.8.2 și NLTK 3.4.5 pe Ubuntu 20.04 LTS.

Instalarea NLTK în Linux

Pentru a instala NLTK în Ubuntu, rulați comanda de mai jos:

$ sudo apt install python3-nltk

Pachetele NLTK sunt disponibile în toate distribuțiile majore Linux. Căutați cuvântul cheie „NLTK” în managerul de pachete pentru a instala pachetele. Dacă, dintr-un anumit motiv, NLTK nu este disponibil în depozitele de distribuție, îl puteți instala din managerul de pachete pip executând comanda de mai jos:

$ pip install --user -U nltk

Rețineți că va trebui mai întâi să instalați pip de la managerul de pachete pentru ca comanda de mai sus să funcționeze. Pe unele distribuții, se poate numi pip3. De asemenea, puteți urmări instrucțiunile detaliate de instalare disponibile pe site oficial din NLTK.

Extragerea frazelor dintr-un paragraf folosind NLTK

Pentru paragrafe fără punctuații și spațieri complexe, puteți utiliza tokenizatorul de propoziții NLTK încorporat, numit „tokenizator Punkt”, care vine cu un model pre-instruit. De asemenea, puteți utiliza propriile modele de date instruite pentru a simboliza textul în propoziții. Modelele de date personalizate nu intră în domeniul de aplicare al acestui articol, astfel încât codul de mai jos va utiliza tokenizer-ul integrat Punkt English. Pentru a descărca fișierul de resurse Punkt, rulați următoarele trei comenzi succesiv și așteptați finalizarea descărcării:

$ python3
$ import nltk
$ nltk.descărcare ('punkt')

Un paragraf din „Aventurile lui Alice în Țara Minunilor” va fi folosit în exemplul de cod de mai jos:

import nltk
para = "Ori fântâna era foarte adâncă, ori cădea foarte încet, căci avea
mult timp în timp ce cobora să se uite la ea și să se întrebe ce se întâmplă
să se întâmple în continuare. Mai întâi, a încercat să privească în jos și să afle la ce venea,
dar era prea întuneric pentru a vedea ceva; apoi se uită la părțile laterale ale fântânii și
a observat că erau umplute cu dulapuri și rafturi pentru cărți; ici și colo ea
am văzut hărți și imagini atârnate pe cuiere. A dat jos un borcan de pe unul dintre rafturi
în timp ce trecea; a fost etichetat „MARMALADE ORANGE”, dar spre marea ei dezamăgire
era goală: nu-i plăcea să lase borcanul de teamă să nu omoare pe cineva, așa că a reușit
să-l pună într-unul dintre dulapuri când a căzut pe lângă el."
jetoane = nltk.sent_tokenize (para)
pentru t în jetoane:
print (t, "\ n")

Rularea codului de mai sus vă va oferi următoarea ieșire:

Ori fântâna era foarte adâncă, ori cădea foarte încet, căci avea destul timp ca
a coborât să se uite în jurul ei și să se întrebe ce avea să se întâmple în continuare.
Mai întâi, a încercat să privească în jos și să afle la ce venea, dar era prea întuneric
a vedea orice; apoi se uită la părțile laterale ale fântânii și observă că erau
umplut cu dulapuri și rafturi pentru cărți; ici și colo a văzut hărți și poze atârnate
pe cuiere.
Când a trecut, a dat jos un borcan de pe unul dintre rafturi; a fost etichetat „ORANGEMARMALADE”,
dar spre marea ei dezamăgire era goală: nu-i plăcea să scape borcanul de teamă
ucigând pe cineva, așa că a reușit să-l pună într-unul dintre dulapuri când a căzut pe lângă el.

Tokenizatorul de propoziții Punkt încorporat funcționează bine dacă doriți să tokenizați paragrafe simple. După importul modulului NLTK, tot ce trebuie să faceți este să utilizați metoda „sent_tokenize ()” pe un corpus text mare. Cu toate acestea, tokenizer-ul frazelor Punkt poate să nu detecteze corect propozițiile atunci când există un paragraf complex care conține multe semne de punctuație, semne de exclamare, abrevieri sau simboluri repetitive. Nu este posibil să se definească un mod standard de a depăși aceste probleme. Va trebui să scrieți cod personalizat pentru a rezolva aceste probleme utilizând regex, manipularea șirurilor sau prin instruirea propriului model de date în loc să utilizați modelul de date Punkt încorporat.

Puteți încerca, de asemenea, să modificați modelul Punkt existent pentru a remedia tokenizarea incorectă utilizând câțiva parametri suplimentari. Pentru aceasta, urmați documentația oficială de tokenizare Punkt disponibilă Aici. Pentru a utiliza propriile modificări personalizate, este necesară o ușoară modificare a codului:

din nltk.tokenize.import punkt PunktSentenceTokenizer, PunktParameters
para = "Ori fântâna era foarte adâncă, ori cădea foarte încet, căci avea destule
de timp în timp ce cobora să se uite în jurul ei și să se întrebe ce avea să se întâmple
Următorul. În primul rând, a încercat să privească în jos și să afle la ce venea, dar a fost
prea întunecat pentru a vedea ceva; apoi se uită la părțile laterale ale fântânii și observă
că erau umplute cu dulapuri și rafturi pentru cărți; ici și colo a văzut hărți
și imagini atârnate pe cuiere. Ea a coborât un borcan de pe unul dintre rafturi în timp ce ea
a trecut; a fost etichetat „MARMALADE ORANGE”, dar spre marea ei dezamăgire a fost
goală: nu-i plăcea să lase borcanul de teamă să nu omoare pe cineva, așa că a reușit
a pus-o într-unul dintre dulapuri când a căzut pe lângă ea."
punkt_params = PunktParameters ()
punkt_params.abbrev_types = set (['Mr', 'Mrs.', 'LLC'])
tokenizer = PunktSentenceTokenizer (punkt_params)
jetoane = tokenizer.tokenize (para)
pentru t în jetoane:
print (t, "\ n")

Codul de mai sus face aceeași treabă ca și metoda „sent_tokenize ()”. Cu toate acestea, puteți defini propriile reguli folosind metode încorporate și le puteți transmite ca argumente, așa cum este descris în documentație. De exemplu, unele abrevieri au fost adăugate la codul de mai sus. Dacă aceste abrevieri sunt urmate de punctuație, nu vor fi împărțite într-o propoziție nouă. Comportamentul normal este de a folosi un punct sau punct ca o indicație a sfârșitului unei propoziții.

Concluzie

NLTK și metodele sale de tokenizare sunt destul de eficiente la tokenizarea și procesarea datelor text. Cu toate acestea, este posibil ca modelele pre-instruite să nu funcționeze 100% cu diferite tipuri de texte. Este posibil să trebuiască să îmbunătățiți modelele existente, să vă instruiți și să furnizați propriile dvs. sau să scrieți propriul cod pentru a remedia anomaliile.

How to change Left & Right mouse buttons on Windows 10 PC
It's quite a norm that all computer mouse devices are ergonomically designed for right-handed users. But there are mouse devices available which are s...
Emulate Mouse clicks by hovering using Clickless Mouse in Windows 10
Using a mouse or keyboard in the wrong posture of excessive usage can result in a lot of health issues, including strain, carpal tunnel syndrome, and ...
Add Mouse gestures to Windows 10 using these free tools
In recent years computers and operating systems have greatly evolved. There was a time when users had to use commands to navigate through file manager...