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

2.1.1. Конкорданс

Конкорданс - традиційний, давно відомий, але до цих пір недостатньо оцінений спосіб вивчення тексту. Він надає повний індекс слів в найближчих і розширених контекстах.

Комп'ютерний конкорданс дозволить Вам порівняти всі контексти вживання слова, проаналізувати їх, побачити слово в самому тексті художнього твору.

Для побудови конкордансу слова "surprize" у тексті 'austen-emma.txt' необхідно використати наступні вирази:

>>> emma = nltk.Text(nltk.corpus.gutenberg.words('austen-emma.txt'))

>>> emma.concordance("surprize")

Building index...

Displaying 25 of 37 matches:

er father , was sometimes taken by surprize at his being still able to pity `

hem do the other any good ." " You surprize me ! Emma must do Harriet good : a

Knightley actually looked red with surprize and displeasure , as he stood up ,

r . Elton , and found to his great surprize , that Mr . Elton was actually on

d aid ." Emma saw Mrs . Weston ' s surprize , and felt that it must be great ,

father was quite taken up with the surprize of so sudden a journey , and his f

y , in all the favouring warmth of surprize and conjecture . She was , moreove

…..

2.1.2. Статистичні дані про текст

Спробуємо написати невелику програму для одержання інформації про кожен текст з корпуса.

Побудуємо цикл по змінній fileid, яка відповідає ідентифікатору файлу з текстом, і на кожному кроці будемо визначати деяку статистичну інформацію, яку для компактності запису будемо відображати цілими числами int().

>>> for fileid in gutenberg.fileids():

num_chars = len(gutenberg.raw(fileid)) #1

num_words = len(gutenberg.words(fileid))

num_sents = len(gutenberg.sents(fileid))

num_vocab = len(set([w.lower() for w in gutenberg.words(fileid)]))

print int(num_chars/num_words), int(num_words/num_sents), int(num_words/num_vocab), fileid

...

4 21 26 austen-emma.txt

4 23 16 austen-persuasion.txt

4 24 22 austen-sense.txt

4 33 79 bible-kjv.txt

4 18 5 blake-poems.txt

4 17 14 bryant-stories.txt

4 17 12 burgess-busterbrown.txt

4 16 12 carroll-alice.txt

4 17 11 chesterton-ball.txt

4 19 11 chesterton-brown.txt

4 16 10 chesterton-thursday.txt

4 18 24 edgeworth-parents.txt

4 24 15 melville-moby_dick.txt

4 52 10 milton-paradise.txt

4 12 8 shakespeare-caesar.txt

4 13 7 shakespeare-hamlet.txt

4 13 6 shakespeare-macbeth.txt

4 35 12 whitman-leaves.txt

Операція ділення дає цілочисленні результати (з округленням). Для одержання результатів без округлення потрібно використати from __future__ import division

>>> from __future__ import division

>>> for fileid in gutenberg.fileids():

num_chars = len(gutenberg.raw(fileid)) #1

num_words = len(gutenberg.words(fileid))

num_sents = len(gutenberg.sents(fileid))

num_vocab = len(set([w.lower() for w in gutenberg.words(fileid)]))

print int(num_chars/num_words), int(num_words/num_sents), int(num_words/num_vocab), fileid

...

4.60990921232 21.6477669029 26.2019335512 austen-emma.txt

4.74979372727 23.7128019324 16.8245072836 austen-persuasion.txt

4.75378595242 24.1721017586 22.1108855224 austen-sense.txt

Дана програма відображає наступні статистичні дані для кожного з текстів: середня довжина слова; середня довжина речення; значення лексичної різноманітності (відношення загальної кількості слів до кількості оригінальних слів). Числові значення (однакові для всіх текстів) вказують, що для англійської мови середнє значення довжини слова становить 4 символи (насправді 3 оскільки змінна num_chars містить і пробіли). На відміну від довжини слова наступні числові значення відрізняються і є до певної міри характерними для різних авторів.

В попередньому прикладі використовувалась функція .raw() для доступу до тексту книжки, без його поділу на окремі слова. Ця функція дозволяє доступитися до вмісту файлу без будь-якої його попередньої лінгвістичної обробки. Тому використання len(gutenberg.raw('blake-poems.txt') дозволяє встановити скільки символів (разом з пробілами) є в тексті. Функція sents() ділить текст на окремі речення і кожне речення представляється, як список стрічок, де стрічки – окремі слова.

>>> macbeth_sentences = gutenberg.sents('shakespeare-macbeth.txt')

>>> macbeth_sentences

[['[', 'The', 'Tragedie', 'of', 'Macbeth', 'by', 'William', 'Shakespeare', '1603', ']'], ['Actus', 'Primus', '.'], ...]

>>> macbeth_sentences[1037]

['Double', ',', 'double', ',', 'toile', 'and', 'trouble', ';',

'Fire', 'burne', ',', 'and', 'Cauldron', 'bubble']

>>> longest_len = max([len(s) for s in macbeth_sentences])

>>> [s for s in macbeth_sentences if len(s) == longest_len]

[['Doubtfull', 'it', 'stood', ',', 'As', 'two', 'spent', 'Swimmers', ',', 'that', 'doe', 'cling', 'together', ',', 'And', 'choake', 'their', 'Art', ':', 'The', 'mercilesse', 'Macdonwald', ...], ...]

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