ВИВЧЕННЯ БІБЛІОТЕКИ ПРИКЛАДНИХ ПРОГРАМ NLTK, ДЛЯ ОПРАЦЮВАННЯ ТЕКСТІВ ПРИРОДНОЮ МОВОЮ. АВТОМАТИЧНИЙ МОРФОЛОГІЧНИЙ АНАЛІЗ

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Системи автоматизованого проектуваня

Інформація про роботу

Рік:
2008
Тип роботи:
Лабораторна робота
Предмет:
Комп’ютерна лінгвістика
Група:
ПРЛ

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” іНСТИТУТ КОМП’ютерних НАУК та ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ Кафедра “Системи автоматизованого проектування” ЗВІТ до лабораторної роботи №5 ВИВЧЕННЯ БІБЛІОТЕКИ ПРИКЛАДНИХ ПРОГРАМ NLTK, ДЛЯ ОПРАЦЮВАННЯ ТЕКСТІВ ПРИРОДНОЮ МОВОЮ. АВТОМАТИЧНИЙ МОРФОЛОГІЧНИЙ АНАЛІЗ Виконав: студент групи ПРЛ-1 Львів-2008 МЕТА РОБОТА Вивчення основ програмування на мові Python. Ознайомлення з автоматичним морфологічним аналізом в NLTK. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ 1.1 Вступ. Виконуючи попередні лабораторні роботи слова оброблялися, як слова в загальному розумінні. Ми бачили що деякі розбіжності можна зменшити використовуючи нормалізацію, але подальші узагальнення не робилися. Розглядаючи частотний розподіл слова often фіксувалися слова які йдуть після цього слова і визначено що often часто виконує роль «модифікатора» дієслів. Дійсно, це слово належить до класу слів, які модифікують дієслова – adverbs. Для глибшого розуміння термінології розглянемо програму, яка для заданого слова знаходить інші слова які зустрічаються в тому самому контексті (listing1). Наприклад, для слова women будуть знайдені всі контексти в яких це слово зустрічається в корпусі і будуть знайдені інші слова які зустрічаються в такому контексті. Коли запустити на виконання функцію dist_sim() для певного переліку слів то отримаємо інші слова, які мають подібне розповсюдження. Для слова women такими словами будуть переважно іменники, для слова bought –дієслова, для over – прийменники, для the – артиклі. В загальному для назв цих груп слів вживаються терміни – класи слів, лексичні категорії, частини мови. Одною з відомих особливостей Броунівського корпусу є те, що всі слова в ньому промарковані (tagged) за їх частиномовною приналежністю. Тепер замість того щоб розглядати слова які йдуть після often можна аналізувати до якої частини мови вони належать. В таблиці 1 наведені перші вісім таких слів які впорядковані за частотою та з поясненням кожного тега. Бачимо, що більшість слів це дієслова. Таблиця 1.Частини мови слів Броунівського корпусу, які зустрічаються перед often .  1.2 Загальна інформація про автоматичний морфологічний аналіз в NLTK Деякі великі корпуси текстів такі як Броунівський(Brown) і частково Wall Street Journal містять морфологічну розмітку (позначенні частини мови всіх слів) і дозволяють працювати з цими даними. Файл морфологічно розміченого корпусу текстів переважно містить текст в наступному вигляді (Броунівський корпус). 1.2.1 Представлення тегів і читання морфологічно розміченого корпусу текстів. За домовленістю в NLTK промарковані слова (tokens) представляються з використанням типу даних – кортеж. Кортежі подібні до списків, але їх неможна змінювати. До елементів кортежу можна отримати доступ використовуючи їх індекси. 1.3 Класифікація слів. Іменники англійської мови можуть бути морфологічно складними. Наприклад books і women це множина. Слова з –ness суфіксом це іменники утворені з прикметників: happiness, illness. Суфікс –ment з’являється в деяких іменниках, які походять від дієслів: government, establishment. Дієслова англійської мови також можуть бути морфологічно складними. Наприклад теперішній тривалий час в дієсловах характеризується закінченням –ing і описує триваючу незавершену дію (falling, eating). Суфікс –ing також з’являється і у іменників, які походять від дієслів (the falling of the leaves (герундій)). В Броунівському корпусі вони маркуються як VBG. Минулий час в дієсловах часто характеризується закінченням –ed і описує завершену дію, маркується VBD. Загальні набори тегів часто охоплюють деяку морфологічно-синтаксичну інформацію – це є інформація про види морфологічного маркування, які отримують слова в залежності від їх синтаксичної ролі. Розглянемо, наприклад, вибрані різні граматичні форми слова “go” , які ілюструються в наступних реченнях. ТЕКСТ ПРОГРАМИ ***************************************1**************************************** >>> import nltk >>> from nltk import corpus >>> corpus.brown.tagged('b')[4] [('The', 'AT'), ('jury', 'NN'), ('said', 'VBD'), ('it', 'PPS'), ('did', 'DOD'), ('find', 'VB'), ('that', 'CS'), ('many', 'AP'), ('of', 'IN'), ("Georgia's", 'NP$'), ('registration', 'NN'), ('and', 'CC'), ('election', 'NN'), ('laws', 'NNS'), ('``', '``'), ('are', 'BER'), ('outmoded', 'JJ'), ('or', 'CC'), ('inadequate', 'JJ'), ('and', 'CC'), ('often', 'RB'), ('ambiguous', 'JJ'), ("''", "''"), ('.', '.')] >>> corpus.brown.tagged('d')[5] [('It', 'PPS'), ('recommended', 'VBD'), ('that', 'CS'), ('Fulton', 'NP'), ('legislators', 'NNS'), ('act', 'VB'), ('``', '``'), ('to', 'TO'), ('have', 'HV'), ('these', 'DTS'), ('laws', 'NNS'), ('studied', 'VBN'), ('and', 'CC'), ('revised', 'VBN'), ('to', 'IN'), ('the', 'AT'), ('end', 'NN'), ('of', 'IN'), ('modernizing', 'VBG'), ('and', 'CC'), ('improving', 'VBG'), ('them', 'PPO'), ("''", "''"), ('.', '.')] ***************************************2**************************************** >>> import nltk >>> from nltk import corpus >>> fd=nltk.FreqDist() >>> for (wd, tg) in corpus.brown.tagged('b')[3]: fd.inc(tg) >>> fd.max() 'NN' >>>tokens=tokenize.whitespace('I hate studying at school') >>>default_tagger=tag.Default('nn') >>>list(default_tagger.tag(tokens)) [('I' , 'nn'), ('hate', 'nn'), ('studying', 'nn'), ('at', 'nn'), ('school', 'nn')] Tag.accuracy(default_tagger, corpus.brown.tagger) ***************************************3**************************************** from nltk import corpus >>> fd=nltk.FreqDist() >>> for (wd, tg) in corpus.brown.tagged('b')[4]: if tg[:2]=='vb': fd.inc(wd + '/' + tg) >>> fd.sorted()[:15] ['went/vbd' , 'be/vb' , 'tell/vb' , 'done/vbn' , 'finished/vbd' , 'healed/vbd' , 'fakes/vbz' , 'run/vb' , 'goes/vbz' , 'been/vbn' , 'cursed/vbd' , 'fixed/vbd' , 'stridden/vbn' , 'struck/vbd , 'makes/vbz' ] ***************************************4**************************************** >>> import nltk >>> from nltk import tokenize >>> def build_wc_map(): cw_map=nltk.defaultdict(list) for item in corpus.brown.items: for sent in corpus.brown.tokenized(item): sent=[w.lower() for w in sent] for i in range(l, len(sent)-1): cw_map=[(sent[i-1],sent[i+1])], append(sent[i]) return nltk.invert_dict(cw_map) >>> def dist_sim(wc_map, word, num=10): if word in wc_map: contexts=set(wc_map[word]) fd=nltk.FreqDist(w for w in wc_map for c in wc_map[w] if c in contexts) return fd.sorted()[:num] return [] >>> wc_map=build_wc_map() >>>dist_sim(wc_map, 'world') ['time' , 'man' , 'number' , 'estate' , 'power' , 'universe' , 'star' , 'person' , 'jury' , 'future'] >>>dist_sim(wc_map, 'finished') ['thought' , 'meant' , 'used' , 'took' , 'spoilt' , 'paid' , 'lit' , 'met' , 'used' , 'killed'] >>>dist_sim(wc_map, 'in' ) ['for' , 'between', 'for' , 'out' , 'and', 'at' , 'among' , 'to' , 'across' , 'with'] >>>dist_sim(wc_map, 'her') ['his' , 'and' , 'their' , 'this' , 'that' , 'our' , 'no' , 'some', 'your' , 'the'] ***************************************5**************************************** >>>import nltk >>> from nltk import corpus >>> def findtags(tag_prefix, tagged_text): cfd=nltk.ConditionalFreqDist() for (wd, tg) in tagged_text: if tg.startswith(tag_prefix): cfd[tg].inc(wd) tagdict={} for tg in cfd.conditions(): tagdict[tg]=cfd[tg].sorted()[:5] return tagdict >>> tagdict=findtags('nn', corpus.brown.tagged('b')) >>>for tg in sorted(tagdict): print tg, tgdict[tg] nn ['woman' , 'month' , 'duty' , 'child' , 'world'] nn$ ['day’s', 'state’s' , 'world’s' , 'nation’s' , 'child’s'] nn$-hl ['Grove’s', 'Jury’s' ] nn$-tl ['Minister’s' , 'General’s' , 'Admiral’s' , 'President’s'] nns ['women' , 'states' , 'cities' , 'fees'] nns$ ['women’s' , 'men’s' , 'children’s'] nn-tl ['Governor' , 'City' , 'State' , 'President'] ***************************************6**************************************** >>> patterns=[ (r'.*ing$', 'vbg'), # gerunds (r'.*ed$', 'vbd'), # simple past (r'.*es$', 'vbz'), # 3rd singular present (r'.*ould$', 'md'), # modals (r'.*\'s$', 'nn$'), # possessive nouns (r'.*s$', 'nns'), # plural nouns (r'^-?[0-9]+(.[0-9]+)?$', 'cd'), # cardinal numbers (r'.*', 'nn') # nouns (default) ] >>>regexp_tagger = tag.Regexp(patterns) >>>list(regexp_tagger.tag(brown.raw('a')))[3] [('``', '``'), ('Only', 'RB'), ('a', 'AT'), ('relative', 'JJ'), ('handful', 'NN'), ('of', 'IN'), ('such', 'JJ'), ('reports', 'NNS'), ('was', 'BEDZ'), ('received', 'VBN'), ("''", "''"), (',', ','), ('the', 'AT'), ('jury', 'NN'), ('said', 'VBD'), (',', ','), ('``', '``'), ('considering', 'IN'), ('the', 'AT'), ('widespread', 'JJ'), ('interest', 'NN'), ('in', 'IN'), ('the', 'AT'), ('election', 'NN'), (',', ','), ('the', 'AT'), ('number', 'NN'), ('of', 'IN'), ('voters', 'NNS'), ('and', 'CC'), ('the', 'AT'), ('size', 'NN'), ('of', 'IN'), ('this', 'DT'), ('city', 'NN'), ("''", "''"), ('.', '.')] ВИСНОВОК: На даній лабораторній роботі я продовжила знайомство з мовою програмування Python, а також ознайомилась з автоматичним морфологічним аналізом NLTK і працювала з промаркованим корпусом Brown. МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” іНСТИТУТ КОМП’ютерних НАУК та ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ Кафедра “Системи автоматизованого проектування” ЗВІТ до лабораторної роботи №5 ВИВЧЕННЯ БІБЛІОТЕКИ ПРИКЛАДНИХ ПРОГРАМ NLTK, ДЛЯ ОПРАЦЮВАННЯ ТЕКСТІВ ПРИРОДНОЮ МОВОЮ. АВТОМАТИЧНИЙ МОРФОЛОГІЧНИЙ АНАЛІЗ Виконала: студентка групи ПРЛ-12м Бак Тетяна Прийняв: Тимощук П. В. Львів-2008 МЕТА РОБОТА Вивчення основ програмування на мові Python. Ознайомлення з автоматичним морфологічним аналізом в NLTK. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ 1.1 Вступ. Виконуючи попередні лабораторні роботи слова оброблялися, як слова в загальному розумінні. Ми бачили що деякі розбіжності можна зменшити використовуючи нормалізацію, але подальші узагальнення не робилися. Розглядаючи частотний розподіл слова often фіксувалися слова які йдуть після цього слова і визначено що often часто виконує роль «модифікатора» дієслів. Дійсно, це слово належить до класу слів, які модифікують дієслова – adverbs. Для глибшого розуміння термінології розглянемо програму, яка для заданого слова знаходить інші слова які зустрічаються в тому самому контексті (listing1). Наприклад, для слова women будуть знайдені всі контексти в яких це слово зустрічається в корпусі і будуть знайдені інші слова які зустрічаються в такому контексті. Коли запустити на виконання функцію dist_sim() для певного переліку слів то отримаємо інші слова, які мають подібне розповсюдження. Для слова women такими словами будуть переважно іменники, для слова bought –дієслова, для over – прийменники, для the – артиклі. В загальному для назв цих груп слів вживаються терміни – класи слів, лексичні категорії, частини мови. Одною з відомих особливостей Броунівського корпусу є те, що всі слова в ньому промарковані (tagged) за їх частиномовною приналежністю. Тепер замість того щоб розглядати слова які йдуть після often можна аналізувати до якої частини мови вони належать. В таблиці 1 наведені перші вісім таких слів які впорядковані за частотою та з поясненням кожного тега. Бачимо, що більшість слів це дієслова. Таблиця 1.Частини мови слів Броунівського корпусу, які зустрічаються перед often .  1.2 Загальна інформація про автоматичний морфологічний аналіз в NLTK Деякі великі корпуси текстів такі як Броунівський(Brown) і частково Wall Street Journal містять морфологічну розмітку (позначенні частини мови всіх слів) і дозволяють працювати з цими даними. Файл морфологічно розміченого корпусу текстів переважно містить текст в наступному вигляді (Броунівський корпус). 1.2.1 Представлення тегів і читання морфологічно розміченого корпусу текстів. За домовленістю в NLTK промарковані слова (tokens) представляються з використанням типу даних – кортеж. Кортежі подібні до списків, але їх неможна змінювати. До елементів кортежу можна отримати доступ використовуючи їх індекси. 1.3 Класифікація слів. Іменники англійської мови можуть бути морфологічно складними. Наприклад books і women це множина. Слова з –ness суфіксом це іменники утворені з прикметників: happiness, illness. Суфікс –ment з’являється в деяких іменниках, які походять від дієслів: government, establishment. Дієслова англійської мови також можуть бути морфологічно складними. Наприклад теперішній тривалий час в дієсловах характеризується закінченням –ing і описує триваючу незавершену дію (falling, eating). Суфікс –ing також з’являється і у іменників, які походять від дієслів (the falling of the leaves (герундій)). В Броунівському корпусі вони маркуються як VBG. Минулий час в дієсловах часто характеризується закінченням –ed і описує завершену дію, маркується VBD. Загальні набори тегів часто охоплюють деяку морфологічно-синтаксичну інформацію – це є інформація про види морфологічного маркування, які отримують слова в залежності від їх синтаксичної ролі. Розглянемо, наприклад, вибрані різні граматичні форми слова “go” , які ілюструються в наступних реченнях. ТЕКСТ ПРОГРАМИ ***************************************1**************************************** >>> import nltk >>> from nltk import corpus >>> corpus.brown.tagged('b')[4] [('The', 'AT'), ('jury', 'NN'), ('said', 'VBD'), ('it', 'PPS'), ('did', 'DOD'), ('find', 'VB'), ('that', 'CS'), ('many', 'AP'), ('of', 'IN'), ("Georgia's", 'NP$'), ('registration', 'NN'), ('and', 'CC'), ('election', 'NN'), ('laws', 'NNS'), ('``', '``'), ('are', 'BER'), ('outmoded', 'JJ'), ('or', 'CC'), ('inadequate', 'JJ'), ('and', 'CC'), ('often', 'RB'), ('ambiguous', 'JJ'), ("''", "''"), ('.', '.')] >>> corpus.brown.tagged('d')[5] [('It', 'PPS'), ('recommended', 'VBD'), ('that', 'CS'), ('Fulton', 'NP'), ('legislators', 'NNS'), ('act', 'VB'), ('``', '``'), ('to', 'TO'), ('have', 'HV'), ('these', 'DTS'), ('laws', 'NNS'), ('studied', 'VBN'), ('and', 'CC'), ('revised', 'VBN'), ('to', 'IN'), ('the', 'AT'), ('end', 'NN'), ('of', 'IN'), ('modernizing', 'VBG'), ('and', 'CC'), ('improving', 'VBG'), ('them', 'PPO'), ("''", "''"), ('.', '.')] ***************************************2**************************************** >>> import nltk >>> from nltk import corpus >>> fd=nltk.FreqDist() >>> for (wd, tg) in corpus.brown.tagged('b')[3]: fd.inc(tg) >>> fd.max() 'NN' >>>tokens=tokenize.whitespace('I hate studying at school') >>>default_tagger=tag.Default('nn') >>>list(default_tagger.tag(tokens)) [('I' , 'nn'), ('hate', 'nn'), ('studying', 'nn'), ('at', 'nn'), ('school', 'nn')] Tag.accuracy(default_tagger, corpus.brown.tagger) ***************************************3**************************************** from nltk import corpus >>> fd=nltk.FreqDist() >>> for (wd, tg) in corpus.brown.tagged('b')[4]: if tg[:2]=='vb': fd.inc(wd + '/' + tg) >>> fd.sorted()[:15] ['went/vbd' , 'be/vb' , 'tell/vb' , 'done/vbn' , 'finished/vbd' , 'healed/vbd' , 'fakes/vbz' , 'run/vb' , 'goes/vbz' , 'been/vbn' , 'cursed/vbd' , 'fixed/vbd' , 'stridden/vbn' , 'struck/vbd , 'makes/vbz' ] ***************************************4**************************************** >>> import nltk >>> from nltk import tokenize >>> def build_wc_map(): cw_map=nltk.defaultdict(list) for item in corpus.brown.items: for sent in corpus.brown.tokenized(item): sent=[w.lower() for w in sent] for i in range(l, len(sent)-1): cw_map=[(sent[i-1],sent[i+1])], append(sent[i]) return nltk.invert_dict(cw_map) >>> def dist_sim(wc_map, word, num=10): if word in wc_map: contexts=set(wc_map[word]) fd=nltk.FreqDist(w for w in wc_map for c in wc_map[w] if c in contexts) return fd.sorted()[:num] return [] >>> wc_map=build_wc_map() >>>dist_sim(wc_map, 'world') ['time' , 'man' , 'number' , 'estate' , 'power' , 'universe' , 'star' , 'person' , 'jury' , 'future'] >>>dist_sim(wc_map, 'finished') ['thought' , 'meant' , 'used' , 'took' , 'spoilt' , 'paid' , 'lit' , 'met' , 'used' , 'killed'] >>>dist_sim(wc_map, 'in' ) ['for' , 'between', 'for' , 'out' , 'and', 'at' , 'among' , 'to' , 'across' , 'with'] >>>dist_sim(wc_map, 'her') ['his' , 'and' , 'their' , 'this' , 'that' , 'our' , 'no' , 'some', 'your' , 'the'] ***************************************5**************************************** >>>import nltk >>> from nltk import corpus >>> def findtags(tag_prefix, tagged_text): cfd=nltk.ConditionalFreqDist() for (wd, tg) in tagged_text: if tg.startswith(tag_prefix): cfd[tg].inc(wd) tagdict={} for tg in cfd.conditions(): tagdict[tg]=cfd[tg].sorted()[:5] return tagdict >>> tagdict=findtags('nn', corpus.brown.tagged('b')) >>>for tg in sorted(tagdict): print tg, tgdict[tg] nn ['woman' , 'month' , 'duty' , 'child' , 'world'] nn$ ['day’s', 'state’s' , 'world’s' , 'nation’s' , 'child’s'] nn$-hl ['Grove’s', 'Jury’s' ] nn$-tl ['Minister’s' , 'General’s' , 'Admiral’s' , 'President’s'] nns ['women' , 'states' , 'cities' , 'fees'] nns$ ['women’s' , 'men’s' , 'children’s'] nn-tl ['Governor' , 'City' , 'State' , 'President'] ***************************************6**************************************** >>> patterns=[ (r'.*ing$', 'vbg'), # gerunds (r'.*ed$', 'vbd'), # simple past (r'.*es$', 'vbz'), # 3rd singular present (r'.*ould$', 'md'), # modals (r'.*\'s$', 'nn$'), # possessive nouns (r'.*s$', 'nns'), # plural nouns (r'^-?[0-9]+(.[0-9]+)?$', 'cd'), # cardinal numbers (r'.*', 'nn') # nouns (default) ] >>>regexp_tagger = tag.Regexp(patterns) >>>list(regexp_tagger.tag(brown.raw('a')))[3] [('``', '``'), ('Only', 'RB'), ('a', 'AT'), ('relative', 'JJ'), ('handful', 'NN'), ('of', 'IN'), ('such', 'JJ'), ('reports', 'NNS'), ('was', 'BEDZ'), ('received', 'VBN'), ("''", "''"), (',', ','), ('the', 'AT'), ('jury', 'NN'), ('said', 'VBD'), (',', ','), ('``', '``'), ('considering', 'IN'), ('the', 'AT'), ('widespread', 'JJ'), ('interest', 'NN'), ('in', 'IN'), ('the', 'AT'), ('election', 'NN'), (',', ','), ('the', 'AT'), ('number', 'NN'), ('of', 'IN'), ('voters', 'NNS'), ('and', 'CC'), ('the', 'AT'), ('size', 'NN'), ('of', 'IN'), ('this', 'DT'), ('city', 'NN'), ("''", "''"), ('.', '.')] ВИСНОВОК: На даній лабораторній роботі я продовжив знайомство з мовою програмування Python, а також ознайомився з автоматичним морфологічним аналізом NLTK і працював з промаркованим корпусом Brown.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!