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

>>>

 

Висновок:

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


 

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

20758. Разработка отдельных рекомендаций по технологии изготовления поковки методами горячей объемной штамповки 511.55 KB
  Обработка металлов давлением Практическая работа № 3 Разработка отдельных рекомендаций по технологии изготовления поковки методами горячей объемной штамповки Цель работы: ознакомиться с технологическим процессом горячей объемной штамповки при изготовлении поковки на кривошипном горячештампо вочном прессе и с методикой расчетов заготовки и штампа. Эскиз поковки нанесенный на эскиз детали с указанием плоскости разъема; расчеты припусков допусков штамповочных уклонов и радиусов закругления. Расчеты и эскиз горячей поковки с облоем и...
20759. Определение режима резания лезвийным инструментом 720.87 KB
  Обработка металлов резанием Практическая работа №4 Определение режима резания лезвийным инструментом Цель работы: ознакомиться с методикой определения режима резания для лезвийной обработки точение строгание сверление зенкерование развертывание фрезерование и т. Порядок проведения Необходимым условием для назначения режимов резания является наличие разработанного технологического процесса по операциям и переходам а также паспортных данных станков. Рекомендуется соблюдать определенную последовательность назначения режимов резания....
20760. Определение твердости металлов По Бринеллю и Роквеллу 237.6 KB
  Лабораторная работа № 1 Тема: Определение твердости металлов По Бринеллю и Роквеллу Выполнил: Учащийся гр. Цель работы: ознакомиться с методами и способами испытаний твердости металлов. Методы измерения твердости: статического и ударного вдавливания царапин отскока и другие. Таблица 1 Сравнительные значения твердости...
20761. Определение механических свойств металлов при испытании на растяжение 184.58 KB
  Диаграмма растяжения низкоуглеродистой стали и схемы определения характеристик прочности Для нагрузки Рпц удлинение образца пропорционально усилию растяжения и при его снятии образец восстанавливает свои первоначальные форму и размеры; Рт усилие предела текучести физического соответствует нагрузке когда деформация образца происходит без ее увеличения;т предел текучести физический. Эти показатели определяют когда пластическая деформация образца достигает 02 от его рабочей длины l0. Усилие Pk меньше P max что...
20762. Микроскопический анализ металлов и сплавов 138.25 KB
  Если в задачу изучения микроструктуры входит определение размера зерна то рекомендуется использовать метод визуального сравнения зерен изучаемой микроструктуры при увеличении х100 со стандартной шкалой размеров зерна по ГОСТ 653982 рис. Устанавливается номер балл зерна затем по номеру используя табл.10 определяется поперечный размер зерна мм его площадь мм2 и количество зерен на площади шлифа в 1 мм2.10 Характеристика оценки зерна в зависимости от его номера Продолжение таблицы 1.
20763. Испытание свойств формовочных смесей 146.22 KB
  Литейное производство Лабораторная работа №12 Испытание свойств формовочных смесей Цель работы: изучение методов определения газопроницаемости и прочности формовочных смесей и влияния состава смеси на ее свойства. Лабораторные бегуны; лабораторный копер; технические весы с разновесами; сушильный шкаф с термометром для измерения температуры до 300 С; приборы для определения пределов прочности смеси при растяжении и сжатии; металлическая гильза с поддоном; выталкиватель; стержневой ящик; мензурка; коробка для смесей; сухой песок; формовочная...
20764. Изучение процесса сварки плавлением. Выбор режима ручной дуговой сварки конструкций из стали 267.5 KB
  Сварка металлов Лабораторная работа №14 Изучение процесса сварки плавлением. Выбор режима ручной дуговой сварки конструкций из стали Цель работы: ознакомиться с процессом зажигания и строением электрической сварочной дуги обозначением покрытых электродов устройством и работой сварочного трансформатора и выпрямителя выбором режима и технологии дуговой сварки покрытыми электродами. Классификация и обозначение покрытых электродов для ручной дуговой сварки Покрытые электроды для ручной дуговой сварки классифицируют по назначению виду и толщине...
20765. Выбор режима полуавтоматической дуговой сварки в углекислом газе 181.34 KB
  Общие сведения 1 Cущность промесса дуговой сварки в углекислом газе Дуговая сварка в углекислом газе является одним из способов сварки в защитных газах. Зашита расплавленного металла сварочной ванны осуществляется струей углекислого газа подаваемого в зону дуги в зазор между мундштуком 2 и соплом 3 горелки для дуговой сварки. Для сварки используется техническая углекислота Рис.
20766. Анализ влияния режима автоматической дуговой сварки под флюсом на форму и размеры шва 179.25 KB
  Сущность процесса дуговой сварки под флюсом Сварка под флюсом выполняется электрической дугой горящей под толстым 3050 мм слоем гранулированного плавленного или керамического сварочного флюса. При автоматической сварке электродная проволока со скоростью равной скорости ее плавления подается в зону сварки осуществляется подача флюса в требуемом количестве и перемещение трактора вдоль кромок свариваемых заготовок с требуемой скоростью сварки рис. Схемы процесса сварки а и электрической дуги б под флюсом При горении дуги 3 рис.