Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

Информатика, программирование->Лабораторная работа
За допомогою операції присвоєння відбувається копіювання значення виразу іншій змінній, хоча насправді, значення структурованого об’єкту, наприклад та...полностью>>
Информатика, программирование->Лекция
Экспертным знаниям, как правило, присуща неопределенность. В инженерии знаний принято выделять различные типы неопределенности знаний: неполнота, нето...полностью>>
Информатика, программирование->Контрольная работа
Программы на языке Си обычно состоят из большого числа отдельных функций (подпрограмм). Как правило, эти функции имеют небольшие размеры и могут наход...полностью>>
Информатика, программирование->Контрольная работа
Успех программы часто зависит от удачного выбора способа представления данных. С помощью структур возможно моделировать сложные объекты, возникающие п...полностью>>

Главная > Лабораторная работа >Информатика, программирование

Сохрани ссылку в одной из сетей:

Мета робота

Використання регулярних виразів для обробки текстів.

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

Виконанні цієї лабораторної роботи необхідно розпочати з:

>>> from __future__ import division

>>> import nltk, re, pprint

1. Регулярні вирази

Розглянутих раніше стандартних можливостей для роботи з текстом є недостатньо. Наприклад, в методах find() і replace() задається лише одна стрічка. В реальних завданнях така однозначність зустрічається досить рідко, частіше потрібно знайти або замінити стрічки, що відповідають деякому шаблону.

Регулярні вирази (regular expressions) описують множину стрічок, використовуючи спеціальну мову, яка зараз і буде розглянута.

Стрічка, в якій задано регулярний вираз будемо називати шаблоном.

Для роботи з регулярними виразами в Python використовується модуль re. В наступному прикладі регулярний вираз допомагає виділити з тексту всі числа:

>>> import re

>>> pattern = r"[0-9]+"

>>> number_re = re.compile(pattern)

>>> number_re.findall("122 234 65435")

['122', '234', '65435']

В даному прикладі шаблон pattern описує множину стрічок, які складаються з одного або більше символів з набору "0", "1" ..., "9" . Функція re.compile() компілює шаблон в спеціальний Regex-об'єкт, який має декілька методів, зокрема метод findall() для отримання списку всіх непересічних входжень стрічок, що задовольняють шаблону, до заданої стрічки.

Те ж саме можна було зробити і так:

>>> import re

>>> re.findall(r"[0-9]+", "122 234 65435")

['122', '234', '65435']

1.1. Синтаксис регулярного виразу

Частина символів (в основному букви і цифри) позначають самі себе. Стрічка задовольняє (відповідає) шаблону, якщо вона входить в множину стрічок, які цей шаблон описує.

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

Символи, що мають спеціальне значення в запису регулярних виразів:

Символ

Що позначає в регулярному виразі

"."

Будь-який символ

"^"

Початок рядка

"$"

Кінець рядка

"*"

Повторення фрагмента нуль або більше разів (жадібне)

"+"

Повторення фрагмента один або більше разів (жадібне)

"?"

Попередній фрагмент або присутній, або відсутній

"{m,n}"

Повторення попереднього фрагмента від m до n разів включно (жадібне)

"[...]"

Будь-який символ з набору в дужках. Можна задавати діапазони символів з тими, що йдуть підряд кодами, наприклад: a-z

"[^...]"

Будь-який символ не з набору в дужках

"\"

Зворотна коса межа відміняє спеціальне значення наступного за нею символу

"|"

Фрагмент справа або фрагмент зліва

"*?"

Повторення фрагмента нуль або більше разів (не жадібне)

"+?"

Повторення фрагмента один або більше разів (не жадібне)

"{m,n}?"

Повторення попереднього фрагмента від m до n разів включно (не жадібне)

Якщо A і B - регулярні вирази, то їх конкатенація AB є новим регулярним виразом, причому конкатенація рядків а і b задовольнятиме AB, якщо а задовольняє A і b задовольняє B. Можна вважати, що конкатенація - основний спосіб складання регулярних виразів.

Дужки, описані нижче, застосовуються для завдання пріоритетів і виділення груп (фрагментів тексту, які потім можна отримати по номеру або із словника, і навіть послатися в тому ж регулярному виразі).

Алгоритм, який зіставляє рядки з регулярним виразом, перевіряє відповідність того або іншого фрагмента рядка регулярному виразу. Наприклад, рядок "a" відповідає регулярному виразу "[a-z]", рядок "fruit" відповідає "fruit|vegetable", а ось рядок "apple" не відповідає шаблону "pineapple".

У таблиці нижче замість регвир може бути записаний регулярний вираз, замість ім'я - ідентифікатор, а прапори будуть розглянуті нижче.

Позначення

Опис

"(регвир)"

Виокремлює регулярний вираз в дужках і виділяє групу

"(?:регвир)"

Виокремлює регулярний вираз в дужках без виділення групи

"(?=регвир)"

Погляд вперед: рядок повинен відповідати заданому регулярному виразу, але подальше порівняння з шаблоном почнеться з того ж місця

"(?!регвир)"

То ж, але із запереченням відповідності

"(?<=регвир)"

Погляд назад: рядок повинен відповідати, якщо до цього моменту відповідає регулярному виразу. Не займає місця в стрічці, до якї застосовується шаблон. Параметр регвир повинен бути фіксованої довжини (тобто, без "+" і "*")

"(?

То ж, але із запереченням відповідності

"(?P<имя>регвир)"

Виділяє іменовану групу з ім'ям ім'я

"(?P=і’мя)"

Точно відповідає виділеній раніше іменованій групі з ім'ям ім'я

"(?#регвир)"

Коментар (ігнорується)

"(?(ім'я)рв1|рв2)"

Якщо група з номером або ім'ям ім'я опинилася визначена, результатом буде порівняння з рв1, інакше - з рв2. Частина |рв2 може бути відсутньою

"(?прапор)"

Задає прапор для всього даного регулярного виразу. Прапори необхідно задавати на початку шаблону

У таблиці нижче описані спеціальні послідовності, що використовують зворотній слеш:

Послідовність

Чому відповідає

"\1" - "\9"

Група з вказаним номером. Групи нумеруються, починаючи з 1

"\A"

Проміжок перед початком всього рядка (майже аналогічно "^")

"\Z"

Проміжок перед кінцем всього рядка (майже аналогічно "$")

"\b"

Проміжок між символами перед словом або після нього

"\B"

Навпаки, не відповідає проміжку між символами на границі слова

"\d"

Цифра. Аналогічно "[0-9]"

"\s"

Будь-який пробільний символ. Аналогічно "[\t\n\r\f\v]"

"\S"

Будь-який непробільний символ. Аналогічно "[^\t\n\r\f\v]"

"\w"

Будь-яка цифра або буква (залежить від прапора LOCALE)

"\W"

Будь-який символ, що не є цифрою або буквою (залежить від прапора LOCALE)

Прапорці, що використовуються з регулярними виразами:

"(?i)", re.I, re.IGNORECASE

Порівняння проводиться без врахування регістра букв.

"(?L)", re.L, re.LOCALE

Впливає на визначення букви в "\w", "\W", "\b", "\B" залежно від поточного культурного середовища (locale).

"(?m)", re.M, re.MULTILINE

Якщо цей прапор заданий, "^" і "$" відповідають початку і кінцю будь-якого рядка.

"(?s)", re.S, re.DOTALL

Якщо заданий, "." відповідає також і символу кінця рядка "\n".

"(?x)", re.X, re.VERBOSE

Якщо заданий, пробільні символи, не екрановані в шаблоні зворотною косою межею, є незначущими, а все, що розташоване після символу "#" -- коментарі. Дозволяє записувати регулярний вираз в декілька рядків для поліпшення його читаності і запису коментарів.

"(?u)", re.U, re.UNICODE

У шаблоні і в рядку використаний Unicode.

2. Використання регулярних виразів для виявлення слів за заданими шаблонами.

Багато задач лінгвістичних досліджень передбачають встановлення відповідності заданому шаблону. Наприклад, можна знайти слова, які закінчуються на “ed” використовуючи метод endswith('ed'). Подібні методи перевірки слів перелічені в Таблиці Методичних вказівок до лабораторної роботи №2. Регулярні вирази є більш потужним і гнучким методом опису шаблонів символів, які необхідно виявити у послідовностях символів.

Регулярний вираз (вислів) (в програмуванні) — це рядок що описує або збігається з множиною рядків, відповідно до набору спеціальних синтаксичних правил. Регулярні вислови використовуються в багатьох текстових редакторах та допоміжних інструментах для пошуку та зміни тексту на основі заданих шаблонів.

Для роботи з регулярними виразами у Python потрібно імпортувати бібліотеку re скориставшись: import re. Корпус слів англійської мови Words Corpus буде використовуватися в якості лінгвістичних даних серед яких буде проводитися пошук. Попередня підготовка списку слів передбачає видалення власних імен.

>>> import re

>>> wordlist = [w for w in nltk.corpus.words.words('en') if w.islower()]

2.1. Використання основних метасимволів (операторів повтору).

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

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

Пошук слів із закінченням ed можна здійснити використовуючи регулярний вираз «ed$». Потрібно використати функцію re.search(p, s), яка перевіряє чи може зразок p бути знайдений у будь-якому місці стрічки s. Потрібно визначити символи, які шукаємо та використати символ долара , який в регулярних виразах позначає кінець слова:

>>> [w for w in wordlist if re.search('ed$', w)]

['abaissed', 'abandoned', 'abased', 'abashed', 'abatised', 'abed', 'aborted', ...]

Символ ”.” універсальний символ , якому відповідає будь-який один символ. Нехай потрібно знайти слова з восьми літер, де j – третя літера та t – шоста літера. При створенні регулярного виразу у місцях де може бути будь-який символ вказується крапка. Символ ”^” вказує на початок стрічки:

>>> [w for w in wordlist if re.search('^..j..t..$', w)]

['abjectly', 'adjuster', 'dejected', 'dejectly', 'injector', 'majestic', ...]

Виконати самостійно. Повторіть попередній приклад використовуючи регулярний вираз «..j..t..». Результати порівняйте.

Символ “ ? “ вказує на те що попередній символ не є обовязковим. Вираз «^e-?mail$» відповідає двом стрічкам email та e-mail. Можна знайти загальну кількість таких стрічок (врахувавши різні способи їх запису) у будь-якому тексті скориставшись sum(1 for w in text if re.search('^e-?mail$', w)).



Загрузить файл

Похожие страницы:

  1. Вивчення основ програмування на мові Python. Регулярні вирази для обробки текстів

    Лабораторная работа >> Информатика, программирование
    ... Використання регулярних виразів для обробки текстів Короткі теоретичні відомості Синтаксис регулярних висловів залежить від інтерпретатора, що використовується для їх обробки ... , а також навчилась використовувати регулярні вирази для опрацювання текстів.
  2. Використання програмних технологій в аудиті

    Конспект >> Информатика, программирование
    ... інструмента — наприклад, для оформлення текстів та таб лиць в ... ігнорують факт використан ня комп'ютера для обробки облікової ... профілактика апаратного забезпечення; • регулярне оновлення парку апаратних засобів; ... редактора логічних виразів (Equation Editor) ...
  3. Капітал підприємства та його ефективне використання

    Лекция >> Экономическая теория
    ... ресурси не придатні для їх використання у виробництві альтернативних ... потреби в матеріалах, регулярність апуску у виробництво, ... ; музичні твори з текстом і без тексту; 4) драматичні, музично- ... чні обробки творів і обробки фольклору, придатні для сценіч­ного ...
  4. Управління використанням Інтеренет-технологій на прикладі ТОВ Агенція Горящих Путівок

    Дипломная работа >> Информатика, программирование
    ... чний ланцюжок формування і обробки туристичної інформації, ... як в грошовому виразі, так і в ... його підрозділів; регулярність оновлення і ... можуть бути використані для подальшого покращення ... , В. Б. Практикум по Интернет-технологиям [Текст] / В. Б. Попов. – СПб ...
  5. Розвиток творчих здібностей молодших школярів у роботі над текстом на уроках української мови в початкових

    Магистерская работа >> Педагогика
    ... ії можуть бути використані і в інших стилях. Але типовим, регулярним є їх використання саме в науковому ... Для такого тексту властиве також використання експресивно-емоційних слів та виразів, ... задуму, але й певну його обробку, організацію, впорядкування. Добре ...

Хочу больше похожих работ...

Generated in 0.0014030933380127