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

>>>

 

Висновок:

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


 

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

46843. Основные принципы построения закладываемые при создании вычислительных систем 32.83 KB
  Вычислительная система ВС совокупность взаимосвязанных и взаимодействующих процессоров или ЭВМ периферийного оборудования и программного обеспечения предназначенную для сбора хранения обработки и распределения информации. Телекоммуникационная вычислительная сеть ТВС это сеть о6мена и распределенной обработки информации образуемая множеством взаимосвязанных абонентских систем и средствами связи; средства передачи и обработки информации ориентированы в ней на коллективное использование общесетевых ресурсов аппаратных...
46844. Творчество Н.М.Карамзина, повести 33 KB
  Карамзин представитель сентиментализма в России всязи с этим новизной его прозы являются: 1. Карамзин ввел в русскую литературу целый ряд важных тем. Идеологические аспекты дружбы важные для Радищева отходят у Карамзина на второй план. Карамзин сумел показать атмосферу детства навсегда ушедшую из души взрослого человека но в чемто и оставшуюся притягательную и желанную.
46845. Роль и место текстологии в процессах редакционно-издательской деятельности 33 KB
  текста 2 проверки его по первоисточникам и устранения в нем погрешностей ошибок произвольных изменений внесенных вопреки воле и замыслу автора. текста напр. текста аппарата издания. Но он не может быть признан основным чисто механически; для этого требуется изучение всех источников текста обстоятельств жизни автора всей истории текста и т.
46846. Классический психоанализ З.Фрейда. Основные понятия, структура и динамика личности. Стадии психосексуального развития 33 KB
  Фрейд все стадии психического развития человека сводит к стадиям преобразования и перемещения по разным эрогенным зонам либидоносной или сексуальной энергии. Каждая стадия имеет свою либидоносную зону возбуждение которой создает либидоносное удовольствие. Оральная стадия 0 1 год. Оральная стадия характеризуется тем что основной источник удовольствия а следовательно и потенциальной фрустрации сосредоточивается на зоне активности связанной с кормлением.
46848. Two-member and one-member sentences. One-member and elliptical sentences. Two approaches. Types of elliptical sentences 33 KB
  Twomember nd onemember sentences. Onemember nd ellipticl sentences. Types of ellipticl sentences. Twomember sentences