Обложка канала

R4marketing | канал Алексея Селезнёва | Язык R

Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.

R4marketing | канал Алексея Селезнёва | Язык R

3 года назад
Открыть в
qdapRegex - извлечение, замена и удаление частей текста Регулярные выражение инструмент достаточно мощный, но в тоже время и довольно непростой в понимании. Поэтому, для извлечения/удаления/замены каких-то базовых паттернов в тексте, например имейлов, номеров телефонов, почтовых индексов. чисел, дат, аббревиатур и т.д. можно использовать пакет qdapRegex. Каждая из функций пакета имеет приставку, в зависимости от её назначения: ● ex_*() - извлечение части текста ● rm_*() - удаление / замена части текста Например, в одном из постов канала я показал, как с помощью регулярных выражений удалить часть текста между двумя символами, задача казалось бы простая, но регулярное выражение для её выполнения будет не самым простым, а пакет qdapRegex решает такие задачи очень просто:
library(qdapRegex)

x <-  "I like [bots] (not)."

rm_between(x, "(", ")")
ex_between(x, "(", ")")
rm_between(x, c("(", "["), c(")", "]"))
ex_between(x, c("(", "["), c(")", "]"))

Если вам не удалить, а заменить часть текста используйте аргумент replacement:
rm_between(x, "[", "]",replacement = "humans")

Ниже приведу набор наиболее полезных функций: ● (ex|rm)__between() - часть текста между указанными символами ● (ex|rm)_hash() - хештеги ● (ex|rm)_tag() - именные теги (@username) ● (ex|rm)_url() - извлечение ссылок из текста ● (ex|rm)_email() - имейлы ● (ex|rm)_phone() - номера телефонов ● (ex|rm)_emoticon() - смайлы ● (ex|rm)_bracket() - текст внутри квадратных, фигурных или круглых скобок ● (ex|rm)_curly() - текст внутри фигурных скобок ● (ex|rm)_round() - текст внутри круглых скобок ● (ex|rm)_square() - текст внутри квадратных скобок ● (ex|rm)_number() - числа ● (ex|rm)_time() - время ● (ex|rm)_date() - даты ● (ex|rm)_non_words() - не слова ● (ex|rm)_nchar_words() - слова более заданной длинны ● (ex|rm)_repeated_characters() - повторяющиеся символы И это не полный набор функций, пакет будет крайне полезен для очистки текста. или извлечения нужной информации из неструктурированного текста, например из имейлов, или комментариев.
# пример текста
text <- "@alex привет, отправь 12.07.2023 @john информацию о стоимости #iphone на почту [email protected] потом позвони мне (067)123-45-67"

ex_date(text)  # извлекаем дату
ex_email(text) # извлекаем имейл
ex_hash(text)  # извлекаем хеш
ex_tag(text)   # извлекаем теги
ex_phone(text) # извлекаем номер телефона?

Все функции под капотом используют американский словарь регулярных выражений, получить его можно командой data(regex_usa). Но вы можете создать и использовать собственный словарь регулярных выражений, в примере выше мы не смогли извлечь номер телефона, потому что его описание в тексте не соответствует американскому словарю регулярных выражений, давай создадим свой словарь:
# создаём словарь
regex_dict <- list("rm_phone" = "\\(\\d{3}\\)\\d{1,4}-\\d{1,4}-\\d{1,4}")
# устанавливаем пользовательский словарь по умолчанию
options("regex.library" = regex_dict)
# используем словарь и паттерн из него
ex_phone(text, pattern = "@rm_phone")

Пользуйтесь! #заметки_по_R