МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра «Системи автоматизованого проектування»
Звіт до лабораторної роботи №3
«Вивчення бібліотеки прикладних програм NLTK, для опрацювання текстів природною мовою. Доступ та робота з корпусами текстів»
з курсу «Комп’ютерна лінгвістика»
одному або декількох текстах, або навпаки – дізнатися весь перелік текстів, які належать до певної категорії.
Більшість корпусів текстів є лінгвістично анотованими, тобто містять різного типу розмітку – морфологічну, синтаксичну, семантичну; у них можуть бути виділені власні назви, вказані семантичні ролі і т.п. NLTK забезпечує способи доступу до багатьох корпусів і розповсюджується з цими корпусами або їх фрагментами.
Якщо тексти в корпусі поділені на різні категорії (за жанром, тематикою, авторами), то можна побудувати частотні розподіли для кожної з категорій. Такі дані дозволяють досліджувати відмінності між жанрами. Умовний частотний розподіл – це набір частотних розподілів, кожен з яких відповідає певній «умові». Такою умовою може бути категорія тексту.
Частотний розподіл визначає числові значення для кожної події (подіями можемо вважати вживання слів в тексті). Умовний частотний розподіл поєднує в пари кожну подію та умову. Замість обробки послідовності слів обробляються послідовності пар. Кожна пара відповідає шаблону (condition, event). Тоді як для класу FreqDist() вхідними даними є список, то для класу ConditionalFreqDist() вхідними даними є список пар.
Інтерпретатор виконує оператори програми відразу після їх введення. Часто виникає потреба спочатку написати програму, яка складається з багатьох рядків, використовуючи текстовий редактор, а потім запустити її на виконання. Використовуючи IDLE, можна це зробити, відкривши нове вікно за допомогою пункту меню File, зберігши текст програми у файлі *.py і запустивши програму на виконання за допомогою команди Run Module пункту меню Run.
У програмуванні часто потрібно частину програми виконати (використати) декілька разів. Щоб більш ефективно і надійно організувати таку роботу, використовують функцію. Функція – це програмна конструкція, яку можна викликати з одним або більше вхідними параметрами, і отримувати результат на виході. Визначаємо функцію, використовуючи ключове слово def, далі потрібно дати назву функції і визначити вхідні параметри, після двокрапки записується тіло функції. Ключове слово return використовується для відображення значення, яке потрібно отримати на виході функції.
Множина змінних і функцій, збережених у файлі, називаються в Python модулем. Множину пов’язаних між собою модулів називають пакетом. Програма обробки корпуса Brown є прикладом модуля, а множина програм для роботи зі всіма корпусами є прикладом пакету. NLTK – це множина пакетів, яку називають бібліотекою.
Тексти програм
Варіант №3
3.3 Прочитайте тексти з корпусу State of the Union addresses використовуючи state_union модуль читання. Визначити частоту вживання слів men, women, people в кожному з документів. Як змінилася частота вживання цих слів з часом?.
3.5 Виберіть пару текстів і дослідіть відмінності між ними (кількість оригінальних слів, багатство мови, жанр). Знайдіть слова, які мають різний зміст в цих текстах, подібно до слова monstrous в Mobbrowny Dick та у Sense and Sensibility.
3.7 Напишіть програму для знаходження всіх слів у корпусі Brown, які зустрічаються не менш ніж три рази.
3.8 Напишіть програму генерації таблиці відношень кількість слів/кількість оригінальних слів для всіх жанрів корпуса Brown. Проаналізуйте отримані результати та поясніть їх.
Перше числове значення позначає кількість слів у певному жанрі, друге значення – кількість оригінальних слів, а третє – відношення загальної кількості слів до кількості оригінальних слів. Останній параметр є заокругленим значенням.
3.11 Напишіть програму для створення таблиці частот слів для різних жанрів. Знайдіть слова, чия присутність або відсутність є характерною для певних жанрів (подібно до модальних дієслів).
3.12 Напишіть функцію word_freq(), яка приймає слово і назву частини корпуса Brown як аргументи і визначає частоту слова в заданій частині корпуса.
Висновок
На цій лабораторній роботі я вивчив методи доступу до різних корпусів текстів, а також ознайомився з класом ConditionalFreqDist. Крім того, навчився використовувати можливості функцій для роботи у середовищі програмування Python. Для закріплення своїх навичок роботи з ними, виконав найпоширеніші та найпростіші задачі.