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

>>>

 

Висновок:

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


 

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

7953. Специальная педагогика. Учебное пособие 2.02 MB
  На страницах американских педагогических журналов пятнадцать лет назад обсуждались проблемы взаимодействия массового образования и образования лиц с недостатками в развитии (инвалидов). Отмечалась изолированность одной системы от другой, нежелание у...
7954. Педагогика. Учебник 2.86 MB
  В учебном пособии раскрываются антропологические, аксиологические основы педагогики, теория и практика целостного педагогического процесса организационно-деятельнсстные основы формирования базовой культуры школьника. Дается характеристика педагогич...
7955. Психология и педагогика. Учебник для вузов 2.69 MB
  Учебник представляет собой компактный и высокоинформативный очерк психологии и педагогики. Эта книга задумана как попытка удовлетворить любознательность и потребность студентов в знаниях о психологии человека, механизмах и закономерностях памяти...
7956. Педагогика для студентов педагогических учебных заведений 3.18 MB
  ПЕДАГОГИКА Пособие создано с учетом закономерностей развития и формирования у будущих учителей педагогического профессионализма. В пособие включены материалы не только школьной, но и вузовской дидактики, что расширяет возможности свободы выбора студ...
7957. Поисковая оптимизация - SEO 137 KB
  Введение. Цели курса. Кто такие оптимизаторы. Спрос на услуги оптимизации порождает рост предложения. Для кого же делают сайты? Белое и черное в работе оптимизатора. Виды сайтов, их аудитория, источники входящего потока посети...
7958. Предмет і метод політичної економії 421 KB
  Предмет і метод політичної економії 1. Предмет політичної економії: а) зародження і розвиток предмету б) трактування різними школами в) економічні категорії і закони. 2. Методи економічних досліджень. 3. Функції політичної економії: а) основ...
7959. Культурология. Лекции. Предмет и функции культурологии 498.5 KB
  Тема № 1. Предмет и функции культурологи. История становления представлений о культуре. Культура относится к числу древнейших явлений человеческой жизни. Однако интерес к ее изучению и осмыслению как особого явления действительности сложился относит...
7960. Понятие, сущность и классификация страхования 615 KB
  Понятие, сущность и классификация страхования Понятие и сущность страхования Понятие и сущность Страхование - это отношения по защите имущественных интересов граждан и юридических лиц при наступлении определенных непредвиденных неблагоприятных ...
7961. Ґендерні стереотипи 30.37 KB
  Ґендерні стереотипи Мета: розвивати в учнів критичне ставлення щодо стереотипів, успадкованих нами з культури, та щодо образів, тиражованих засобами масової інформації проаналізувати поширені в суспільстві упередження про те, що означає бути чолові...