МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра «Системи автоматизованого проектування»
Звіт до лабораторної роботи №6
«Вивчення бібліотеки прикладних програм NLTK, для опрацювання текстів природною мовою. Використання регулярних виразів для обробки тексту»
з курсу «Комп’ютерна лінгвістика»
Вираз re.search(regexp, w) дозволяє знаходити слова w , які відповідають регулярному виразу regexp . Регулярні вирази також можна використовувати для виявлення фрагментів слів, або для модифікації слів різними способами.
Виявлення фрагментів слів
Метод re.findall() ("знайти всеl") дозволяє знайти всі відповідності даному регулярному виразу. В наступному прикладі показано знаходження та підрахунок всіх голосних.
Подібним способом можна знайти та побудувати частотний розподіл для послідовностей з двох і більше голосних в довільному тексті.
В наступному прикладі показано спільне використання регулярного виразу та умовного частотного розподілу. В програмі зі слів мовою Rotokas вилучаються всі послідовності приголосна – голосна. Оскільки вилучаються пари то на їх основі можна побудувати умовний частотний розподіл і представити його у вигляді таблиці.
Для обробки мови часто буває необхідно опустити закінчення слів і працювати тільки з їх основами. Існують різні способи встановлення основи слова. Найпростіший спосіб, це відкидання будь-яких послідовностей, які нагадують суфікс.
Звичайно цей підхід має ще багато інших проблем. Для їх виявлення розроблена функція для здійснення операції стемінгу. Використовуючи цю функцію можна опрацьовувати довільний текст.
Для виявлення слів з дефісом або апострофом вираз \w+ потрібно розширити до: «\w+([-']\w+)*». Цей вираз означає що після \w+ може йти нуль або більше випадків [-']\w+; що дозволить виділити слова hot-tempered або it's. Символи ?: також потрібно додати до регулярного виразу, та шаблон для виявлення символів лапок.
Токенізатор на основі регулярних виразів в NLTK
Функція nltk.regexp_tokenize()подібна до re.findall() (у випадку використання останньої для токенізаці). Але, nltk.regexp_tokenize() є більш ефективною для здійснення цієї операції, та не потребує використання круглих дужок. Для покращення читабельності регулярний вираз поділений на окремі рядки до яких доданий коментар.. Спеціальний (?x) "verbose flag" – вказує Python на те, що оператор складається з декількох частин і пробілами між ними та коментарами потрібно знехтувати.
У випадку використання «verbose flag», символ ' ' пробілів потрібно замінити на \s. Функція regexp_tokenize() може містити не обов’язковий параметр gaps . Коли цей параметр має значення True, регулярний вираз виділить проміжки між словами, аналогічно до re.split().
Тексти програм
Варіант №3
3.1 Описати, які класи стрічок відповідають наступному регулярному виразу. [a-zA-Z]+. Результати перевірити використовуючи nltk.re_show() (рис.9)
/
Цьому виразу відповідають стрічки довільної довжини, які складаються з великих та (або) малих літер.
3.2 Описати, які класи стрічок відповідають наступному регулярному виразу. [A-Z][a-z]*. Результати перевірити використовуючи nltk.re_show() (рис.10)
/
Цьому виразу відповідають стрічки, які складаються з однієї великої літери та 0 або більше малих літер.
3.3 Описати, які класи стрічок відповідають наступному регулярному виразу. \d+(\.\d+)?. Результати перевірити використовуючи nltk.re_show() (рис.11)
/
рис.11 Класи стрічок 2
Даному виразу відповідають усі можливі додатні числа.
3.4 Описати, які класи стрічок відповідають наступному регулярному виразу. ([^aeiou][aeiou][^aeiou])*. Результати перевірити використовуючи nltk.re_show() (рис.12)
/
Цьому виразу відповідають 0 або більше послідовностей не голосна-голосна-не голосна.
3.5 Описати, які класи стрічок відповідають наступному регулярному виразу. \w+|[^\w\s]+.. Результати перевірити використовуючи nltk.re_show() (рис.13)
/
Виразу \w+|[^\w\s]+. відповідають стрічки, які складаються з довільної к-сті букв або цифр (\w+), або з довільної к-сті не букв, цифр, пробілів ([^\w\s]+) і будь-якого символу (.).
3.6 Описати, які класи стрічок відповідають наступному регулярному виразу. p[aeiou]{,2}t Результати перевірити використовуючи nltk.re_show() (рис.14)
/
Цьому виразу відповідають стрічки, які складаються з букви ‘p’, нуля, одної або двох голосних і букви ‘t’.
3.8 Написати регулярний вираз, який встановлює відповідністьнаступному класу стрічок:арифметичний вираз з цілими значеннями і, який містить операції множення та додавання (2*3+8).
/
3.12 Написати регулярний вираз для токенізації такого тексту, як don't до do та n't? Пояснити чому цей регулярний вираз не працює: «n't|\w+».
/
3.14 Прочитати файл допомоги про функцію re.sub() використовуючи help(re.sub) . Використовуючи re.sub напишіть програму видалення HTML розмітки замінивши її на пробіли.
/
3.15 Прочитати Додаток А. Дослідити явища описані у Додатку А використовуючи корпуси текстів та метод findall() для пошуку в токенізованому тексті.
/
Висновки
На цій лабораторній роботі я розглянув поняття регулярних виразів та навчився з ними працювати. Дізнався про те, що таке метасимволи, токенізатор та розглянув основні метасимволи регулярних виразів. Навчився обробляти фрагменти слів.