4711

Вивчення методів роботи з файлами на локальних дисках та з інтернету. Використання Юнікоду при обробці текстів

Лабораторная работа

Информатика, кибернетика и программирование

Мета роботи: Вивчення основ програмування на мові Python. Вивчення методів роботи з файлами на локальних дисках та з Інтернету. Використання Юнікоду при обробці текстів. Нормалізація текстів, стемінг, лематизація та сегментац...

Украинкский

2012-11-25

178.5 KB

7 чел.

Мета роботи:

  •  Вивчення основ програмування на мові Python.
  •  Вивчення методів роботи з файлами на локальних дисках та з Інтернету.
  •  Використання Юнікоду при обробці текстів.
  •  Нормалізація текстів, стемінг, лематизація та сегментація.

Короткі теоретичні відомості

Більшість текстів в Інтернеті є у вигляді HTML документів (файлів). Інтернет сторінки можна зберігати на диску у вигляді файлів і доступатися до них. Python також дозволяє працювати з Інтернет сторінками безпосередньо використовуючи функцію urlopen.

Текст, який вивели на екран містить HTML розмітку (мета теги, JavaScript, форми , таблиці). Вилучення тексту з HTML файлу доволі розповсюджена задача, яка в NLTK вирішується за допомогою функції nltk.clean_html(). Ця функція обробляє HTML стрічку і повертає текст у вигляді зручному для подальшої обробки (токенізації).

Блогосфера важливе джерело текстів, як формальних так і не формальних. З допомогою бібліотеки Python Universal Feed Parser, http://feedparser.org/, можна отримати доступ до вмісту блогів.

Для читання локальних файлів необхідно використовувати вбудовану функцію Python open() та read() метод. Якщо існує файл  document.txt, то змінній raw  можна присвоїти його вміст:

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

Програми обробки природної мови повинні працювати з різними мовами та з різними наборами символів. Твердження «1 байт = 1 символ» є застарілим і в переважній більшості практичних випадків є хибним. В англомовному світі переважно використовується ASCII кодування символів. В Європі використовується  розширений Latin набір символів, який містить такі символи датської та норвежської, як "ø", угорської - "ő", іспанської та бретонської -"ñ" та "ň" чеської та словацької мов.

Юніко́д, (англ. Unicode) — це промисловий стандарт розроблений, щоб зробити можливим для текстів і символів (графічних знаків) всіх писемних систем світу узгоджене представлення (репрезентацію) і обробку комп’ютерами. Юнікод підтримує більш ніж мільйон символів. Кожному символу ставиться у відповідність число, яке називають кодовою точкою. В Python кодові точки записуються у вигляді \uXXXX  , де XXXX  - чотири символи шістнадцяткового числа.

from __future__ import division

Імпортування модуля для роботи з числами з плаваючою крапкою

urlopen(url).read()

Функція відкривання та читання файла за адресою url

nltk.word_tokenize(raw)

токенізація тексту raw

nltk.Text(tokens)

Перетворення тексту tokens в NLTK текст

raw.find

Знайти стрічку в raw

raw.rfind

Знайти стрічку в raw. Пошук здійснювати з кінця.

nltk.clean_html(html)

Очистити текст від html розмітки.

open('document.txt')

Відкрити файл

f.read()

Прочитати файл

os.listdir('.')

Встановити вміст директорії

line.strip()

Обрізати стрічку по останньому символу

nltk.data.find('corpora/gutenberg/melville-moby_dick.txt')

Знайти місцезнаходження файлу

open(path, 'rU').read()

Відкрити файл за вказаним шляхом для читання і прочитати його. Різні способи маркування нового рядка ігноруються

raw_input("Enter some text: ")

Ввести текст з клавіатури

codecs.open(path1, encoding='latin2')

ord('a')

line.encode('unicode_escape')

nltk.PorterStemmer()

Модуль Porter стемера

nltk.LancasterStemmer()

Модуль Lancaster стемера

nltk.WordNetLemmatizer()

Модуль WordNet лематизатора

nltk.data.load('tokenizers/punkt/english.pickle')

sent_tokenizer.tokenize(text)

Сегментувати текст на окремі речення

open('output.txt', 'w')

Відкрити файл для запису

output_file.write(word + "\n")

Записати у файл word та символ початку нового рядка


Хід роботи

1. Напишіть функцію, яка приймає адресу URL, як аргумент, і повертає те що міститься за цією адресою з видаленням HTML розмітки. Використовувати urllib.urlopen для доступу до контенту наступним чином raw_contents = urllib.urlopen(‘http://www.nltk.org/’).read().

def Converter(url):

   raw = urlopen(url).read()

   raw1 = nltk.clean_html(raw)

   tokens = nltk.word_tokenize(raw1)

   return tokens

2. Збережіть деякий текст у файлі corpus.txt. Визначити функцію load(f) для читання файлу, назва якого є її аргументом і повертає стрічку, яка містить текст з файлу.

def MyLoad(f,text):

   sl=''

   fl = open(f, 'rU')

   for line in fl:

       ls = line.strip()

       if text in ls:

           sl=ls

   return sl

3. Перепишіть наступний цикл як list comprehension:

 

>>> sent = [‘The’, ‘dog’, ‘gave’, ‘John’, ‘the’, ‘newspaper’]

>>> result = []

>>> for word in sent:

   word_len = (word, len(word))

   result.append(word_len)

>>> result

[(‘The’, 3), (‘dog’, 3), (‘gave’, 4), (‘John’, 4), (‘the’, 3), (‘newspaper’, 9)]

4. Перевірити різницю між стрічками і цілим виконавши наступні дії: «3» * 7 та 3 * 7. Спробуйте здійснити конвертування між стрічками і цілими використавши int(«3») та str(3).

>>> '3'* 7

'3333333'

>>> 3 * 7

21

>>> int('3') * 7

21

>>> str(3) * 7

'3333333'

5. Що станеться, коли стрічки форматування %6s та %-6s використовується для відображення стрічки довшої ніж 6 символів?

7. Створіть файл, який буде містити слова та їх частоту записані в окремих рядках через пробіл ( fuzzy 53). Прочитайте цей файл використовуючи open(filename).readlines().  Розділіть кожну стрічку на дві частини використовуючи split(), і перетворіть число в ціле значення використовуючи int(). Результат повинен бути у вигляді списку: [['fuzzy', 53], ...].

         

13. Використовуючи Porter стемер нормалізуйте будь-який токенізований текст . До того самого тексту застосуйте Lancaster стемер. Результати порівняйте та поясніть.

>>> text = ['CHAPTER', 'I', 'On', 'an', 'exceptionally', 'hot', 'evening', 'early', 'in', 'July', 'a', 'young', 'man', 'came', 'out', 'of', 'the', 'garret', 'in', 'which', 'he', 'lodged', 'in', 'S', '.', 'Place', 'and', 'walked', 'slowly', ',', 'as', 'though', 'in', 'hesitation', ',', 'towards', 'K', '.', 'bridge', '.']

>>> porter = nltk.PorterStemmer()

>>> lancaster = nltk.LancasterStemmer()

>>> [porter.stem(t) for t in text]

['CHAPTER', 'I', 'On', 'an', 'except', 'hot', 'even', 'earli', 'in', 'Juli', 'a', 'young', 'man', 'came', 'out', 'of', 'the', 'garret', 'in', 'which', 'he', 'lodg', 'in', 'S', '.', 'Place', 'and', 'walk', 'slowli', ',', 'as', 'though', 'in', 'hesit', ',', 'toward', 'K', '.', 'bridg', '.']

>>> [lancaster.stem(t) for t in text]

['chapt', 'i', 'on', 'an', 'exceiv', 'hot', 'ev', 'ear', 'in', 'july', 'a', 'young', 'man', 'cam', 'out', 'of', 'the', 'garret', 'in', 'which', 'he', 'lodg', 'in', 's', '.', 'plac', 'and', 'walk', 'slow', ',', 'as', 'though', 'in', 'hesit', ',', 'toward', 'k', '.', 'bridg', '.']

>>>

14. Доступіться до текстів ABC Rural News та ABC Science News з корпуса (nltk.corpus.abc). Знайдіть значення для оцінки читабельності текстів (аналогічно до задачі №12). Використовуйте Punkt для поділу тексту на окремі речення.

>>> from __future__ import division

>>> import nltk, re, pprint

>>> from nltk.corpus import abc

>>> abc.items

['rural.txt', 'science.txt']

>>> l=0

>>> n=0

>>> for w in nltk.corpus.abc.words():

l+=len(w)

n+=1

 

>>> m1 = l/n

>>> m1

4.3911944633176541

>>> m2 = len(nltk.corpus.abc.words()) / len(nltk.corpus.abc.sents())

>>> m2

26.081187714703582

>>> legible = 4.71*m1+0.5*m2-21.43

>>> legible

12.293119779577943

>>> sent_tokenizer=nltk.data.load('tokenizers/punkt/english.pickle')

>>> text = nltk.corpus.abc.raw('rural.txt')

>>> sents = sent_tokenizer.tokenize(text)

>>> pprint.pprint(sents[11:13])

['Support\nAWB still has plenty of support among grain growers in central western New South Wales despite the revelations of the Cole inquiry.',

"Producers say they broadly support AWB's attempts to get the best prices for their products."]

>>> sent_tokenizer=nltk.data.load('tokenizers/punkt/english.pickle')

>>> text = nltk.corpus.abc.raw('science.txt')

>>> sents = sent_tokenizer.tokenize(text)

>>> pprint.pprint(sents[11:13])

['He added that in the study by Elkins and team, patients may not have received the best long-term antibiotic treatment.',

'That would make the inhaled salt water mist appear more effective than it would have been if people were getting a better drug, says Ratjen.']

>>>

 

Висновок:

 на даній лабораторній роботі я ознайомилася з вивченням методів роботи з файлами на локальних дисках та з Інтернету, використанням Юнікоду при обробці текстів, нормалізацією текстів, стемінгом, лематизацією та сегментацією.


 

А также другие работы, которые могут Вас заинтересовать

79177. Гуманистические традиции философии техники. Антисциентизм и антитехницизм в их соотношении. Проблемы гуманизации современной техники 26.5 KB
  В современной философии конституируется более широкий взгляд на дегуманизацию культуры в техногенной цивилизации связанный с признанием невозможности рационализировать техническое развитие и сделать его нерепрессивным по отношению к человеку ибо техника есть естественное порождение и органичное выражение самой сущности человека плоть от плоть его отношения к миру как к объекту потребления ярчайший пример отношение к природе артикулированное в категориях природопользования где техника выступает лишь средством инструментом...
79178. Техника и технознание в контексте современной глобалистики. Техника как коммуникативная стратегия современности 28 KB
  Техника и технознание в контексте современной глобалистики. Техника как коммуникативная стратегия современности. Широкий смысл понятия техники: искусственный или организованный прием усиливающий улучшающий или облегчающий действие техника письма техника плавания техника вопросов и т. Созидательный характер техники: техника есть основание на котором стоит техногенная цивилизация: в аспекте творчества: средство реализации сущностных сил человека форма материализации потенций человека и природы во всем их многообразии; в аспекте...
79180. Этический аспект развития техники и технознания. Нравственное измерение научной деятельности и технического проектирования, проблема свободы и ответственности 15.99 KB
  Этический аспект развития техники и технознания. Вместе с тем прогресс науки и техники дает людям не только блага а многие открытия несут угрозу существованию человечества и всей жизни на Земле. 2 уровня восприятия техники: Позитивный.
79181. Теологические концепции техники. Техника как часть религиозного опыта, соотношение технознания с феноменальным и ноуменальным 12.83 KB
  Теологические концепции техники. Концепция техники как встречи с Богом Фридриха Дессауэра 1881-1963. Работы Техническая культура 1908 Философия техники. Проблема реализации 1927 Душа в сфере техники 1945 и Споры вокруг техники 1956.
79182. Философские аспекты технических инноваций. Техническое изобретение и научное открытие в их соотношении 33 KB
  Очень часто говоря о новациях имеют в виду обнаружение новых явлений как сенсационных так и достаточно рядовых. К числу новаций следует причислить также введение новых понятий и новых терминов. Можно говорить например об изменении исследовательских программ включая сюда создание новых методов и средств исследования и об изменении программ коллекторских т. о постановке новых вопросов об открытии или выделении новых явлений о появлении новых способов систематизации знания.
79183. Экологический дискурс технознания 29.5 KB
  Проблемы негативных социальных и других последствий техники проблемы этического самоопределения инженера возникли с самого момента появления инженерной профессии. Сегодня человечество находится в принципиально новой ситуации когда невнимание к проблемам последствий внедрения новой техники и технологии может привести к необратимым негативным результатам для всей цивилизации и земной биосферы. Кроме того мы находимся на той стадии научнотехнического развития когда такие последствия возможно и необходимо хотя бы частично предусмотреть и...
79184. Техника и технознание в рамках синергетической парадигмы. Техника как самоорганизующаяся система 22.5 KB
  Шеррингтон называл синергетическим или интегративным согласованное воздействие нервной системы спинного мозга при управлении мышечными движениями. Забуский в 1967 году пришёл к выводу о необходимости единого синергетического подхода понимая под этим совместное использование обычного анализа и численной машинной математики для получения решений разумно поставленных вопросов математического и физического содержания системы уравнений[3]. Синергетический подход в естествознании Основные принципы Природа иерархически структурирована в...
79185. Техника и технознание в футурологических теориях. Особенности развития техники в постиндустриальном обществе 15.58 KB
  Концепция информационного общества является разновидностью теории постиндустриального общества. Капитал и труд как основа индустриального общества уступают место информации и знанию в информационном обществе. Теория технотронного общества по З.Бжезинскому социологическая концепция исходящая из того что новые технологии и электроника являются решающим фактором социально-экономических изменений и социального прогресса конвергенции различных систем и предопределяют вступление общества в технотронную эру.