Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2011-kl-lab4.doc
Скачиваний:
8
Добавлен:
12.11.2019
Размер:
2 Мб
Скачать
☆

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', '.']

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]