Пакет re: re.match, re.findall, re.split. и re.sub
Здравствуйте, любители НЛП! Сегодня мы углубимся в важную тему NLP, которая касается эффективного извлечения текстовых шаблонов из текстов, а именно регулярных выражений. Наслаждаться! 😄
Что такое регулярные выражения
Регулярное выражение (также известное как регулярное выражение или регулярное выражение) — это последовательность символов, которая задает шаблон поиска в тексте. Обычно такие шаблоны используются алгоритмами поиска строк для операций найти или найти и заменить над строками или для проверки ввода.
Когда специалист по данным сталкивается с проблемой обработки текста, будь то поиск названий в именах или дат рождения в наборе данных, регулярные выражения являются правильным инструментом для использования. Они являются частью основных техник НЛП, и их изучение также сделает вас более эффективным программистом.
Варианты использования регулярных выражений
Регулярные выражения используются в различных задачах, таких как:
- Предварительная обработка данных;
- Системы добычи информации на основе правил;
- сопоставление с образцом;
- Текстовая функция Инженерия;
- веб-скрапинг;
- Валидация данных;
- Извлечение данных.
Пример использования — извлечение всех хэштегов из твита или получение адресов электронной почты или номеров телефонов из большого неструктурированного текстового контента.
Регулярные выражения с Python
Python предоставляет удобный встроенный модуль для управления регулярными выражениями: re
. Мы можем импортировать ее так же, как импортируем любую другую библиотеку Python.
Обычно самое сложное в регулярных выражениях — это научиться (и запомнить), как их создавать, чтобы они соответствовали нужному шаблону.
Основные персонажи
Прежде всего, можно искать вхождения шаблона в строку, используя функцию search
модуля re
. Эта функция возвращает объект сопоставления, содержащий совпадающую подстроку (или None
, если она не существует) и ее позицию внутри исходной строки.
При указании шаблона регулярного выражения мы обычно добавляем перед ним символ r
, что означает, что строка должна рассматриваться как необработанная строка и, следовательно, все escape-коды будут игнорироваться. Например, "\n"
— это строка с символом \n
, тогда как r"\n"
— это строка с символами \
и n
.
Начнем с основных символов регулярных выражений и некоторых примеров:
^
: Соответствует выражению справа от него в начале строки до того, как будет найден разрыв строки;$
: Соответствует выражению слева от него в конце строки до того, как будет найден разрыв строки;.
: соответствует любому символу, кроме новой строки;a
: соответствует ровно одному символуa
;ab
: соответствует строкеab
.
Функции регулярных выражений
В этом разделе мы видим другие основные функции, обычно используемые модулем re
.
Функция match
похожа на search
, но она только пытается сопоставить шаблон в начале целевой строки.
Функции findall
и finditer
ищут все совпадения с шаблоном в целевой строке (тогда как search
и match
ищут только первое вхождение). Первый возвращает список, а второй возвращает итератор.
Функции sub
и subn
находят шаблоны в целевой строке и заменяют их другой строкой. Функция sub
заменяет только первое вхождение шаблона, а subn
заменяет первые n
вхождения.
Функция compile
компилирует регулярное выражение в объект регулярного выражения, что обеспечивает кэширование и более быстрое сопоставление с образцом. Функция split
похожа на функцию разделения Python, но разделяется в соответствии с шаблонами регулярных выражений.
квантификаторы
Давайте теперь посмотрим, как использовать квантификаторы:
a|b
: Соответствует выражениюa
илиb
. Еслиa
соответствует первому,b
не проверяется;+
: Соответствует выражению слева от него 1 или более раз;*
: Соответствует выражению слева от него 0 или более раз;?
: Соответствует выражению слева от него 0 или 1 раз.
{p}
: соответствует выражению слева ровноp
раз;{p, q}
: Соответствует выражению слева от него отp
доq
раз;{p, }
: соответствует выражению слева от негоp
или более раз;{, q}
: Соответствует выражению слева доq
раз.
Классы персонажей
Вы можете использовать регулярные выражения для сопоставления классов символов, таких как слова, числа, знаки препинания и т. д.
\w
: Соответствует буквенно-цифровым символам, то есть az, A-Z, 0–9 и символу подчеркивания (_);\W
: Соответствует не буквенно-цифровым символам, кроме a-z, A-Z, 0–9 и _;\d
: Соответствует цифрам от 0 до 9;\D
: Соответствует любым нецифрам;\s
: Соответствует пробельным символам, которые также включают \t, \n, \r и пробельные символы;\S
: Соответствует непробельным символам.
\n
: соответствует символу новой строки;\t
: соответствует символу табуляции;\b
: соответствует границе слова (или пустой строке) в начале и в конце слова;\B
: Соответствует там, где\b
не соответствует, это не граница слова.
Наборы
Наборы регулярных выражений можно использовать для сопоставления с шаблоном или другим шаблоном.
[abc]
: соответствуетa
,b
илиc
. Не соответствуетabc
;[a-z]
: соответствует любому алфавиту от a до z;[A-Z]
: Соответствует любому заглавному алфавиту от A до Z;[a\-p]
: Соответствует a, - или p. Он соответствует, потому что \ ускользает от него;[-z]
: Соответствует - или z;[a-z0–9]
: Соответствует символам от a до z или от 0 до 9.
[(+*)]
: специальные символы внутри набора становятся буквальными, поэтому это соответствует (, +, * или );[^ab5]
: Добавление ^ исключает любой символ из набора. Здесь он соответствует символам, отличным от a, b или 5;\[a\]
: соответствует [a], поскольку обе скобки [ ] экранированы;
Группы
Можно использовать одно регулярное выражение для извлечения нескольких шаблонов из строк.
()
: Соответствует выражению в скобках и группирует его, которое мы можем захватить по мере необходимости. Несколько групп могут быть сопоставлены одновременно.
Смотрите вперед и смотрите за утверждениями
С утверждениями просмотра вперед и назад можно извлечь определенные шаблоны из строки, только если этому шаблону предшествует другой шаблон или следует за ним.
A(?=B)
: Это соответствует выражению A, только если за ним следует B. (Утверждение положительного просмотра вперед)A(?!B)
: Это соответствует выражению A, только если за ним не следует B. (Утверждение отрицательного просмотра вперед)
(?<=B)A
: Это соответствует выражению A, только если B находится непосредственно слева от него. (Позитивный взгляд за утверждением)(?<!B)A
: Это соответствует выражению A, только если B не находится сразу слева от него. (Отрицательный взгляд за утверждением)
Выводы и дальнейшие шаги
В этой статье мы увидели основные функции пакета re
, а также множество инструкций и примеров о том, как создавать регулярные выражения.
Возможные следующие шаги:
- Узнайте о различиях между регулярными выражениями и контекстно-свободными грамматиками.
- Узнайте больше о сопоставлении с образцом, прочитав
re
документацию.
Спасибо за чтение! Если вы хотите узнать больше о НЛП, не забудьте подписаться на NLPlanet в Medium, LinkedIn и Twitter!