Обробка окремих слів: підрахунок слів та лексична база даних англійської мови.

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” іНСТИТУТ КОМП’ютерних НАУК та ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ Кафедра “Системи автоматизованого проектування”  Звіт до лабораторної роботи № 4 «Обробка окремих слів: підрахунок слів та лексична база даних англійської мови» з дисципліни “Комп’ютерна лінгвістика” Виконала: ст. гр. ПРЛ-1 Львів-2008 Мета: вивчення основ програмування на мові Python, ознайомлення зі способами підрахунку слів та лексичною базою даних англійської мови WordNet. Результати отримані в попередньому прикладі, які відповідають певній абстрактній структурі – набору елементів і їх частот – називають частотним розподілом. Оскільки, при роботі з текстом часто потрібно здійснювати подібні обчислення то в NLTK реалізовано окремий клас FreqDist(). Використовуючи цей клас попередній приклад можна переписати наступним чином:  В таблиці 1 наведені, реалізовані в NLTK, методи властиві частотному розподілу. Таблиця1  Отримані, у попередніх прикладах, результати не надто цікаві. Можливо більш інформативним буде список найчастотніших слів (tokens). Об’єкт FreqDist є певного виду словником і тому можна легко побудувати пари ключ-значення і відсортувати їх по спаданню, як показано нижче:  Зазначимо, що функція sorted() повертає новий відсортований список тем, які є її першим аргументом. Другий аргумент key визначає функцію одного аргументу, яка використовується для встановлення ключа, за яким будуть порівнюватися елементи списку. itemgetter(1) вказує на те, що порівнюватися елементи списку, які є кортежами, будуть за елементами кортежу з індексом 1. Третій аргумент reverse=True вказує на те, що сортування буде проводитись в зворотному порядку. В результаті буде отримано список в якому слова з максимальною частотою будуть першими. Стилістика, це доволі широкий термін, який відноситься і до літературних жанрів і до інших різноманітних випадків вживання мови. Можна проаналізувати набір документів (слів), які згруповані за жанрами і спробувати дізнатися якусь інформацію про використання слів. Наприклад таблиця 2 показує кількість різних (за часовим параметром) модальних дієслів в різних частинах корпусу. Зауважимо, що найбільшу частоту в жанрі репортажу має модальне дієслово will, вказуючи нам на майбутнє, разом з тим найбільш частотним дієсловом в жанрі романтика є could що вказує на можливість. Можна також виміряти лексичну різноманітність жанру обчисливши співвідношення типів слів і tokens слів, як показано в таблиці 3. Жанри з нижчою різноманітністю мають більше значення відношення token на тип. Гумористична проза майже вдвічі лексично бідніша ніж романтична проза. Можна здійснювати різноманітні дослідження здійснюючи подібні підрахунки слів. Одним з напрямків корпусної лінгвістики є підрахунок і обробка результатів підрахунку слів. Таблиця 2  Таблиця 3  WordNet, це семантично орієнтований словник англійської мови, подібний до традиційних тезаурусів але з більш багатою структурою. У WordNet слова групуються у набори синонімів – синсети, кожен із своїм визначенням і зв’язками з іншими синсетами. WordNet 3.0 розповсюджується разом з NLTK і містить 145000 синсетів. Хоча WordNet розроблявся для психолінгвістики - цей словник широко використовується в NLP та в задачах інформаційного пошуку Розглянемо наступне речення:  Якщо замінити слово motorcar на automobile зміст речення не зміниться.  Можна вважати, що оскільки заміна слів не вплинула на зміст речень то ці слова синоніми. Для одержання значення слова потрібно вибрати до якої частини мови воно належить. WordNet містить чотири словники (іменники, дієслова, прикметники, прислівники ). Завдання 5. >>>import nltk >>>from nltk import corpus >>>sl=[] >>>for categories in nltk.corpus.brown.categories(): ct = categories sl=[] for words in nltk.corpus.brown.words(categories=ct): sl.append(words) print categories+’:’+’tokens_’,len(nltk.corpus.brown.words(categories=ct)), ‘types_’,len(set(sl)) a: tokens_100554 types_14394 b: tokens_61604 types_9890 c: tokens_40704 types_8626 d: tokens_39399 types_6373 e: tokens_82345 types_11935 f: tokens_110299 types_14503 g: tokens_173096 types_18421 h: tokens_70117 types_8181 j: tokens_181888 types_16859 k: tokens_68488 types_9302 l: tokens_57169 types_6982 m: tokens_14470 types_3233 n: tokens_69342 types_8874 p: tokens_70022 types_8452 r: tokens_21695 types_5017 Завдання 9. >>> from operator import itemgetter >>>def train_model(text): i_w = list(nltk.corpus.stopwords.words(‘english’)) cfdist = nltk.ConditionalFreqDist() colloc = () prev = None for word in text: word = word.lower() if word not in i_w: if prev not in i_w: cfdist[prev].inc(word) prev = word for condition in cfdist.conditions(): for i in range(len(list(cfdist[condition].sorted()))): colloc[condition, list(cfdist[condition].sorted())[i],sorted(list(cfdist[condition]. values()), reverse = True) [i]] =’’ a = sorted(colloc,key = itemgetter(2),reverse=True) for i in range(10): print a[i] >>>train_model (nltk.corpus.gutenberg.words (‘austen-persuasion.txt‘)) ('captain', 'wentworth', 196) ('mr', 'elliot', 174) ('lady', 'russell', 147) ('sir', 'walter', 131) ('mrs', 'clay', 66) ('mrs', 'musgrove', 66) ('mrs', 'smith', 64) ('captain', 'benwick', 56) ('anne', "'", 50) ('miss', 'elliot', 48) Завдання 10. >>>def andy (words,word): n=0 for i in words: if i = = word: n+=1 print n, word >>>andy (nltk.corpus.brown.words(categories=‘p‘), ‘love‘) 32 love >>> andy (nltk.corpus.brown.words(categories=‘e‘), ‘love‘) 6 love >>> andy (nltk.corpus.brown.words(categories=‘p‘), ‘experience‘) 4 experience >>> andy (nltk.corpus.brown.words(categories=‘e‘), ‘experience‘) 20 experience >>> Завдання 11. >>> def freq (h, num=50): g= nltk.corpus.brown.words(categories=h) fd=nltk.FreDist (g) commulative= 0.0 for word in fd.sorted() [: num] : cumulative= fd[word]* 1000/fd.N() print “%3.3d%% %s” % (cumulative,word) >>>freg (‘a‘,10) 055% the 051% , 040% . 028% of 021% and 021% to 019% a 018% in 009% for 008% The >>> Завдання 13. >>> import nltk >>> from nltk import wordnet >>> print (wordnet.N['eye'][0].tree(wordnet.PART_MERONYM)) [{noun: eye, oculus, optic}, [{noun: visual_system}], [{noun: face, human_face}, [{noun: head, caput}, [{noun: body, organic_structure, physical_structure}], [{noun: animal, animate_being, beast, brute, creature, fauna}]], [{noun: homo, man, human_being, human}]]] >>> print (wordnet.N['eye'][0].tree(wordnet.SUBSTANCE_MERONYM)) [{noun: eye, oculus, optic}] >>> print (wordnet.N['eye'][0].tree(wordnet.MEMBER_MERONYM)) [{noun: eye, oculus, optic}] >>> print (wordnet.N['eye'][0].tree(wordnet.MEMBER_HOLONYM)) [{noun: eye, oculus, optic}] >>> print (wordnet.N['eye'][0].tree(wordnet.SUBSTANCE_HOLONYM)) [{noun: eye, oculus, optic}] >>> print (wordnet.N['eye'][0].tree(wordnet.PART_HOLONYM)) [{noun: eye, oculus, optic}, [{noun: choroid, choroid_coat}], [{noun: ciliary_body}], [{noun: eyelid, lid, palpebra}, [{noun: eyelash, lash, cilium}], [{noun: conjunctiva}]], [{noun: canthus}], [{noun: epicanthus, epicanthic_fold}], [{noun: nictitating_membrane, third_eyelid}], [{noun: conjunctiva}], [{noun: eyeball, orb}], [{noun: ocular_muscle, eye_muscle}], [{noun: cornea}], [{noun: uvea}], [{noun: uveoscleral_pathway}], [{noun: iris}, [{noun: pupil}]], [{noun: lens, crystalline_lens, lens_of_the_eye}, [{noun: lens_cortex, cortex}], [{noun: lens_capsule}]], [{noun: central_artery_of_the_retina, arteria_centralis_retinae}], [{noun: ciliary_artery, arteria_ciliaris}], [{noun: lacrimal_artery, arteria_lacrimalis}], [{noun: lacrimal_vein, vena_lacrimalis}], [{noun: lacrimal_apparatus}, [{noun: lacrimal_gland, lachrymal_gland, tear_gland}], [{noun: lacrimal_duct, lachrymal_duct, tear_duct}], [{noun: lacrimal_sac, tear_sac, dacryocyst}]], [{noun: retina}, [{noun: neuroepithelium}], [{noun: fovea, fovea_centralis}], [{noun: parafovea}], [{noun: macula, macula_lutea, macular_area, yellow_spot}], [{noun: visual_cell}], [{noun: blind_spot, optic_disc, optic_disk}], [{noun: cone, cone_cell, retinal_cone}, [{noun: iodopsin}]], [{noun: rod, rod_cell, retinal_rod}, [{noun: visual_purple, rhodopsin, retinal_purple}]]], [{noun: sclera, sclerotic_coat}], [{noun: pupillary_sphincter, musculus_sphincter_pupillae}], [{noun: aperture}]] Завдання 16. >>> import nltk >>> from nltk import wordnet >>> wordnet.N['desk'][0].path_similarity(wordnet.N['table'][1]) 0.5 >>> wordnet.N['thumb'][0].path_similarity(wordnet.N['finger'][1]) 0.066666666666666666 >>> wordnet.N['book'][0].path_similarity(wordnet.N['script'][1]) 0.066666666666666666 >>> wordnet.N['eye'][0].path_similarity(wordnet.N['ear'][1]) 0.058823529411764705 >>> wordnet.N['sky'][0].path_similarity(wordnet.N['earth'][1]) 0.125 >>> wordnet.N['sky'][0].path_similarity(wordnet.N['lip'][1]) 0.090909090909090912 >>> wordnet.N['earth'][0].path_similarity(wordnet.N['planet'][1]) -1 >>> wordnet.N['road'][0].path_similarity(wordnet.N['way'][1]) 0.076923076923076927 >>> wordnet.N['girl'][0].path_similarity(wordnet.N['woman'][1]) 0.25 >>> wordnet.N['boy'][0].path_similarity(wordnet.N['man'][1]) 0.16666666666666666 >>> wordnet.N['wall'][0].path_similarity(wordnet.N['floor'][1]) 0.25 >>> wordnet.N['house'][0].path_similarity(wordnet.N['hut'][1]) 0.20000000000000001 >>> wordnet.N['house'][0].path_similarity(wordnet.N['government'][1]) 0.071428571428571425 >>> wordnet.N['pig'][0].path_similarity(wordnet.N['art'][1]) 0.045454545454545456 >>> wordnet.N['pig'][0].path_similarity(wordnet.N['flower'][1]) 0.058823529411764705 Висновок: на цій лабораторній роботі я ознайомилася з бібліотекою прикладних програм NLTK для опрацювання текстів природною мовою, я також навчилася працювати зі семантично орієнтованим словником англійської мови WordNet, підрахувати частоту появи певних слів у тексті, визначати наявність певних слів у текстах різних жанрів, підраховувати частоту появи словосполучень у тексті.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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