- •Мета робота
- •Виконання лабораторних робіт починаємо з:
- •Короткі теоретичні відомості
- •1. Клас FreqDist для простих статистичних досліджень
- •1.1.Вибір слів з тексту
- •Виконати самостійно:
- •1.2. Колокації та біграми
- •2. Доступ до корпусів текстів
- •2.1. Корпус Гутенберга
- •2.1.1. Конкорданс
- •2.1.2. Статистичні дані про текст
- •2.2. Текст з Інтернету
- •2.3. Корпус Brown
- •Приклади текстів для кожного з жанрів корпуса Brown.
- •Виконати самостійно!
- •2.4. Корпус інформаційного агентства Рейтер.
- •2.5. Корпус інаугураційних примов президентів сша.
- •2.6. Анотовані (розмічені) корпуси текстів.
- •2.7. Корпуси іншомовних текстів.
- •3. Структура корпусів текстів.
- •3.1. Засоби nltk
- •Основні функції nltk для роботи з корпусами.
- •3.2. Доступ до власних корпусів текстів.
- •4. Умовний частотний розподіл. Клас ConditionalFreqDist.
- •4.1 Умови і події.
- •4.2 Підрахунок слів для окремих жанрів.
- •Функції побудови та відображення умовних частотних розподілів.
- •Додаток в Перелік корпусів тексті, які розповсюджуються разом з nltk.
- •Порядок виконання роботи
- •Варіанти завдань
- •Література
- •Інтернет посилання
- •Методичні вказівки
1.1.Вибір слів з тексту
Спробуємо знайти найдовші слова сподіваючись що вони є більш інформативними:
>>> V = set(text1)
>>> long_words = [w for w in V if len(w) > 15]
>>> sorted(long_words)
['CIRCUMNAVIGATION', 'Physiognomically', 'apprehensiveness', 'cannibalistically', 'characteristically', 'circumnavigating', 'circumnavigation', 'circumnavigations', 'comprehensiveness', 'hermaphroditical', 'indiscriminately', 'indispensableness',
'irresistibleness', 'physiognomically', 'preternaturalness', 'responsibilities', 'simultaneousness', 'subterraneousness', 'supernaturalness', 'superstitiousness', 'uncomfortableness', 'uncompromisedness', 'undiscriminating', 'uninterpenetratingly']
Для кожного слова зі списку V здійснюється перевірка чи його довжина є більша ніж 15 символів, всі інші слова ігноруються.
Крім підрахунку окремих слів цікаво також здійснити підрахунок довжин слів в тексті використовуючи FreqDist.
>>> [len(w) for w in text1] # будуємо список довжин слів в тексті
[1, 4, 4, 2, 6, 8, 4, 1, 9, 1, 1, 8, 2, 1, 4, 11, 5, 2, 1, 7, 6, 1, 3, 4, 5, 2, ...]
>>> fdist = FreqDist([len(w) for w in text1]) # підрахунок кількості вживань слів різної довжини
>>> fdist # розподіл в якому довжині слова відповідає кількість таких слів в тексті
<FreqDist with 260819 outcomes>
>>> fdist.keys()
[3, 1, 4, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20]
Бачимо, що в тексті зустрічаються слова різної довжини від 1 до 20 символів. Частоту різних довжин слів можна переглянути:
>>> fdist.items()
[(3, 50223), (1, 47933), (4, 42345), (2, 38513), (5, 26597), (6, 17111), (7, 14399),
(8, 9966), (9, 6428), (10, 3528), (11, 1873), (12, 1053), (13, 567), (14, 177),
(15, 70), (16, 22), (17, 12), (18, 1), (20, 1)]
>>> fdist.max()
3
>>> fdist[3]
50223
>>> fdist.freq(3)
0.19255882431878046
Найчастіше зустрічаються слова з довжиною 3 символи і такі слова становлять близько 20% всього тексту. Можна здійснити аналіз довжин слів для текстів різних жанрів, авторів та мов.
Виконати самостійно:
Виконати попередній приклад для інших текстів змінюючи довжину слів. Результати порівняти і пояснити.
Повертаючись до задачі пошуку характерних для тексту слів зазначимо, що довгі слова в тексті№4 constitutionally, transcontinental вказують на його державницький характер а довгі слова тексту№5 boooooooooooglyyyyyy and yuuuuuuuuuuuummmmmmmmmmmm вказують на його неформальний характер. Але довгі слова часто зустрічаються в тексті тільки один раз і тому потрібно знайти ті довгі слова які зустрічаються в тексті з певною частотою. Одночасно ми уникаємо врахування коротких не інформативних слів а також уникаємо врахування довгих але рідкісних слів. В наступному прикладі показано, як з тексту №5 вибираються слова які мають довжину більше ніж 7 символів і зустрічаються в тесті більше ніж 7 разів.
>>> fdist5 = FreqDist(text5)
>>> sorted([w for w in set(text5) if len(w) > 7 and fdist5[w] > 7])
['#14-19teens', '#talkcity_adults', '((((((((((', '........', 'Question', 'actually', 'anything', 'computer', 'cute.-ass', 'everyone', 'football', 'innocent', 'listening', 'remember', 'seriously', 'something', 'together', 'tomorrow', 'watching']
