Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКНІ
Факультет:
Прикладна лінгвістика
Кафедра:
Системи автоматизованого проектування

Інформація про роботу

Рік:
2024
Тип роботи:
Методичні вказівки до лабораторної роботи
Предмет:
Інформаційні технології

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” ІНСТИТУТ КОМП’ЮТЕРНИХ НАУК ТА ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ Кафедра “Системи автоматизованого проектування” / ВИВЧЕННЯ БІБЛІОТЕКИ ПРИКЛАДНИХ ПРОГРАМ NLTK, ДЛЯ ОПРАЦЮВАННЯ ТЕКСТІВ ПРИРОДНОЮ МОВОЮ. ДОСТУП ТА РОБОТА З КОРПУСАМИ ТЕКСТІВ. Методичні вказівки до лабораторної роботи № 3 з дисципліни “Комп’ютерна лінгвістика” для студентів спеціальності 8.030005 “Прикладна лінгвістика”. Затверджено на засіданні кафедри “Системи автоматизованого проектування” Протокол № __ від ________ р. на засіданні методичної ради ІКНІ Протокол № _____ від _______ р. ВАК № _____ від ___________ р. Львів-2018 ВИВЧЕННЯ БІБЛІОТЕКИ ПРИКЛАДНИХ ПРОГРАМ NLTK, ДЛЯ ОПРАЦЮВАННЯ ТЕКСТІВ ПРИРОДНОЮ МОВОЮ. ДОСТУП ТА РОБОТА З КОРПУСАМИ ТЕКСТІВ. Методичні вказівки до лабораторної роботи №3 з дисципліни “Комп’ютерна лінгвістика” для студентів спеціальності 8.030005 “Прикладна лінгвістика” для стаціонарної та заочної форм навчання/Укл. Д.В.Корпильов. - Львів: Національний університет ”Львівська політехніка”, 2018. - 28с. Укладачі: Корпильов Д.В., ст. викладач Відповідальний за випуск: Лобур М. В., доктор технічних наук, професор Рецензенти: Каркульовський В. І., канд. техн. наук, доцент Зміст МЕТА РОБОТА 4 КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ 4 1.Доступ до корпусів текстів. 4 1.1. Корпус Гутенберга. 4 1.2 Текст з Інтернету. 8 1.3 Корпус Brown 9 1.4 Корпус інформаційного агентства Рейтер. 10 1.5 Корпус інаугураційних примов президентів США. 11 1.6 Анотовані (розмічені) корпуси текстів. 12 1.7 Корпуси іншомовних текстів. 12 1.8 Структура корпусів текстів. 13 1.9 Доступ до власних корпусів текстів. 14 2. Умовний частотний розподіл. Клас ConditionalFreqDist. 16 2.1 Умови і події. 16 2.2 Підрахунок слів для окремих жанрів. 17 3. Використання текстового редактора при створенні програм. 19 3.1. Поняття функції та модуля. 20 ПОРЯДОК ВИКОНАННЯ РОБОТИ 21 ЗМІСТ ЗВІТУ 23 ЛІТЕРАТУРА 24 ДОДАТОК А 25 ДОДАТОК В 26 МЕТА РОБОТА Вивчення основ програмування на мові Python. Вивчення методів доступу до корпусів текстів. Вивчення класу ConditionalFreqDist. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ Вирішення задач обробки текстів природною мовою передбачає використання великих об’ємів лінгвістичних даних, або інишими словами передбачає роботу з корпусами текстів. Виконання даної лабораторної роботи допоможе знайти відповідь на наступні питання: які є відомі корпуси текстів та лексичні ресурси і як отримати до них доступ використовуючи Python; які корисні конструкції має Python для виконання цієї роботи. 1.Доступ до корпусів текстів. Корпус текстів це великий набір текстів. Багато корпусів розроблені їз збереженням балансу між текстами різних жанрів, або авторів. В попередній лабораторній роботі ми працювали з промовами президентів США, які є частиною корпуса US Presidential Inaugural Addresses. З промовами ми працювали, як з одним текстом не зважаючи на те, що кожна промова має окремого автора.Обробку ми здійснювали . При роботі з копусами важливо мати засоби доступу як до окремих тексті так і до окремих частин цих тексів а також і до окремих слів. 1.1. Корпус Гутенберга. В NLTK входить невелика частина текстів з електронного архіву текстів Project Gutenberg , який містить 25000 безкоштовних електронних книжок різних авторів (http://www.gutenberg.org/). Тексти творів в окремих файлах. Для одержання назв файлів (ідентифікаторів файлів) в яких зберігаються текстів потрібно використати наступну функцію: Лістинг №1 >>> import nltk >>> nltk.corpus.gutenberg.fileids() ['austen-emma.txt', 'austen-persuasion.txt', 'austen-sense.txt', 'bible-kjv.txt', 'blake-poems.txt', 'bryant-stories.txt', 'burgess-busterbrown.txt', 'carroll-alice.txt', 'chesterton-ball.txt', 'chesterton-brown.txt', 'chesterton-thursday.txt', 'edgeworth-parents.txt', 'melville-moby_dick.txt', 'milton-paradise.txt', 'shakespeare-caesar.txt', 'shakespeare-hamlet.txt', 'shakespeare-macbeth.txt', 'whitman-leaves.txt']   Для роботи з першим текстом цього корпусу (роман Емма, автор Джейн Остін) створюємо змінну emma і можемо знайти скільки слів має цей текст. Лістинг №2 >>> emma = nltk.corpus.gutenberg.words('austen-emma.txt') >>> len(emma) 192427   / / При створенні змінної emma було використано функцію words() об’єкта gutenberg пакета corpus бібліотеки NLTK. Аналогічний результат можна досягнути використавши більш компактний запис констркуцій Python. Лістинг №3 >>> from nltk.corpus import gutenberg >>> gutenberg.fileids() ['austen-emma.txt', 'austen-persuasion.txt', 'austen-sense.txt', ...] >>> emma = gutenberg.words('austen-emma.txt')  Для побудови конкордансу необхідно використати наступні вирази: Лістинг №4 >>> emma = nltk.Text(nltk.corpus.gutenberg.words('austen-emma.txt')) >>> emma.concordance("surprize") 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 he appeared , to have her share of surprize , introduction , and pleasure . Th ir plans ; and it was an agreeable surprize to her , therefore , to perceive t talking aunt had taken me quite by surprize , it must have been the death of m f all the dialogue which ensued of surprize , and inquiry , and congratulation the present . They might chuse to surprize her ." Mrs . Cole had many to agre the mode of it , the mystery , the surprize , is more like a young woman ' s s to her song took her agreeably by surprize -- a second , slightly but correct " " Oh ! no -- there is nothing to surprize one at all .-- A pretty fortune ; t to be considered . Emma ' s only surprize was that Jane Fairfax should accep of your admiration may take you by surprize some day or other ." Mr . Knightle ation for her will ever take me by surprize .-- I never had a thought of her i expected by the best judges , for surprize -- but there was great joy . Mr . sound of at first , without great surprize . " So unreasonably early !" she w d Frank Churchill , with a look of surprize and displeasure .-- " That is easy ; and Emma could imagine with what surprize and mortification she must be retu tled that Jane should go . Quite a surprize to me ! I had not the least idea ! . It is impossible to express our surprize . He came to speak to his father o g engaged !" Emma even jumped with surprize ;-- and , horror - struck , exclai >>>   Спробуємо написати невелику програму для одержання інформації про кожен текст з корпуса. Побудуємо цикл по змінній fileid, яка відповідає ідентифікатору файла з текстом, і на кожному кроці будемо визначати деяку статистичну інформацію, яку для компактності запису будемо відображати цілими числами int(). Лістинг №5 >>> 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 24 26 austen-emma.txt 4 26 16 austen-persuasion.txt 4 28 22 austen-sense.txt 4 33 79 bible-kjv.txt 4 19 5 blake-poems.txt 4 19 14 bryant-stories.txt 4 17 12 burgess-busterbrown.txt 4 20 12 carroll-alice.txt 4 20 11 chesterton-ball.txt 4 22 11 chesterton-brown.txt 4 18 10 chesterton-thursday.txt 4 20 24 edgeworth-parents.txt 4 25 15 melville-moby_dick.txt 4 52 10 milton-paradise.txt 4 11 8 shakespeare-caesar.txt 4 12 7 shakespeare-hamlet.txt 4 12 6 shakespeare-macbeth.txt 4 36 12 whitman-leaves.txt >>>   Операція ділення дає цілочисленні результати (з округленням). Для одержання результатів без округлення потрібно використати from __future__ import division Лістинг №6 >>> 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((num_chars/num_words), (num_words/num_sents),(num_words/num_vocab), fileid) ... 4.609909212324673 24.822884416924666 26.201933551198255 austen-emma.txt 4.749793727271801 26.19989324793168 16.82450728363325 austen-persuasion.txt 4.753785952421314 28.32086417283457 22.11088552241137 austen-sense.txt 4.286881563819072 33.57319868451649 79.16143181640166 bible-kjv.txt 4.567033756284415 19.073059360730593 5.442345276872964 blake-poems.txt >>>   Дана програма відображає наступні статистичні дані для кожного з текстів: середня довжина слова; середня довжина речення; значення лексичної різноманітності (відношення загальної кількості слів до кільності оригінальних слів). Числові значення (однакові для всіх текстів) вказують, що для англійської мови середнє значення довжини слова становить 4 символи (насправді 3 оскільки змінна num_chars включає і пробіли). На відміну від довжини слова наступні числові значення відрізняються і є до певної міри характерними для різних авторів. В попередньому прикладі використовувалась функція .raw() для доступу до тексту книжки, без його поділу на окремі слова. Ця функція дозволяє доступитися до вмісту файла без будь-якої його попередньої лінгвістичної обробки. Тому використання len(gutenberg.raw('blake-poems.txt') дозволяє встановити скільки символів (разом з пробілами) є в тексті. Функція .sents() ділить текст на окремі речення і кожне речення представляється, як список стрічок, де стічки – окремі слова. Лістинг №7 >>> macbeth_sentences = gutenberg.sents('shakespeare-macbeth.txt') >>> macbeth_sentences [['[', 'The', 'Tragedie', 'of', 'Macbeth', 'by', 'William', 'Shakespeare', '1603', ']'], ['Actus', 'Primus', '.'], ...] >>> macbeth_sentences[1037] ['Good', 'night', ',', 'and', 'better', 'health', 'Attend', 'his', 'Maiesty'] >>> 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', '(', 'Worthie', 'to', 'be', 'a', 'Rebell', ',', 'for', 'to', 'that', 'The', 'multiplying', 'Villanies', 'of', 'Nature', 'Doe', 'swarme', 'vpon', 'him', ')', 'from', 'the', 'Westerne', 'Isles', 'Of', 'Kernes', 'and', 'Gallowgrosses', 'is', 'supply', "'", 'd', ',', 'And', 'Fortune', 'on', 'his', 'damned', 'Quarry', 'smiling', ',', 'Shew', "'", 'd', 'like', 'a', 'Rebells', 'Whore', ':', 'but', 'all', "'", 's', 'too', 'weake', ':', 'For', 'braue', 'Macbeth', '(', 'well', 'hee', 'deserues', 'that', 'Name', ')', 'Disdayning', 'Fortune', ',', 'with', 'his', 'brandisht', 'Steele', ',', 'Which', 'smoak', "'", 'd', 'with', 'bloody', 'execution', '(', 'Like', 'Valours', 'Minion', ')', 'caru', "'", 'd', 'out', 'his', 'passage', ',', 'Till', 'hee', 'fac', "'", 'd', 'the', 'Slaue', ':', 'Which', 'neu', "'", 'r', 'shooke', 'hands', ',', 'nor', 'bad', 'farwell', 'to', 'him', ',', 'Till', 'he', 'vnseam', "'", 'd', 'him', 'from', 'the', 'Naue', 'toth', "'", 'Chops', ',', 'And', 'fix', "'", 'd', 'his', 'Head', 'vpon', 'our', 'Battlements']] >>>   1.2 Текст з Інтернету. Project Gutenberg включає тисячі книжок і він представляє літературну мову. Для роботи з менш формальною мовою NLTK містить набір текстів з Інтернету: тексти з форуму, тексти з фільму “Пірати карибського моря”, тексти особистих оголошень,телефонні розмови, огляд вин: Лістинг №8 >>> from nltk.corpus import webtext >>> for fileid in webtext.fileids(): ... print(fileid, webtext.raw(fileid)[:65], '...') ... firefox.txt Cookie Manager: "Don't allow sites that set removed cookies to se... grail.txt SCENE 1: [wind] [clop clop clop] KING ARTHUR: Whoa there! [clop... overheard.txt White guy: So, do you have any plans for this evening? Asian girl... pirates.txt PIRATES OF THE CARRIBEAN: DEAD MAN'S CHEST, by Ted Elliott & Terr... singles.txt 25 SEXY MALE, seeks attrac older single lady, for discreet encoun... wine.txt Lovely delicate, fragrant Rhone wine. Polished leather and strawb... >>>   Також в NLTK входить корпус повідомлень з чатів, створений в Naval Postgraduate School для досліджень з метою автоматичного виявлення Інтернет злочинців. Цей корпус містить 10000 анонімних повідомлень в яких імена користувачів замінені за шаблоном "UserNNN" а також видалена інша персональна інформація, Корпус організований, як 15 окремих файлів, кожен з яких містить декілька сотень повідомлень з певною датою створення та вікових даних авторів (підлітки, 20ти, 30ти та 40ка річні, дорослі). Назва файла містить інформацію про дату, вікову групу та кількість повідомлень, наприклад файл 10-19-20s_706posts.xml містить 706 повідомлень двадцятирічних дописувачів від 19 жовтня 2006 року. Лістинг №9 >>> from nltk.corpus import nps_chat >>> chatroom = nps_chat.posts('10-19-20s_706posts.xml') >>> chatroom[123] ['i', 'do', "n't", 'want', 'hot', 'pics', 'of', 'a', 'female', ',', 'I', 'can', 'look', 'in', 'a', 'mirror', '.']   1.3 Корпус Brown Корпус Brown – це перший корпус англійської мови об’ємом один мільйон слів було створено в 1961-1964 роках в університеті Brown. Цей корпус містить тексти з 500 різних джерел, які відповідають різним жанрам. В Табл.1. наведено приклади для кожного з жанрів. Таблиця 1 Приклади текстів для кожного з жанрів корпуса Brown. ID Файл Жанр Опис тексту  A16 ca16 news Chicago Tribune: Society Reportage  B02 cb02 editorial Christian Science Monitor: Editorials  C17 cc17 reviews Time Magazine: Reviews  D12 cd12 religion Underwood: Probing the Ethics of Realtors  E36 ce36 hobbies Norling: Renting a Car in Europe  F25 cf25 lore Boroff: Jewish Teenage Culture  G22 cg22 belles_lettres Reiner: Coping with Runaway Technology  H15 ch15 government US Office of Civil and Defence Mobilization: The Family Fallout Shelter  J17 cj19 learned Mosteller: Probability with Statistical Applications  K04 ck04 fiction W.E.B. Du Bois: Worlds of Color  L13 cl13 mystery Hitchens: Footsteps in the Night  M01 cm01 science_fiction Heinlein: Stranger in a Strange Land  N14 cn15 adventure Field: Rattlesnake Ridge  P12 cp12 romance Callaghan: A Passion in Rome  R06 cr06 humor Thurber: The Future, If Any, of Comedy   Використовуючи засоби NLTK можна отримати доступ до цього корпусу, як до списку слів або списку речень (кожне речення – список слів). Також доступна можливість вибору текстів окремої категорії або з окремого файлу. Лістинг №10 >>> from nltk.corpus import brown >>> brown.categories() ['adventure', 'belles_lettres', 'editorial', 'fiction', 'government', 'hobbies', 'humor', 'learned', 'lore', 'mystery', 'news', 'religion', 'reviews', 'romance', 'science_fiction'] >>> brown.words(categories='news') ['The', 'Fulton', 'County', 'Grand', 'Jury', 'said', ...] >>> brown.words(fileids=['cg22']) ['Does', 'our', 'society', 'have', 'a', 'runaway', ',', ...] >>> brown.sents(categories=['news', 'editorial', 'reviews']) [['The', 'Fulton', 'County', 'Grand', 'Jury', 'said', 'Friday', 'an', 'investigation', 'of', "Atlanta's", 'recent', 'primary', 'election', 'produced', '``', 'no', 'evidence', "''", 'that', 'any', 'irregularities', 'took', 'place', '.'], ['The', 'jury', 'further', 'said', 'in', 'term-end', 'presentments', 'that', 'the', 'City', 'Executive', 'Committee', ',', 'which', 'had', 'over-all', 'charge', 'of', 'the', 'election', ',', '``', 'deserves', 'the', 'praise', 'and', 'thanks', 'of', 'the', 'City', 'of', 'Atlanta', "''", 'for', 'the', 'manner', 'in', 'which', 'the', 'election', 'was', 'conducted', '.'], ...] >>>   Корпус Brown – зручний ресурс для систематичного вивчення відмінностей між жанрами, або іншими словами для дослідження стилістики текстів. Спробуємо порівняти жанри і встановити, яким чином в текстах різних жанрів використовуються модальні дієслова. Для цього потрібно зробити підрахунки вживання різних модальних дієслів для різних жанрів. Лістинг №11 >>> from nltk.corpus import brown >>> news_text = brown.words(categories='news') >>> fdist = nltk.FreqDist([w.lower() for w in news_text]) >>> modals = ['can', 'could', 'may', 'might', 'must', 'will'] >>> for m in modals: ... print( m + ':', fdist[m],) ... can: 94 could: 87 may: 93 might: 38 must: 53 will: 389 >>>   Виконати самостійно! Здійснити розрахунки для інших жанрів та для інших слів. Наприклад для wh слів, таких як what, when, where, who, та why. 1.4 Корпус інформаційного агентства Рейтер. Корпус Reuters містить 10788 текстів новин загальним об’ємом 1.3 мільйона слів. Всі тексти поділені на категорії за 90 темами і поділені на два набори (тренування та тестування). Такий поділ необхідний для тренування та тестування алгоритмів автоматичного визначення тематики тексту. Лістинг №12 >>> from nltk.corpus import reuters >>> reuters.fileids() ['test/14826', 'test/14828', 'test/14829', 'test/14832', ...] >>> reuters.categories() ['acq', 'alum', 'barley', 'bop', 'carcass', 'castor-oil', 'cocoa', 'coconut', 'coconut-oil', 'coffee', 'copper', 'copra-cake', 'corn', 'cotton', 'cotton-oil', 'cpi', 'cpu', 'crude', 'dfl', 'dlr', ...]   На відміну від корпуса Brown, категорії текстів в цьому корпусі можуть накладатися одна на одну, оскільки тематика новин (газетних публікацій) переважно торкається багатьох тем. Засобами NLTK можна звернутися до тем, яких торкаються в одному або декількох текстах або навпаки дізнатися весь перелік текстів, які належать до певної категорії. Лістинг №13 >>> reuters.categories('training/9865') ['barley', 'corn', 'grain', 'wheat'] >>> reuters.categories(['training/9865', 'training/9880']) ['barley', 'corn', 'grain', 'money-fx', 'wheat'] >>> reuters.fileids('barley') ['test/15618', 'test/15649', 'test/15676', 'test/15728', 'test/15871', ...] >>> reuters.fileids(['barley', 'corn']) ['test/14832', 'test/14858', 'test/15033', 'test/15043', 'test/15106', 'test/15287', 'test/15341', 'test/15618', 'test/15618', 'test/15648', ...]   Корпус інаугураційних примов президентів США. Знайомлячись з бібліотекою програм NLTK ми працювали з цим корпусом і розглядали весь корпус як один текст, що давало можливість знайти місце окремого слова в текстах промов починаючи від першого слова першої промови. Насправді корпус це набір 55 текстів, кожен з яких є промовою одного президента. Цікавою особливістю цього корпуса є можливість дослідити розподіл текстів за часовими проміжками. Назва кожного тексту містить рік проголошення промови і відповідно є можливість доступитися до цієї інформації , доступившись до перших чотирьох символів назви файлу [fileid[:4]. Лістинг №14 >>> from nltk.corpus import inaugural >>> inaugural.fileids() ['1789-Washington.txt', '1793-Washington.txt', '1797-Adams.txt', '1801-Jefferson.txt', '1805-Jefferson.txt', '1809-Madison.txt', '1813-Madison.txt', '1817-Monroe.txt', '1821-Monroe.txt', '1825-Adams.txt', '1829-Jackson.txt', '1833-Jackson.txt', '1837-VanBuren.txt', '1841-Harrison.txt', '1845-Polk.txt', '1849-Taylor.txt', '1853-Pierce.txt', '1857-Buchanan.txt', '1861-Lincoln.txt', '1865-Lincoln.txt', '1869-Grant.txt', '1873-Grant.txt', '1877-Hayes.txt', '1881-Garfield.txt', '1885-Cleveland.txt', '1889-Harrison.txt', '1893-Cleveland.txt', '1897-McKinley.txt', '1901-McKinley.txt', '1905-Roosevelt.txt', '1909-Taft.txt', '1913-Wilson.txt', '1917-Wilson.txt', '1921-Harding.txt', '1925-Coolidge.txt', '1929-Hoover.txt', '1933-Roosevelt.txt', '1937-Roosevelt.txt', '1941-Roosevelt.txt', '1945-Roosevelt.txt', '1949-Truman.txt', '1953-Eisenhower.txt', '1957-Eisenhower.txt', '1961-Kennedy.txt', '1965-Johnson.txt', '1969-Nixon.txt', '1973-Nixon.txt', '1977-Carter.txt', '1981-Reagan.txt', '1985-Reagan.txt', '1989-Bush.txt', '1993-Clinton.txt', '1997-Clinton.txt', '2001-Bush.txt', '2005-Bush.txt', '2009-Obama.txt'] >>> [fileid[:4] for fileid in inaugural.fileids()] ['1789', '1793', '1797', '1801', '1805', '1809', '1813', '1817', '1821', '1825', '1829', '1833', '1837', '1841', '1845', '1849', '1853', '1857', '1861', '1865', '1869', '1873', '1877', '1881', '1885', '1889', '1893', '1897', '1901', '1905', '1909', '1913', '1917', '1921', '1925', '1929', '1933', '1937', '1941', '1945', '1949', '1953', '1957', '1961', '1965', '1969', '1973', '1977', '1981', '1985', '1989', '1993', '1997', '2001', '2005', '2009'] >>>   1.6 Анотовані (розмічені) корпуси текстів. Більшість корпусів текстів є лінгвістично анотованими, тобто містять різного типу розмітку – морфологічну, синтаксичну, семантичну, в них можуть бути виділені власні назви, вказані семантичні ролі і т.п. NLTK забезпечує способи доступу до багатьох корпусів і розповсюджується з цими корпусами або їх фрагментами (при використанні NLTK всі корпуси по замовчуванню повинні зберігатися за наступним шляхом C:\nltk_data\corpora (C:\Users\korpy_000\AppData\Roaming\nltk_data\corpora)). В Додатку В наведений перелік доступних корпусів текстів та їх короткий опис. 1.7 Корпуси іншомовних текстів. NLTK включає та має засоби роботи з корпусами текстів іншими мовами крім англійської. Для роботи з цими корпусами потрібно попередньо ознайомитися з питаннями кодування символів в Python (Лабораторна робота №4). Лістинг №15 >>> nltk.corpus.cess_esp.words() ['El', 'grupo', 'estatal', 'Electricit\xe9_de_France', ...] >>> nltk.corpus.floresta.words() ['Um', 'revivalismo', 'refrescante', 'O', '7_e_Meio', ...] >>> nltk.corpus.indian.words('hindi.pos') ['पूर्ण', 'प्रतिबंध', 'हटाओ', ':', 'इराक', 'संयुक्त', ...] >>> nltk.corpus.udhr.fileids() ['Abkhaz-Cyrillic+Abkh', 'Abkhaz-UTF8', 'Achehnese-Latin1', 'Achuar-Shiwiar-Latin1', 'Adja-UTF8', 'Afaan_Oromo_Oromiffa-Latin1', 'Afrikaans-Latin1', 'Aguaruna-Latin1', 'Akuapem_Twi-UTF8', 'Albanian_Shqip-Latin1', 'Amahuaca', 'Amahuaca-Latin1', ...] >>> nltk.corpus.udhr.words('Javanese-Latin1')[11:] ['Saben', 'umat', 'manungsa', 'lair', 'kanthi', ...]  Останній з розглянутих в попередньому прикладів корпусів (udhr) це набір текстів різними мовами (300 мов) Декларації прав людини. 1.8 Структура корпусів текстів. Розглянувши прикладів корпусів текстів можна зробити висновок, що всі вони мають різну структуру (Рис.1.). Найпростіший корпус текстів не має структури, це набір текстів. Інші корпуси це набори текстів поділених за категоріями мови, жанру, автора. В багатьох випадках категорії текстів можуть перетинатися між собою, оскільки тексти можуть належати різним категоріям. Окремий випадок це коли набори текстів розподілені за часовими параметрами. / Рис.1. Загальні структури корпусів текстів. Засоби 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 корпуса текстів  Відмінності між методами доступу до корпусів можна проілюструвати наступним прикладом. Лістинг №16 >>> 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', ...], ...]   1.9 Доступ до власних корпусів текстів. При наявності власного набору текстових файлів, до них також можна організувати доступ використовуючи вище перелічені методи попередньо використавши клас NLTK PlaintextCorpusReader. Потрібно знати розміщення файлів на диску. (в прикладі шлях наступний 'C:/Project/WindowsMEMSAplication’) Змінній присвоюється це значення (#1). Клас PlaintextCorpusReader має два параметри шлях до файлів та шаблон вибору файлів (#2) і повертає список назв файлів. Лістинг №17 >>> import nltk >>> from nltk.corpus import PlaintextCorpusReader >>> corpus_root = 'C:/Project/WindowsMEMSAplication' / >>> wordlists = PlaintextCorpusReader(corpus_root, '.*') / >>> print(wordlists.fileids()) ['MEMS.mdb', 'NLTK Book.html', 'NLTK Book_files/default.css', 'Programming the Finite Element Method, Fifth Edition/16.810_L4_CAE.pdf', 'Programming the Finite Element Method, Fifth Edition/5 (1).pdf', 'Programming the Finite Element Method, Fifth Edition/5.pdf', 'Programming the Finite Element Method, Fifth Edition/6-5_zenkevich_1975.pdf', 'Programming the Finite Element Method, Fifth Edition/658_0.pdf', 'Programming the Finite Element Method, Fifth Edition/9903231.pdf', 'Programming the Finite Element Method, Fifth Edition/Computer Programming.pdf', 'Programming the Finite Element Method, Fifth Edition/Finite Element Methods.pdf', 'Programming the Finite Element Method, Fifth Edition/Iglin_Shape_Optim.pdf', 'Programming the Finite Element Method, Fifth Edition/L-G-0003967953-0002476231.pdf', 'Programming the Finite Element Method, Fifth Edition/Preparata,Sheimos,Vychislitelnaya geometriya, 1989.pdf', 'Programming the Finite Element Method, Fifth Edition/SkvortsovAV-2002-01.Book(Trn) (1).pdf', 'Programming the Finite Element Method, Fifth Edition/SkvortsovAV-2002-01.Book(Trn).pdf', 'Programming the Finite Element Method, Fifth Edition/The Finite Element Method Vol3 - Fluid Dynamics - R. Taylor.pdf', 'Programming the Finite Element Method, Fifth Edition/Zienkiewicz O_C_, Taylor R_L_ Vol_ 1_ The finite element met.pdf', 'Programming the Finite Element Method, Fifth Edition/andreev_finit_diff.pdf', 'Programming the Finite Element Method, Fifth Edition/art1_2.pdf', 'Programming the Finite Element Method, Fifth Edition/beginning-visual-c-2010.pdf', 'Programming the Finite Element Method, Fifth Edition/diplom.pdf', 'Programming the Finite Element Method, Fifth Edition/e-maxx_algo.pdf', 'Programming the Finite Element Method, Fifth Edition/fmatter.pdf', 'Programming the Finite Element Method, Fifth Edition/linq.pdf', 'Programming the Finite Element Method, Fifth Edition/manual.pdf', 'Programming the Finite Element Method, Fifth Edition/seminar2.pdf', 'Programming the Finite Element Method, Fifth Edition/ulstu2011-36.pdf', 'Programming the Finite Element Method, Fifth Edition/zbirnyk-2016.pdf', 'Programming the Finite Element Method, Fifth Edition/ДубенецьВГ.Основи МСЕ.pdf', . . . ... , . . . ... , . . . ... 'WindowFrmAplMEMS/obj/Debug/WindowFrmAplMEMS.pdb', 'WindowFrmAplMEMS/rheolef.pdf', 'WindowFrmAplMEMS/task_152104.pdf', 'WindowFrmAplMEMS/tsoi_rv.pdf', "WindowFrmAplMEMS/Методичні рекомендації до виконання лабораторних робіт з навчальної дисципліни Об'єктно-орієнтоване програмування. Парфьонов Ю.Е..pdf", 'Разработка программы рисования графика функции двух переменных.docx', 'Рисование объемных фигур.docx'] >>> print(wordlists.words('NLTK Book.html')) ['<!--?', 'xml', 'version', '="', '1', '.', '0', '"', ...]  
Антиботан аватар за замовчуванням

23.10.2018 19:10-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!