Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2011-kl-lab7.doc
Скачиваний:
9
Добавлен:
12.11.2019
Размер:
871.42 Кб
Скачать
    1. Токенізатор на основі регулярних виразів в nltk

Функція nltk.regexp_tokenize()подібна до re.findall() (у випадку використання останньої для токенізаці). Але, nltk.regexp_tokenize() є більш ефективною для здійснення цієї операції, та не потребує використання круглих дужок. Для покращення читабельності регулярний вираз поділений на окремі рядки до яких доданий коментар.. Спеціальний (?x) "verbose flag" – вказує Python на те, що оператор складається з декількох частин і пробілами між ними та коментарами потрібно знехтувати.

 

>>> text = 'That U.S.A. poster-print costs $12.40...'

>>> pattern = r'''(?x) # set flag to allow verbose regexps

... ([A-Z]\.)+ # abbreviations, e.g. U.S.A.

... | \w+(-\w+)* # words with optional internal hyphens

... | \$?\d+(\.\d+)?%? # currency and percentages, e.g. $12.40, 82%

... | \.\.\. # ellipsis

... | [][.,;"'?():-_`] # these are separate tokens

... '''

>>> nltk.regexp_tokenize(text, pattern)

['That', 'U.S.A.', 'poster-print', 'costs', '$12.40', '...']

У випадку використання «verbose flag», символ ' ' пробілів потрібно замінити на \s. Функція regexp_tokenize() може містити не обов’язковий параметр gaps . Коли цей параметр має значення True, регулярний вираз виділить проміжки між словами, аналогічно до re.split().

Виконати самостійно. Перевірити правильність роботи токенізатора, порівнявши списки set(tokens).difference(wordlist)

    1. Проблеми токенізації тексту

Токенізація - це доволі складна задача, яка не має однозначного рішення. Той чи інший спосіб токенізації та що важаєти окремим словом вибираються в залежності від предметної області..

Для полегшення розробки токенізаторів існує можливість доступу до текстів, які токенізовані вручну. Порівнюючи результати токенізації з таким «gold-standard» токенізатором можна оцінити якість роботи програми. Набір корпусівNLTK включає приклади Penn Treebank , а саме тексти Wall Street Journal (nltk.corpus.treebank_raw.raw()) та їх токенізовану версію (nltk.corpus.treebank.words()).

Порядок виконання роботи

  1. Ознайомитися з теоретичними відомостями.

  2. Виконати приклади, які використовуються в теоретичних відомостях.

  3. Виконати наступні вправи.

    1. Описати, які класи стрічок відповідають наступному регулярному виразу. [a-zA-Z]+. Результати перевірити використовуючи nltk.re_show()

    2. Описати, які класи стрічок відповідають наступному регулярному виразу. [A-Z][a-z]*. Результати перевірити використовуючи nltk.re_show()

    3. Описати, які класи стрічок відповідають наступному регулярному виразу. \d+(\.\d+)?. Результати перевірити використовуючи nltk.re_show()

    4. Описати, які класи стрічок відповідають наступному регулярному виразу. ([^aeiou][aeiou][^aeiou])*. Результати перевірити використовуючи nltk.re_show()

    5. Описати, які класи стрічок відповідають наступному регулярному виразу. \w+|[^\w\s]+.. Результати перевірити використовуючи nltk.re_show()

    6. Описати, які класи стрічок відповідають наступному регулярному виразу. p[aeiou]{,2}t Результати перевірити використовуючи nltk.re_show()

    7. Написати регулярний вираз, який встановлює відповідність наступному класу стрічок: всі артиклі (a, an, the).

    8. Написати регулярний вираз, який встановлює відповідністьнаступному класу стрічок:арифметичний вираз з цілими значеннями і, який містить операції множення та додавання (2*3+8).

    9. Зберегти довільний текст у файлі corpus.txt. Визначити функцію для читання з цього файлу (назва файлу аргумент функції) і повертає стрічку, яка містить текст з файлу. Використовуючи nltk.regexp_tokenize() розробити токенізатор для токенізації різних типів пунктуації в цьому тексті. Використовувати багаторядковий запис регулярного виразу з коментарями та «verbose flag»

    10. Зберегти довільний текст у файлі corpus.txt. Визначити функцію для читання з цього файлу (назва файлу аргумент функції) і повертає стрічку, яка містить текст з файлу. Використовуючи nltk.regexp_tokenize() розробити токенізатор для токенізації різних типів виразів: грошові одиниці, дати, імена людей та організацій. Використовувати багаторядковий запис регулярного виразу з коментарями та «verbose flag».

    11. Написати функцію unknown(), яка приймає інтернет адресу як аргумент і повертає не відомі слова, які зустрічаються в тексті. При розробці функції використовувати re.findall() для виявлення всіх підстрічок та корпус Words Corpus (nltk.corpus.words) для виявлення не відомих слів.

    12. Написати регулярний вираз для токенізації такого тексту, як don't до do та n't? Пояснити чому цей регулярний вираз не працює: «n't|\w+».

    13. Напишіть програму, яка конвертує текст в Pig Latin. String->ingstray, idle->idleay. (Конвертація відбувається переміщенням приголосної або групи приголосних на початок слова та додаванням до слова ay ).

    14. Прочитати файл допомоги про функцію re.sub() використовуючи help(re.sub) . Використовуючи re.sub напишіть програму видалення HTML розмітки замінивши її на пробіли.

    15. Прочитати Додаток А. Дослідити явища описані у Додатку А використовуючи корпуси текстів та метод findall()для пошуку в токенізованому тексті.

4. Підготувати і оформити звіт.

Варіант

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Номери завдань

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

3

3

3

3

3

3

3

3

3

3

3

3

3

3

3

4

4

4

4

4

4

4

4

4

4

4

4

4

4

4

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

6

6

6

6

6

6

6

6

6

6

6

6

6

6

6

8

7

8

7

8

7

8

7

8

7

8

7

8

7

8

9

10

12

9

10

12

9

10

12

9

10

12

9

10

12

11

13

14

11

13

14

11

13

14

11

13

14

11

13

14

15

15

15

15

15

15

15

15

15

15

15

15

15

15

15

Варіант

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

Номери завдань

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

3

3

3

3

3

3

3

3

3

3

3

3

3

3

3

4

4

4

4

4

4

4

4

4

4

4

4

4

4

4

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

6

6

6

6

6

6

6

6

6

6

6

6

6

6

6

7

8

7

8

7

8

7

8

7

8

7

8

7

8

7

9

10

12

9

10

12

9

10

12

9

10

12

9

10

12

11

13

14

11

13

14

11

13

14

11

13

14

11

13

14

15

15

15

15

15

15

15

15

15

15

15

15

15

15

15

ЗМІСТ ЗВІТУ

5.1 Титульний аркуш.

5.2 Мета роботи.

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

5.4 Тексти програм на мові Python.

5.5 Висновок.

ЛІТЕРАТУРА

  1. Steven Bird, Ewan Klein, Edward Loper Introduction to Natural Language Processing. 2001-2007 University of Pennsylvania.

  2. Г. Россум, Ф.Л.Дж. Дрейк, Д.С. Откидач, М. Задка, М. Левис, С.Монтаро, Э.С.Реймонд, А.М.Кучлинг, М.-А.Лембург, К.-П.Йи, Д.Ксиллаг, Х.ГПетрилли, Б.А.Варсав, Дж.К.Ахлстром, Дж.Рокинд, Н.Шеменон, С.Мулендер. Язык программирования Python./ 2001 – 452c.

  3. Сузи Р. А. Язык программирования Python.- 206с.

  4. David Mertz Text Processing in Python Addison WesleyBiber, 2003 - 544.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]