МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
іНСТИТУТ КОМП’ютерних НАУК та ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ
Кафедра “Системи автоматизованого проектування”
ВИВЧЕННЯ БІБЛІОТЕКИ ПРИКЛАДНИХ ПРОГРАМ NLTK, ДЛЯ ОПРАЦЮВАННЯ ТЕКСТІВ ПРИРОДНОЮ МОВОЮ.
ОБРОБКА ОКРЕМИХ СЛІВ (підрахунок слів та лексична база даних англійської мови).
Методичні вказівки до лабораторної роботи № 4
з дисципліни “Комп’ютерна лінгвістика”
для студентів спеціальності 7.030.505 “Прикладна лінгвістика”
та магістрів за фахом 8.030.505 “Прикладна лінгвістика”.
Затверджено
на засіданні кафедри
“Системи автоматизованого проектування”
Протокол № 8 від 21.XI.2005 р.
на засіданні методичної ради ІКНІ
Протокол № 4-05/06 від 1.XII.2005 р.
ВАК № 1769 від 12.XII.2005 р.
Львів-2005
ВИВЧЕННЯ БІБЛІОТЕКИ ПРИКЛАДНИХ ПРОГРАМ NLTK, ДЛЯ ОПРАЦЮВАННЯ ТЕКСТІВ ПРИРОДНОЮ МОВОЮ. ОБРОБКА ОКРЕМИХ СЛІВ (підрахунок слів та лексична база даних англійської мови). Методичні вказівки до лабораторної роботи № 4 з дисципліни “Комп’ютерна лінгвістика” для студентів спеціальності 7.030.505 “Прикладна лінгвістика” та магістрів за фахом 8.030.505 “Прикладна лінгвістика” для стаціонарної та заочної форм навчання/Укл. А.Б.Романюк. - Львів: Національний університет ”Львівська політехніка”, 2005. - 24с.
Укладачі: Романюк А. Б., канд. техн. наук, ст. викладач
Відповідальний за випуск: Лобур М. В., доктор техн. наук, професор
Рецензенти: Каркульовський В. І., канд. техн. наук, доцент
Шуневич Б.І., канд. філол. наук, доцент.
МЕТА РОБОТИ
Вивчення основ програмування на мові Python.
Ознайомлення з способами підрахунку слів.
Ознайомлення з лексичною базою даних англійської мови WordNet.
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
1.1 Підрахунок слів. Типові програми.
Для підрахунку частоти слів у тексті (tokens і type) в Python часто використовується наступна програма
В рядку 1 здійснюється ініціалізація словника. Далі для кожного сова в кожному реченні відбувається збільшення відповідного лічильника (рядок 2). Для виведення вмісту словника на екран використовуються ітерації за ключами словника і записи словника виводяться на екран (рядок 3, виводяться перші впорядковані за абеткою 5 записів).
1.1.1 Частотний розподіл.
Результати отримані в попередньому прикладі відповідають певній абстрактній структурі – набору елементів і їх частот – називають частотним розподілом. Так як при роботі з текстом часто потрібно здійснювати подібні обчислення в NLTK реалізовано окремий клас FreqDist(). Використовуючи цей клас приклад можна переписати більш зручно наступним чином:
Деякі методи властиві частотному розподілу і реалізовані в NLTK наведені в таблиці 1
Таблиця1
Отримані результати не недто цікаві. Можливо більш інформативним був би список найчастотніших слів (tokens). Об’єкт FreqDist є певного виду словником і тому можна легко побудувати пари ключ-значення і відсортувати їх по спаданню, як показано нижче:
Note the arguments of the sorted() function (line `): itemgetter(1) returns a function that can be called on any sequence object to return the item at position 1; reverse=True performs the sort in reverse order. Together, these ensure that the word with the highest frequency is listed first. This reversed sort by frequency is such a common requirement that it is built into the FreqDist object. Listing demonstrates this, and also prints rank and cumulative frequency.
Unfortunately the output in Listing is surprisingly dull. A mere handful of tokens account for a third of the text. They just represent the plumbing of English text, and are completely uninformative! How can we find words that are more indicative of a text? As we will see in the exercises for this section, we can modify the program to discard the non-content words. In the next section we see another approach.
Отримані результати є малоінформативними, третину списку займають окремі символи англійської мови, які є допоміжними і не дають ніякої інформації про текст. Потрібно модифікувати програму для видалення неінформативних слів.
1.1.2 Стилістика
Стилістика це доволі широкий термін який покриває (відноситься) і до літературних жанрів і до різноманітних випадків вживання. Можна проаналізувати набір документів (стів), які згруповапні за жанрами і спробувати дізнатися якусь інформацію про використання слів. Наприклад таблиця 2 показує кількість різних (за часовим параметром) модальних дієслів в різних частинах корпусу.
Зауважимо, що найбільшу частоту в жанрі репортажу має модальне дієслово will, вказуючи нам на майбутнє, разом з тим найбільш частотним дієсловом в жанрі романтика є could що вказує на можливість.
Можна також виміряти лексичну різноманітність жанру обчисливши співвідношення типів слів і tokens слів як показано в таблиці 3. Жанри з нижчою різноманітністю мають більшу кількість token на тип, так гумористична проза майже вдвічі лексично бідніша ніж романтична проза.
Можна здійснювати різноманітні дослідження просто підраховуючи слова. Дійсно одним з напрямків корпусної лінгвістики є підрахунок і обробка результатів підрахунку слів.
Таблиця 2
Таблиця 3
1.1.3 Лексична дисперсія.
Розподіл tokens слів змінюється по тексту. Можна візуалізувати такий розподіл. Наприклад розглянемо як згадуються головні герої роману Джейн Остін (Чуття і чутливісить) Elinor, Marianne, Edward і Willoughby. Наступний рисунок 1 містить чотири рядки, один на кожне власне імя. Кожен рядок містить набір ліній, які відповідають позиції слова у тексті.
Рис.1.
Як бачимо Elinor і Marianne зустрічаються рівномірно по всьому тексту тоді як Edward і Willoughby зявляються окремо. Побудувати таке зображення дозволяє наступна програма:
1.1.4 Порівняння довжини слів в різних мовах.
Також можна використати частотний розподіл для перевірки визначення розподілу довжини слів у корпусі. Для кожного слова визначаємо його довжину і збільшуємо лічильник, який відповідає словам з даною частотою.
Тепер можна викликати цю функцію і вивести на екран розподіл довжин слів. Бачимо що найбільш частотними для англійської мови є слова з трьох символів а для фінської 5-6 символів.
Подібні дослідження є доволі цікавими і наступний приклад показує подібний розподіл але на більшому наборі мов (Декларація прав людини перекладена на 300 мов). Зауважимо, що назви розділів корпусу містять інформацію про кодування символів (використовується кодування ISO Latin-1). Результати роботи програми представлені на рис.2.
Рис. 2
1.1.5 Генерація тексту певного стилю.
Частотні розподіли дозволяють проводити підрахунок кількості вживання кожного слова в тексті. Узагальнимо цю ідею, щоб проаналізувати розповсюдження слів в певному контексті. Умовний вираз частотний розподіл це набір частотних розподілів, кожен один для іншої умови. За умову приймемо попереднє слово. У наступні програмі визначена функція train_model() яка використовує ConditionalFreqDist() щоб перерахувати слова, в залежності від контексту, визначеного попереднім словом (запам'ятовується в prev). Ця функція переглядає корпус, збільшуючи відповідний лічильник, і оновлюючи значення, яке відповідає попередньому слову.
Функція generate_model() містить простий цикля, який генерує текст: встановлюємо початковий контекст і програма виберає слово, яке найчастіше зустрічається в цьому контексті як наше наступне слово (використовуючи метод max()), і яке потім використовується слово як новий контекст. Цей простий підхід до генерації тексту швидко приводить до зациклювання, потрібен інший метод для вибору наступного слова серед доступних слів.
1.1.6 Колокації
Колокації це пари слів, які зустрічаються частіше ніж окремі слова в тексті. Можна знайти колокації підрахувавши, як часто пари слів зустрічаються в тексті порівняно з загальною кількістю вживань цих слів у тексті. Наступна програма здійснює такі підрахунки (стор.8).
1.2 WordNet – лексична база даних англійської мови
WordNet це семантично орієнтований словник англійської мови, подібний до традиційних тезаурусів але з багатою структурою. У WordNet слова групуються у набори синонімів – синсети, кожен із своїм визначенням і зв’язками з іншими син сетами. WordNet 3.0 розповсюджується разом з NLTK і містить 145000 синсетів. Хоча WordNet розроблявся для психолінгвістики цей словник широко використовується в NLP та в задачах інформаційного пошуку. Розробки для інших мов проводяться на основі документації яка наведена HYPERLINK "http://www.globalwordnet.org/" http://www.globalwordnet.org/.
1.2.1 Значення і синоніми
Розглянемо наступне речення:
Якщо замінити слово motorcar на automobile зміст речення не зміниться.
Можна вважати що оскіли заміна слів не вплинула на зміст речень то ці слова синоніми. Для одержання значення слова потрібно вибрати до якої частини мови воно належить. WordNet містить чотири словники (іменники, дієслова, прикметники, прислівники ). Знайдемо слово motorcar у словнику іменників:
Змінна car тепер прив’язана до об’єкту слово. Слова часто мають більше ніж одне значення кожне з яких представлено у синсеті. Слово motorcar має одне значення, що можна перевірити використавши функцію len(). Можна знайти синсет слова і слова які він містить а також переглянути тлумачення слова і приклад вживання.
Деякі слова можуть входити у декілька синсетів.
1.2.2 Ієрархія в WordNet
Синсети відповідають абстрактним поняттям, які можуть мати або не мати відповідних слів. Ці поняття зв’язуються разом в ієрархії. Деякі поняття Entity, State, Event – є загальними і їх називають унікальними початковими поняттями. Інші є більше специфічними. Частина ієрархії понять наведена на рис.3. Лінії між вузлами вказують на зв’язки (гіперонім\гіпонім), пунктирна лінія вказує, що artefact не є безпосереднім гіперонімом motorcar.
Рис.3. Фрагмент ієрархії понять
WordNet дозволяє легко переміщатися між поняттями. Наприклад для поняття motorcar ми можемо переглянути поняття які є більш специфічними (гіпонім). Наступний приклад демонструє один із методів такого переміщення:
Аналогічно можна піднятися по ієрархії і переглянути більш широке поняття ніж motorcar(гіперонім)
Можна знайти гіперонім гіпероніма. Фактично від кожного синсета можна прослідкувати шлях до унікального початкового поняття. Синсети мають метод tree() для відтворення всієї структури.
Подібний метод closure() створює плоску версію цієї структури і виключає повторення. Обидві ці функції мають аргумент depth , який дозволяє обмежувати кількість кроків (це важливо коли використовуються зв’язки без обмежено - similar). Таблиця 4 містить список найбільш важливих типів зв’язків, які реалізовані у WordNet. З допомогою функції dir(wordnet) можна переглянути повний список.
Таблиця 4
Використовуючи ітерації for word in synset а також перевіряючи за допомогою if word in wordnet. наявність слова у словнику переглянемо, які слова власні назви тварин можуть використовуватись, як дієслова(). (Глибина пошуку обмежена 4 кроками )
1.2.3 Оцінка подібності в WordNet
Семантична подібність двох понять пов’язана з довжиною між цими поняттями в WordNet . Пакет wordnet містить багато засобів для здійснення таких вимірювань. Наприклад path_similarity (присвоює значення від 0 до 1) базується на найкоротшому шляху який поєднує поняття за ієрархією гіперонімів (-1 означає що шлях (спільний гіперонім) не знайдено).
ПОРЯДОК ВИКОНАННЯ РОБОТИ
2. <Pick a text, and explore the dispersion of particular words. What does this tell you about
the words, or the text?
3. < The program in Listing 2.2 used a dictionary of word counts. Modify the code that
creates these word counts so that it ignores non-content words. You can easily get a list of
words to ignore with:
>>> ignored_words = nltk.corpus.stopwords.words(’english’)
4. < Modify the generate_model() function in Listing 2.5 to use Python’s random.
choose() method to randomly pick the next word from the available set of words.
5. < The demise of teen language: Read the BBC News article: UK’s Vicky Pollards ’left
behind’ http://news.bbc.co.uk/1/hi/education/6173441.stm. The article
gives the following statistic about teen language: “the top 20 words used, including
yeah, no, but and like, account for around a third of all words.” Use the program in
Listing 2.2 to find out how many word types account for a third of all word tokens, for
a variety of text sources. What do you conclude about this statistic? Read more about
this on LanguageLog, at http://itre.cis.upenn.edu/~myl/languagelog/
archives/003993.html.
6. NWrite a program to find all words that occur at least three times in the Brown Corpus.
7. N Write a program to generate a table of token/type ratios, as we saw in Table 2.4.
Include the full set of Brown Corpus genres (nltk.corpus.brown.categories
()). Which genre has the lowest diversity (greatest number of tokens per type)? Is this
what you would have expected?
8. NModify the text generation program in Listing 2.5 further, to do the following tasks:
a) Store the n most likely words in a list lwords then randomly choose a word
from the list using random.choice().
b) Select a particular genre, such as a section of the Brown Corpus, or a genesis
translation, one of the Gutenberg texts, or one of theWeb texts. Train the model
on this corpus and get it to generate random text. You may have to experiment
with different start words. How intelligible is the text? Discuss the strengths
and weaknesses of this method of generating random text.
c) Now train your system using two distinct genres and experiment with generating
text in the hybrid genre. Discuss your observations.
9. N Write a program to print the most frequent bigrams (pairs of adjacent words) of a text,
omitting non-content words, in order of decreasing frequency.
10. NWrite a program to create a table of word frequencies by genre, like the one given above
for modals. Choose your own words and try to find words whose presence (or absence) is
typical of a genre. Discuss your findings.
11. N Zipf’s Law: Let f(w) be the frequency of a word w in free text. Suppose that all the
words of a text are ranked according to their frequency, with the most frequent word first.
Zipf’s law states that the frequency of a word type is inversely proportional to its rank (i.e.
f.r = k, for some constant k). For example, the 50th most common word type should occur
three times as frequently as the 150th most common word type.
a) Write a function to process a large text and plot word frequency against word
rank using pylab.plot. Do you confirm Zipf’s law? (Hint: it helps to use a
logarithmic scale). What is going on at the extreme ends of the plotted line?
b) Generate random text, e.g. using random.choice("abcdefg "), taking
care to include the space character. You will need to import random first.
Use the string concatenation operator to accumulate characters into a (very)
long string. Then tokenize this string, and generate the Zipf plot as before, and
compare the two plots. What do you make of Zipf’s Law in the light of this?
12. N Exploring text genres: Investigate the table of modal distributions and look for other
patterns. Try to explain them in terms of your own impressionistic understanding of
the different genres. Can you find other closed classes of words that exhibit significant
differences across different genres?
13. NWrite a function tf() that takes a word and the name of a section of the Brown Corpus
as arguments, and computes the text frequency of the word in that section of the corpus.
1. <Familiarize yourself with theWordNet interface, by reading the documentation available
via help(wordnet). Try out the text-based browser, wordnet.browse().
2. < Investigate the holonym / meronym relations for some nouns. Note that there are
three kinds (member, part, substance), so access is more specific, e.g., wordnet.
MEMBER_MERONYM, wordnet.SUBSTANCE_HOLONYM.
1. < The polysemy of a word is the number of senses it has. Using WordNet, we can
determine that the noun dog has 7 senses with: len(nltk.wordnet.N[’dog’]).
Compute the average polysemy of nouns, verbs, adjectives and adverbs according to
WordNet.
2. N What is the branching factor of the noun hypernym hierarchy? (For all noun synsets
that have hyponyms, how many do they have on average?)
3. N Define a function supergloss(s) that takes a synset s as its argument and returns
a string consisting of the concatenation of the glosses of s, all hypernyms of s, and all
hyponyms of s.
4. NWrite a program to score the similarity of two nouns as the depth of their first common
hypernym.
Ознайомитися з теоретичними відомостями.
Виконати приклади, які використовуються в теоретичних відомостях.
Виконати наступні вправи.
Програма з пункту 1.1.1 (стор.4) використовує словник для підрахунку слів. Модифікувати цю програму таким чином щоб лічильник не враховував неінформативних слів. Список неінформативних слів можна отримати наступним чином .
Модифікувати функцію generate_model() використовуючи random.choose() метод для випадкового вибору наступного слова з набору доступних слів.
Напишіть програму, яка виводить на екран пари слів, які найчастіше зустрічаються в тексті, виключивши неінформативні слова і впорядкувавши їх по спаданню за частотою.
Напишіть програму для створення таблиці частотності слів для різних жанрів (подібно до модальних дієслів). Виберіть свої слова і знайдіть слова чия присутність або відсутність є типовою для певного жанру.
Вивчити інтерфейс WordNet використовуючи файл допомоги help(wordnet) та текстовий браузер wordnet.browse()
Дослідити зв’язки голонім\меронім для іменників, використовуючи інформацію, що для доступу до більш специфічних понять є три види (member, part, substance). Наприклад wordnet.MEMBER_MERONYM, wordnet.SUBSTANCE_HOLONYM.
Виконайте аналіз подібності для наступних пар слів та впорядкуйте пари за зростанням подібності
car-automobile, gem-jewel, journey-voyage, boy-lad, coast-shore, asylum-madhouse, magicianwizard, midday-noon, furnace-stove, food-fruit, bird-cock, bird-crane, tool-implement, brothermonk, lad-brother, crane-implement, journey-car, monk-oracle, cemetery-woodland, food-rooster, coast-hill, forest-graveyard, shore-woodland, monk-slave, coast-forest, lad-wizard, chord-smile, glass-magician, rooster-voyage, noon-string.
Підготувати і оформити звіт.
ЗМІСТ ЗВІТУ
5.1 Титульний аркуш.
5.2 Мета роботи.
5.3 Короткі теоретичні відомості.
5.4 Тексти програм на мові Python.
5.5 Висновок.
ЛІТЕРАТУРА
Steven Bird, Ewan Klein, Edward Loper Introduction to Natural Language Processing. 2001-2007 University of Pennsylvania.
Г. Россум, Ф.Л.Дж. Дрейк, Д.С. Откидач, М. Задка, М. Левис, С.Монтаро, Э.С.Реймонд, А.М.Кучлинг, М.-А.Лембург, К.-П.Йи, Д.Ксиллаг, Х.ГПетрилли, Б.А.Варсав, Дж.К.Ахлстром, Дж.Рокинд, Н.Шеменон, С.Мулендер. Язык программирования Python./ 2001 – 452c.
Сузи Р. А. Язык программирования Python.- 206с.
David Mertz Text Processing in Python Addison WesleyBiber, 2003 - 544.
ІНТЕРНЕТ ПОСИЛАННЯ
HYPERLINK "http://www.nltk.org" http://www.nltk.org
HYPERLINK "http://python.org" http://python.org
НАВЧАЛЬНЕ ВИДАННЯ
МЕТОДИЧНІ ВКАЗІВКИ
до лабораторної роботи № 4
з дисципліни “Комп’ютерна лінгвістика”
для студентів спеціальності 7.030.505 “Прикладна лінгвістика”
та магістрів за фахом 8.030.505 “Прикладна лінгвістика”.
для стаціонарної та заочної форм навчання
Укладачі: Романюк Андрій Богданович