- •Мета робота
- •Виконання лабораторних робіт починаємо з:
- •Короткі теоретичні відомості
- •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.
- •Порядок виконання роботи
- •Варіанти завдань
- •Література
- •Інтернет посилання
- •Методичні вказівки
3. Структура корпусів текстів.
Розглянувши прикладів корпусів текстів можна зробити висновок, що всі вони мають різну структуру (Рис.1.). Найпростіший корпус текстів не має структури, це набір текстів. Інші корпуси це набори текстів поділених за категоріями мови, жанру, автора. В багатьох випадках категорії текстів можуть перетинатися між собою, оскільки тексти можуть належати різним категоріям. Окремий випадок це коли набори текстів розподілені за часовими параметрами.
Рис.1. Загальні структури корпусів текстів.
3.1. Засоби nltk
Засоби NLTK забезпечують ефективні способи доступу до різних корпусів та роботи з існуючими та новими корпусами. Таблиця 2. Містить набір функцій які підтримує NLTK для роботи з корпусами.
Таблиця 2.
Основні функції nltk для роботи з корпусами.
Приклад використання функції |
Опис |
fileids() |
Файли корпуса |
fileids([categories]) |
Файли корпуса, що відповідають цій категорії |
categories() |
Категорії корпуса |
categories([fileids]) |
Категорії корпуса, що відповідають цим файлам |
raw() |
Корпус, як послідовність символів |
raw(fileids=[f1,f2,f3]) |
Послідовність символів з наступних файлів |
raw(categories=[c1,c2]) |
Послідовність символів з наступних категорій |
words() |
Слова корпуса |
words(fileids=[f1,f2,f3]) |
Слова з наступних файлів |
words(categories=[c1,c2]) |
Слова з наступних категорій |
sents() |
Речення корпуса |
sents(fileids=[f1,f2,f3]) |
Речення корпуса з наступних файлів |
sents(categories=[c1,c2]) |
Речення корпуса з наступних категорій |
abspath(fileid) |
Місцезнаходження даного файлу на диску |
encoding(fileid) |
Кодування файлу (якщо відоме) |
open(fileid) |
Відкриття файла з корпуса для читання |
root() |
Шлях до місця де встановлено корпус |
readme() |
Вміст файла README корпуса текстів |
Відмінності між методами доступу до корпусів можна проілюструвати наступним прикладом.
>>> raw = gutenberg.raw("burgess-busterbrown.txt")
>>> raw[1:20]
'The Adventures of B'
>>> words = gutenberg.words("burgess-busterbrown.txt")
>>> words[1:20]
['The', 'Adventures', 'of', 'Buster', 'Bear', 'by', 'Thornton', 'W', '.', 'Burgess', '1920', ']', 'I', 'BUSTER', 'BEAR', 'GOES', 'FISHING', 'Buster', 'Bear']
>>> sents = gutenberg.sents("burgess-busterbrown.txt")
>>> sents[1:20]
[['I'], ['BUSTER', 'BEAR', 'GOES', 'FISHING'], ['Buster', 'Bear', 'yawned', 'as', 'he', 'lay', 'on', 'his', 'comfortable', 'bed', 'of', 'leaves', 'and', 'watched', 'the', 'first', 'early', 'morning', 'sunbeams', 'creeping', 'through', ...], ...]
3.2. Доступ до власних корпусів текстів.
При наявності власного набору текстових файлів, до них також можна організувати доступ використовуючи вище перелічені методи попередньо використавши клас NLTK PlaintextCorpusReader . Потрібно знати розміщення файлів на диску. (в прикладі шлях наступний D:\Oles\Romanyuk-S\KL\KL. ) Змінній присвоюється це значення (#1). Клас PlaintextCorpusReader має два параметри шлях до файлів та шаблон вибору файлів (#2) і повертає список назв файлів.
>>> import nltk
>>> from nltk.corpus import PlaintextCorpusReader
>>> corpus_root = 'D:\Oles\Romanyuk-S\KL\KL' #1
>>> wordlists = PlaintextCorpusReader(corpus_root, '.*') #2
>>> wordlists.fileids()
['004556.html', '036_Dobroff_Lukashevich.doc', '048.htm', '2.doc', '2.rtf', '240-0679.rar', '240-0701.DOC', '36.pdf', '41.htm', '48.htm', '57224_1.rtf', '7.doc', 'about_pc-kimmo.html', 'ai00011f.htm', 'archive_article.asp.htm']
>>> wordlists.words('about_pc-kimmo.html')
['<!', 'DOCTYPE', 'HTML', 'PUBLIC', '"-//', 'W3C', ...]
В наступному прикладі показано яким чином можна доступитися до локальної копії корпуса PennTreebank використовуючи клас BracketParseCorpusReader.
>>> from nltk.corpus import BracketParseCorpusReader
>>> corpus_root = r"C:\corpora\penntreebank\parsed\mrg\wsj"
>>> file_pattern = r".*/wsj_.*\.mrg"
>>> ptb = BracketParseCorpusReader(corpus_root, file_pattern)
>>> ptb.fileids()
['00/wsj_0001.mrg', '00/wsj_0002.mrg', '00/wsj_0003.mrg', '00/wsj_0004.mrg', ...]
>>> len(ptb.sents())
49208
>>> ptb.sents(fileids='20/wsj_2013.mrg')[19]
['The', '55-year-old', 'Mr.', 'Noriega', 'is', "n't", 'as', 'smooth', 'as', 'the', 'shah', 'of', 'Iran', ',', 'as', 'well-born', 'as', 'Nicaragua', "'s", 'Anastasio', 'Somoza', ',', 'as', 'imperial', 'as', 'Ferdinand', 'Marcos', 'of', 'the', 'Philippines', 'or', 'as', 'bloody', 'as', 'Haiti', "'s", 'Baby', Doc', 'Duvalier', '.']
