Python

Как да извлечете изречения от текст с помощта на модула NLTK Python

Как да извлечете изречения от текст с помощта на модула NLTK Python
Инструментариумът за естествен език (NLTK) е модул за обработка на език и текст за Python. NLTK може да анализира, обработва и токенизира текст, наличен на много различни езици, използвайки своята вградена библиотека от корпуси и голям набор от лексикални данни. Python е един от най-популярните езици за програмиране, използвани в науката за данни и обработката на езика, главно поради гъвкавостта на езика и наличието на полезни модули като NLTK. Тази статия ще обясни как да извлечете изречения от текстови абзаци с помощта на NLTK. Кодът в това ръководство е тестван с Python 3.8.2 и NLTK 3.4.5 на Ubuntu 20.04 LTS.

Инсталиране на NLTK в Linux

За да инсталирате NLTK в Ubuntu, изпълнете командата по-долу:

$ sudo apt инсталира python3-nltk

NLTK пакетите са налични във всички основни дистрибуции на Linux. Потърсете ключовата дума “NLTK” в мениджъра на пакети, за да инсталирате пакетите. Ако по някаква причина NLTK не е наличен в хранилищата на вашата дистрибуция, можете да го инсталирате от мениджъра на пакети pip, като изпълните командата по-долу:

$ pip install --user -U nltk

Обърнете внимание, че първо ще трябва да инсталирате pip от вашия мениджър на пакети, за да работи горната команда. При някои дистрибуции това може да се нарече pip3. Можете също да следвате подробни инструкции за инсталиране, налични на официален уебсайт на НЛТК.

Извличане на изречения от абзац с помощта на NLTK

За абзаци без сложни пунктуации и интервали можете да използвате вградения токенизатор на изречения NLTK, наречен „Punkt tokenizer“, който се доставя с предварително обучен модел. Можете също да използвате свои обучени модели на данни, за да маркирате текста в изречения. Обучени по поръчка модели на данни са извън обхвата на тази статия, така че кодът по-долу ще използва вградения Punkt английски токенизатор. За да изтеглите файла с ресурси Punkt, изпълнете последователно следните три команди и изчакайте изтеглянето да приключи:

$ python3
$ внос nltk
$ nltk.изтегляне ('punkt')

Параграф от „Приключенията на Алиса в страната на чудесата“ ще бъде използван в примерния код по-долу:

внос nltk
para = "Или кладенецът е бил много дълбок, или е паднала много бавно, тъй като е имала
достатъчно време, докато тя слизаше, за да се огледа за нея и да се чуди какво става
да се случи по-нататък. Първо се опита да погледне надолу и да разбере към какво идва,
но беше твърде тъмно, за да се види нещо; след това тя погледна отстрани на кладенеца и
забелязали, че са пълни с шкафове и рафтове за книги; тук-там тя
видях карти и картини, закачени на колчета. Тя свали буркан от един от рафтовете
като минавала; тя беше етикетирана като "ОРАНЖЕВ МАРМАЛАД", но за нейно голямо разочарование
беше празно: тя не обичаше да пуска буркана от страх да не убие някого, така че успя
да го сложи в един от шкафовете, когато тя пада покрай него."
жетони = nltk.sent_tokenize (параграф)
за t в символи:
отпечатване (t, "\ n")

Изпълнението на горния код ще ви даде следния изход:

Или кладенецът е бил много дълбок, или тя е паднала много бавно, тъй като е имала достатъчно време като
тя слезе да се огледа за нея и да се чуди какво ще се случи по-нататък.
Първо се опита да погледне надолу и да разбере към какво идва, но беше твърде тъмно
да видиш нещо; след това тя погледна отстрани на кладенеца и забеляза, че са
пълни с шкафове и рафтове за книги; тук-там тя виждаше обесени карти и снимки
върху колчета.
Тя свали буркан от един от рафтовете, докато минаваше; то бе означено с „ORANGEMARMALADE“,
но за нейно голямо разочарование беше празно: тя не обичаше да пуска буркана от страх
убивайки някого, затова успя да го сложи в един от шкафовете, когато тя падна покрай него.

Вграденият токенизатор Punkt изречение работи добре, ако искате да токенизирате прости абзаци. След импортирането на модула NLTK, всичко, което трябва да направите, е да използвате метода “sent_tokenize ()” в голям текстов корпус. Токенизаторът на изречения Punkt обаче може да не открие правилно изречения, когато има сложен абзац, който съдържа много препинателни знаци, удивителни знаци, съкращения или повтарящи се символи. Не е възможно да се определи стандартен начин за преодоляване на тези проблеми. Ще трябва да напишете персонализиран код за справяне с тези проблеми с помощта на регулярни изрази, манипулиране на низове или чрез обучение на собствен модел на данни, вместо да използвате вградения Punkt модел на данни.

Можете също така да опитате да промените съществуващия модел Punkt, за да коригирате неправилна токенизация, като използвате някои допълнителни параметри. За целта следвайте официалната налична документация за токенизация на Punkt тук. За да използвате собствените си персонализирани настройки, е необходима малка промяна в кода:

от nltk.токенизирам.punkt import PunktSentenceTokenizer, PunktParameters
para = "Или кладенецът е бил много дълбок, или е падала много бавно, тъй като е имала много
на времето, когато тя слезе, за да се огледа за нея и да се чуди какво ще се случи
следващия. Първо се опита да погледне надолу и да разбере до какво идва, но беше
твърде тъмно, за да се види нещо; после тя погледна отстрани на кладенеца и забеляза
че бяха пълни с шкафове и рафтове за книги; тук-там тя виждаше карти
и снимки, закачени на колчета. Тя свали буркан от един от рафтовете
преминал; тя беше етикетирана „ОРАНЖЕВ МАРМАЛАД“, но за нейно голямо разочарование беше
празно: тя не обичаше да пуска буркана от страх да не убие някого, така че успя
сложи го в един от шкафовете, когато тя падна покрай него."
punkt_params = PunktParameters ()
punkt_params.shorv_types = set (['Mr', 'Mrs', 'LLC'])
tokenizer = PunktSentenceTokenizer (punkt_params)
жетони = токенизатор.токенизирам (параграф)
за t в символи:
отпечатване (t, "\ n")

Кодът по-горе върши същата работа като метода “sent_tokenize ()”. Сега обаче можете да дефинирате свои собствени правила, като използвате вградени методи и да ги предадете като аргументи, както е описано в документацията. Например, някои съкращения са добавени към горния код. Ако тези съкращения са последвани от пунктуация, те няма да бъдат разделени на ново изречение. Нормалното поведение е да се използва точка или точка като индикация за края на изречението.

Заключение

NLTK и неговите методи за токенизация са доста ефективни при токенизиране и обработка на текстови данни. Предварително обучените модели обаче може да не работят на 100% с различни видове текстове. Може да се наложи да подобрите съществуващите модели, да обучите и доставите свой собствен, или да напишете свой собствен код, за да коригирате аномалии.

Как да заснемете и поточно предадете игралната си сесия на Linux
В миналото играта на игри се смяташе само за хоби, но с течение на времето игралната индустрия отбеляза огромен ръст по отношение на технологиите и бр...
Най-добрите игри за игра с ръчно проследяване
Oculus Quest наскоро представи страхотната идея за ръчно проследяване без контролери. С непрекъснато нарастващия брой игри и дейности, които изпълнява...
Как да покажете OSD наслагване в приложения на цял екран за Linux и игри
Играта на цял екран или използване на приложения в режим на цял екран без разсейване може да ви откъсне от съответната системна информация, видима в п...