Лабораторна робота №6 Мета робота Використання регулярних виразів для обробки текстів. Короткі теоретичні icon

Лабораторна робота №6 Мета робота Використання регулярних виразів для обробки текстів. Короткі теоретичні




Скачати 82.15 Kb.
НазваЛабораторна робота №6 Мета робота Використання регулярних виразів для обробки текстів. Короткі теоретичні
Дата конвертації07.01.2013
Розмір82.15 Kb.
ТипЛабораторна робота

Лабораторна робота №6

Мета робота


Використання регулярних виразів для обробки текстів.

Короткі теоретичні відомості


Виконанні цієї лабораторної роботи необхідно розпочати з:

>>> from __future__ import division

>>> import nltk, re, pprint

Використання регулярних виразів для виявлення слів за заданими шаблонами.


Багато задач лінгвістичних досліджень передбачають встановлення відповідності заданому шаблону. Наприклад, можна знайти слова, які закінчуються на “ed” використовуючи метод endswith('ed'). Подібні методи перевірки слів перелічені в Таблиці Методичних вказівок до лабораторної роботи №2. Регулярні вирази є більш потужним і гнучким методом опису шаблонів символів, які необхідно виявити у послідовностях символів. Регулярний вираз (вислів)програмуванні) — це рядок що описує або збігається з множиною рядків, відповідно до набору спеціальних синтаксичних правил. Регулярні вислови використовуються в багатьох текстових редакторах та допоміжних інструментах для пошуку та зміни тексту на основі заданих шаблонів.

Для роботи з регулярними виразами у Python потрібно імпортувати бібліотеку re скориставшись: import re.
^

Функція re.search(p, s) – пошук у словах списку



Вираз re.search(regexp, w) дозволяє знаходити слова w , які відповідають регулярному виразу regexp .


Створюємо змінну wordlist


>>> text = '0.38, 59%, 1987, Irina Yurchak, NULP, 35$, , -95, About Python Python is a remarkably powerful dynamic programming language that is used in a wide variety of application domains. Python is often compared to Tcl, Perl, Ruby, Scheme or Java. Some of its key distinguishing features include Python lets you write the code you need, quickly. And, thanks to a highly optimized byte compiler and support libraries, Python code runs more than fast enough for most applications.'


^ Перетворюємо стрічку на список


>>> wordlist=nltk.word_tokenize(text)


Отримуємо список


>>> wordlist

['0.38', ',', '59', '%', ',', '1987', ',', 'Irina', 'Yurchak', ',', 'NULP', ',', '35', '$', ',', '<', 'html', '>', '<', '/html', '>', ',', '-95', ',', 'About', 'Python', 'Python', 'is', 'a', 'remarkably', 'powerful', 'dynamic', 'programming', 'language', 'that', 'is', 'used', 'in', 'a', 'wide', 'variety', 'of', 'application', 'domains.', 'Python', 'is', 'often', 'compared', 'to', 'Tcl', ',', 'Perl', ',', 'Ruby', ',', 'Scheme', 'or', 'Java.', 'Some', 'of', 'its', 'key', 'distinguishing', 'features', 'include', 'Python', 'lets', 'you', 'write', 'the', 'code', 'you', 'need', ',', 'quickly.', 'And', ',', 'thanks', 'to', 'a', 'highly', 'optimized', 'byte', 'compiler', 'and', 'support', 'libraries', ',', 'Python', 'code', 'runs', 'more', 'than', 'fast', 'enough', 'for', 'most', 'applications', '.']


^ Шукаємо всі слова, що розпочинаються на «es»


>>> [w for w in wordlist if re.search('es$', w)]

['features', 'libraries']


Шукаємо всі слова, що розпочинаються на «t»


>>> [w for w in wordlist if re.search('^t', w)]

['that', 'to', 'the', 'thanks', 'to', 'than']


^ Шукаємо всі слова, що розпочинаються на «t» або на «s»


>>> [w for w in wordlist if re.search('^[ts]', w)]

['that', 'to', 'the', 'thanks', 'to', 'support', 'than']


Шукаємо всі слова, що розпочинаються на «і» і містять 2 символи


>>> [w for w in wordlist if re.search('^i.$', w)]

['is', 'is', 'in', 'is']


^ Шукаємо всі слова, що містять 3 будь яких символи


>>> [w for w in wordlist if re.search('^...$', w)]

['-95', 'Tcl', 'its', 'key', 'you', 'the', 'you', 'And', 'and', 'for']


Шукаємо всі слова, що містять 3 символи - букви


>>> [w for w in wordlist if re.search('^[a-z]..$', w)]

['its', 'key', 'you', 'the', 'you', 'and', 'for']


^ Шукаємо всі слова, що розпочинаються на літери від «m» до «z» і містять 4 символи


>>> [w for w in wordlist if re.search('^[m-z]...$', w)]

['that', 'used', 'wide', 'need', 'runs', 'more', 'than', 'most']


^ Шукаємо всі слова, що закінчуються на літери від «es» до «ed»


>>> [w for w in wordlist if re.search('(es|ed)$', w)]

['used', 'compared', 'features', 'need', 'optimized', 'libraries']


Шукаємо всі слова, що є більше за 4 символи


>>> [w for w in wordlist if re.search('^[a-z]{4,}', w)]

['html', 'remarkably', 'powerful', 'dynamic', 'programming', 'language', 'that', 'used', 'wide', 'variety', 'application', 'domains.', 'often', 'compared', 'distinguishing', 'features', 'include', 'lets', 'write', 'code', 'need', 'quickly.', 'thanks', 'highly', 'optimized', 'byte', 'compiler', 'support', 'libraries', 'code', 'runs', 'more', 'than', 'fast', 'enough', 'most', 'applications']


>>> [w for w in wordlist if re.search('^[a-z0-9]{4,}', w)]

['1987', 'html', 'remarkably', 'powerful', 'dynamic', 'programming', 'language', 'that', 'used', 'wide', 'variety', 'application', 'domains.', 'often', 'compared', 'distinguishing', 'features', 'include', 'lets', 'write', 'code', 'need', 'quickly.', 'thanks', 'highly', 'optimized', 'byte', 'compiler', 'support', 'libraries', 'code', 'runs', 'more', 'than', 'fast', 'enough', 'most', 'applications']


^ Шукаємо всі слова, що є більше за 4 символи і починаються на «а»


>>> [w for w in wordlist if len(w)>4 and re.search('^a', w)]

['application', 'applications']


Шукаємо всі слова, що є більше за 4 символи і містять фрагмент «th»


>>> [w for w in wordlist if len(w)>4 and re.search('th', w)]

['Python', 'Python', 'Python', 'Python', 'thanks', 'Python']


^ Шукаємо всі слова, що містять в собі або «t» або «h»


>>> [w for w in wordlist if re.search('[th]', w)]

['Yurchak', 'html', '/html', 'About', 'Python', 'Python', 'that', 'variety', 'application', 'Python', 'often', 'to', 'Scheme', 'its', 'distinguishing', 'features', 'Python', 'lets', 'write', 'the', 'thanks', 'to', 'highly', 'optimized', 'byte', 'support', 'Python', 'than', 'fast', 'enough', 'most', 'applications']


^ Шукаємо всі слова, що містять в собі сполучення «th»


>>> [w for w in wordlist if re.search('th', w)]

['Python', 'Python', 'that', 'Python', 'Python', 'the', 'thanks', 'Python', 'than']


Шукаємо всі слова, що не починаються і не закінчуються на маленьку літеру


>>> [w for w in tokens if re.search('[^a-z]', w)]

['About', 'Python', 'Python', 'domains.', 'Python', 'Tcl', ',', 'Perl', ',', 'Ruby', ',', 'Scheme', 'Java.', 'Some', 'Python', ',', 'quickly.', 'And', ',', ',', 'Python', '.']


^ Шукаємо всі слова, що містять в собі «.»


>>> [w for w in wordlist if re.search('\.', w)]

['0.38', 'domains.', 'Java.', 'quickly.', '.']


Шукаємо всі слова, що містять цифри


>>> [w for w in wordlist if re.search('[0-9]', w)]

['0.38', '59', '1987', '35', '-95']

>>> [w for w in wordlist if re.search('^[0-9]+\.[0-9]+$', w)]

['0.38']


Шукаємо всі слова, що містять знак «$»


>>> [w for w in wordlist if re.search('\$$', w)]

['$']


^ Шукаємо всі слова, що містять символи «<» або «>»


>>> [w for w in wordlist if re.search('(\<|\>)', w)]

['<', '>', '<', '>']


Шукаємо всі слова з великої літери, власні імена: імена людей та організацій


>>> [w for w in wordlist if re.search('^[A-Z]', w)]

['Irina', 'Yurchak', 'NULP', 'About', 'Python', 'Python', 'Python', 'Tcl', 'Perl', 'Ruby', 'Scheme', 'Java.', 'Some', 'Python', 'And', 'Python']


^ Шукаємо слова що містять лише великі літери


>>> [w for w in wordlist if re.search('^[A-Z]+$', w)]

['NULP']


Шукаємо слова, що містять в собі літеру «S або s» («r») у сполученні з однією з наступних літер «c» або «o» або «u» («i|e|a»)


>>> [w for w in wordlist if re.search('S(c|o)', w)]

['Scheme', 'Some']

>>> [w for w in wordlist if re.search('[Ss](c|o|u)', w)]

['Scheme', 'Some', 'support']


>>> [w for w in wordlist if re.search('r(i|e|a)', w)]

['Irina', 'remarkably', 'programming', 'variety', 'compared', 'features', 'write', 'libraries', 'more']

^

Метод re.findall() ("знайти все")


Метод re.findall() ("знайти всеl") дозволяє знайти всі відповідності даному регулярному виразу. В наступному прикладі показано знаходження та підрахунок всіх голосних:


>>> text

'0.38, 59%, 1987, Irina Yurchak, NULP, 35$, , -95, About Python Python is a remarkably powerful dynamic programming language that is used in a wide variety of application domains. Python is often compared to Tcl, Perl, Ruby, Scheme or Java. Some of its key distinguishing features include Python lets you write the code you need, quickly. And, thanks to a highly optimized byte compiler and support libraries, Python code runs more than fast enough for most applications.'

>>> re.findall(r'[aeiou]', text)

['i', 'a', 'u', 'a', 'o', 'u', 'o', 'o', 'i', 'a', 'e', 'a', 'a', 'o', 'e', 'u', 'a', 'i', 'o', 'a', 'i', 'a', 'u', 'a', 'e', 'a', 'i', 'u', 'e', 'i', 'a', 'i', 'e', 'a', 'i', 'e', 'o', 'a', 'i', 'a', 'i', 'o', 'o', 'a', 'i', 'o', 'i', 'o', 'e', 'o', 'a', 'e', 'o', 'e', 'u', 'e', 'e', 'o', 'a', 'a', 'o', 'e', 'o', 'i', 'e', 'i', 'i', 'u', 'i', 'i', 'e', 'a', 'u', 'e', 'i', 'u', 'e', 'o', 'e', 'o', 'u', 'i', 'e', 'e', 'o', 'e', 'o', 'u', 'e', 'e', 'u', 'i', 'a', 'o', 'a', 'i', 'o', 'i', 'i', 'e', 'e', 'o', 'i', 'e', 'a', 'u', 'o', 'i', 'a', 'i', 'e', 'o', 'o', 'e', 'u', 'o', 'e', 'a', 'a', 'e', 'o', 'u', 'o', 'o', 'a', 'i', 'a', 'i', 'o']

>>> len(re.findall(r'[aeiou]', text))

129


Токенізуємо текст

>>> wordlist=nltk.word_tokenize(text)

>>> wordlist

['0.38', ',', '59', '%', ',', '1987', ',', 'Irina', 'Yurchak', ',', 'NULP', ',', '35', '$', ',', '<', 'html', '>', '<', '/html', '>', ',', '-95', ',', 'About', 'Python', 'Python', 'is', 'a', 'remarkably', 'powerful', 'dynamic', 'programming', 'language', 'that', 'is', 'used', 'in', 'a', 'wide', 'variety', 'of', 'application', 'domains.', 'Python', 'is', 'often', 'compared', 'to', 'Tcl', ',', 'Perl', ',', 'Ruby', ',', 'Scheme', 'or', 'Java.', 'Some', 'of', 'its', 'key', 'distinguishing', 'features', 'include', 'Python', 'lets', 'you', 'write', 'the', 'code', 'you', 'need', ',', 'quickly.', 'And', ',', 'thanks', 'to', 'a', 'highly', 'optimized', 'byte', 'compiler', 'and', 'support', 'libraries', ',', 'Python', 'code', 'runs', 'more', 'than', 'fast', 'enough', 'for', 'most', 'applications', '.']

Можна знайти та побудувати частотний розподіл для послідовностей з двох і більше голосних в довільному тексті:

>>> fd = nltk.FreqDist(vs for word in wordlist

for vs in re.findall(r'[aeiou]{2,}', word))

>>> fd.items()

[('ou', 4), ('ui', 2), ('io', 2), ('ie', 2), ('ai', 1), ('ua', 1), ('ea', 1), ('ee', 1)]

>>> fd.tabulate()

ou ui io ie ai ua ea ee

4 2 2 2 1 1 1 1

^

Встановлення основ слів (стемінг)



>>> wordlist

['0.38', ',', '59', '%', ',', '1987', ',', 'Irina', 'Yurchak', ',', 'NULP', ',', '35', '$', ',', '<', 'html', '>', '<', '/html', '>', ',', '-95', ',', 'About', 'Python', 'Python', 'is', 'a', 'remarkably', 'powerful', 'dynamic', 'programming', 'language', 'that', 'is', 'used', 'in', 'a', 'wide', 'variety', 'of', 'application', 'domains.', 'Python', 'is', 'often', 'compared', 'to', 'Tcl', ',', 'Perl', ',', 'Ruby', ',', 'Scheme', 'or', 'Java.', 'Some', 'of', 'its', 'key', 'distinguishing', 'features', 'include', 'Python', 'lets', 'you', 'write', 'the', 'code', 'you', 'need', ',', 'quickly.', 'And', ',', 'thanks', 'to', 'a', 'highly', 'optimized', 'byte', 'compiler', 'and', 'support', 'libraries', ',', 'Python', 'code', 'runs', 'more', 'than', 'fast', 'enough', 'for', 'most', 'applications', '.']

>>> def stem_classic(word):

for suffix in ['ing', 'ly', 'ed', 'ious', 'ies', 'ive', 'es', 's', 'ment']:

if word.endswith(suffix):

return word[:-len(suffix)]

return word


>>> stem_classic('remarkably')

'remarkab'

>>> def stem(word):

regexp = r'^(.*?)(ing|ly|ed|ious|ies|ive|es|s|ment)?$'

stem, suffix = re.findall(regexp, word)[0]

return stem


>>> stem('remarkably')

'remarkab'

>>> [stem(w) for w in wordlist]

['0.38', ',', '59', '%', ',', '1987', ',', 'Irina', 'Yurchak', ',', 'NULP', ',', '35', '$', ',', '<', 'html', '>', '<', '/html', '>', ',', '-95', ',', 'About', 'Python', 'Python', 'i', 'a', 'remarkab', 'powerful', 'dynamic', 'programm', 'language', 'that', 'i', 'us', 'in', 'a', 'wide', 'variety', 'of', 'application', 'domains.', 'Python', 'i', 'often', 'compar', 'to', 'Tcl', ',', 'Perl', ',', 'Ruby', ',', 'Scheme', 'or', 'Java.', 'Some', 'of', 'it', 'key', 'distinguish', 'featur', 'include', 'Python', 'let', 'you', 'write', 'the', 'code', 'you', 'ne', ',', 'quickly.', 'And', ',', 'thank', 'to', 'a', 'high', 'optimiz', 'byte', 'compiler', 'and', 'support', 'librar', ',', 'Python', 'code', 'run', 'more', 'than', 'fast', 'enough', 'for', 'most', 'application', '.']
^

Використання регулярних виразів для токенізації тексту


>>> raw = """'When I'M a Duchess,' she said to herself, (not in a very hopeful tone

though), 'I won't have any pepper in my kitchen AT ALL. Soup does very

well without--Maybe it's always pepper that makes people hot-tempered,'..."""


>>> raw

"'When I'M a Duchess,' she said to herself, (not in a very hopeful tone\nthough), 'I won't have any pepper in my kitchen AT ALL. Soup does very\nwell without--Maybe it's always pepper that makes people hot-tempered,'..."

Найпростіший спосіб токенізації тексту – це поділ його за пробілами.

>>> re.split(r' ', raw)

["'When", "I'M", 'a', "Duchess,'", 'she', 'said', 'to', 'herself,', '(not', 'in', 'a', 'very', 'hopeful', 'tone\nthough),', "'I", "won't", 'have', 'any', 'pepper', 'in', 'my', 'kitchen', 'AT', 'ALL.', 'Soup', 'does', 'very\nwell', 'without--Maybe', "it's", 'always', 'pepper', 'that', 'makes', 'people', "hot-tempered,'..."]

Регулярний вираз «[ \t\n]+» встановлює відповідність одному або більше пробілам, табуляціям (\t) чи символам нового рядка (\n).

>>> re.split(r'[ \t\n]+', raw)

["'When", "I'M", 'a', "Duchess,'", 'she', 'said', 'to', 'herself,', '(not', 'in', 'a', 'very', 'hopeful', 'tone', 'though),', "'I", "won't", 'have', 'any', 'pepper', 'in', 'my', 'kitchen', 'AT', 'ALL.', 'Soup', 'does', 'very', 'well', 'without--Maybe', "it's", 'always', 'pepper', 'that', 'makes', 'people', "hot-tempered,'..."]

Python підтримує символ \w ,якому відповідає клас символів слів аналогічних до [a-zA-Z0-9_], та символ \W , який визначає клас символів – всі символи не літери не цифри і не підкреслення.

>>> re.split(r'\W+', raw)

['', 'When', 'I', 'M', 'a', 'Duchess', 'she', 'said', 'to', 'herself', 'not', 'in', 'a', 'very', 'hopeful', 'tone', 'though', 'I', 'won', 't', 'have', 'any', 'pepper', 'in', 'my', 'kitchen', 'AT', 'ALL', 'Soup', 'does', 'very', 'well', 'without', 'Maybe', 'it', 's', 'always', 'pepper', 'that', 'makes', 'people', 'hot', 'tempered', '']


^

Символи в регулярних виразах. Таблиця 2


Символ

Функція

\b

Межі слова

\d

Будь-яка десяткова цифра (== [0-9])

\D

Будь-яка не десяткова цифра (== [^0-9])

\s

Будь-який символ пробілу (== [ \t\n\r\f\v]

\S

Будь-який не символ пробілу (== [^ \t\n\r\f\v])

\w

Будь-який символ літери чи цифри (== [a-zA-Z0-9_])

\W

Будь-який не символ літери чи цифри (== [^a-zA-Z0-9_])

\t

Символ табуляції

\n

Символ нової стрічки



^

Токенізатор на основі регулярних виразів в NLTK


Функція nltk.regexp_tokenize()подібна до re.findall() (у випадку використання останньої для токенізаці). Але, nltk.regexp_tokenize() є більш ефективною для здійснення цієї операції, та не потребує використання круглих дужок. Для покращення читабельності регулярний вираз поділений на окремі рядки до яких доданий коментар.. Спеціальний (?x) "verbose flag" – вказує Python на те, що оператор складається з декількох частин і пробілами між ними та коментарами потрібно знехтувати.

>>> text_new= 'That U.S.A. poster-print costs "Irina" 0.95% $12.40... NLTK Yurchak'

>>> pattern = r'''(?x) # set flag to allow verbose regexps

([A-Z]\.)+ # abbreviations, e.g. U.S.A.

| \w+(-\w+)* # words with optional internal hyphens

| \$?\d+(\.\d+)?%? # currency and percentages, e.g. $12.40, 82%

| \.\.\. # ellipsis

| [][.,;"'?():-_`] # these are separate tokens

'''

>>> nltk.regexp_tokenize(text_new, pattern)

['That', 'U.S.A.', 'poster-print', 'costs', '"', 'Irina', '"', '0', '.', '95', '$12.40', '...', 'NLTK', 'Yurchak']

>>>


Завдання


1. Описати, які класи стрічок відповідають наступному регулярному виразу. [a-zA-Z]+. Результати перевірити використовуючи nltk.re_show()

>>> wordlist = 'Personal firewall software may warn about the connection IDLE makes to its subprocess using this computers internal loopback interface. This connection is not visible on any external interface and no data is sent to or received from the Internet.'

>>> nltk.re_show('[a-zA-Z]+', wordlist)

{Personal} {firewall} {software} {may} {warn} {about} {the} {connection} {IDLE} {makes} {to} {its} {subprocess} {using} {this} {computers} {internal} {loopback} {interface}. {This} {connection} {is} {not} {visible} {on} {any} {external} {interface} {and} {no} {data} {is} {sent} {to} {or} {received} {from} {the} {Internet}.

*************

Виразу [a-zA-Z]+ відповідають всі стрічки довільної довжини, що складаються з великих та/або маленьких літер




Схожі:

Лабораторна робота №6 Мета робота Використання регулярних виразів для обробки текстів. Короткі теоретичні iconЛабораторна робота №4 Дослідження cd-rom приводу Мета роботи: ознайомитись з процедурами підключення, встановлення та використання cd-rom приводу. Короткі теоретичні
Електромеханічна частина, загалом аналогічна жорстким дискам, має деякі особливості. Вона включає двигун, що обертає шпиндель, систему...
Лабораторна робота №6 Мета робота Використання регулярних виразів для обробки текстів. Короткі теоретичні iconЛабораторна робота www. zol 2 inf. at. ua Тема: Програмування на Object Delphi: Файли
Мета: вивчення файлових типів даних, придбання практичних навиків створення і обробки файлів
Лабораторна робота №6 Мета робота Використання регулярних виразів для обробки текстів. Короткі теоретичні iconЛабораторна робота №2 (Фізика, 10 клас, за новою програмо) Тема: Лабораторна робота №2. Вимірювання сил
...
Лабораторна робота №6 Мета робота Використання регулярних виразів для обробки текстів. Короткі теоретичні iconЛабораторна робота №10 Створення структури таблиць бази даних у субд ms access Мета роботи: навчитися створювати структуру таблиць у базі даних. Теоретичні відомості
Фотографії письменників збережіть в окремому файлі. Ілюстрації до твору виконайте в графічному редакторі або скануйте і збережіть...
Лабораторна робота №6 Мета робота Використання регулярних виразів для обробки текстів. Короткі теоретичні iconЛабораторна робота №2 "Обробка растрових та векторних зображень для Web"
Вивчення можливостей та набуття практичного досвіду у використанні професійних графічних засобів для обробки та підготовки зображень...
Лабораторна робота №6 Мета робота Використання регулярних виразів для обробки текстів. Короткі теоретичні iconЛабораторна робота №12 швейні машини-напівавтомати для виконання прямих петель човниковим стібком лабораторна робота №12 виконується на прикладі швейної машини-напівавтомату 25-а кл
Призначення, будова та регулювання механізму голки швейної машини-напівавтомату 25-а кл
Лабораторна робота №6 Мета робота Використання регулярних виразів для обробки текстів. Короткі теоретичні iconЛабораторна робота №9 швейні машини-напівавтомати для пришивання гудзиків човниковим стібком лабораторна робота №9 виконується на прикладі швейної машини-напівавтомату 27 кл. Зміст звіту
Призначення, будова та регулювання механізму голки швейної машини-напівавтомату 27 кл
Лабораторна робота №6 Мета робота Використання регулярних виразів для обробки текстів. Короткі теоретичні iconЛабораторна робота №1 Компоненти персонального комп'ютера Мета роботи: Вивчити будову, призначення та функціональність основних компонентів пк. Теоретичні
Персональний комп'ютер (рис. 1) складається з наступних основних елементів системний блок і пристрої вводу/виводу (монітор, клавіатура,...
Лабораторна робота №6 Мета робота Використання регулярних виразів для обробки текстів. Короткі теоретичні iconУрок 18/31 Лабораторна робота №9 «Визначення густини тіла гідростатичним методом» Мета уроку : виміряти густину речовини, з якого складається тверде тіло, методом гідростатичного зважування
Урок 18/31 Лабораторна робота №9 «Визначення густини тіла гідростатичним методом»
Лабораторна робота №6 Мета робота Використання регулярних виразів для обробки текстів. Короткі теоретичні iconЛабораторна робота №2 Тема. Формування правил Мета. О тримання практичних навичок складення правил та використання їх в програмі в системі програмування swi-prolog. Завдання
...
Додайте кнопку на своєму сайті:
Документи


База даних захищена авторським правом ©te.zavantag.com 2000-2017
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації
Документи