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