Я уже задавал вопрос о регулярном выражении, касающийся замены определенных шаблонов ( Регулярное выражение: сопоставление с конкретным шаблоном, исключение, если сопоставление происходит в определенном контексте ). Все это делается для предварительной обработки текстовых данных для обучения.
Теперь я хотел бы использовать регулярные выражения для замены всего, кроме букв Юникода во фрейме данных Pandas. Я использовал
чтобы получить выражение регулярного выражения, которое, кажется, решает мою проблему \p{^L}+
. Позже я понял, что нашел выражение, которое будет работать в Perl (Perl-совместимые регулярные выражения [PCRE]), не обязательно в Python. Я нашел пакет regex , который также поддерживает это выражение. Тем не менее, панды, похоже, еще не поддерживают регулярные выражения, или я использовал его неправильно:
import regex
import pandas as pd
df = pd.DataFrame({"text": ["Room: 25m²", "I have eaten ¼ of the cake."]})
df["text"] = df["text"].str.replace(regex.compile("\p{^L}+"), " ")
# Returns a TypeError: object of type '_regex.Pattern' has no len()
Поэтому я попытался найти способы использовать пакет re. Я нашел ответ здесь. Поэтому я использовал это так:
import re
import pandas as pd
df = pd.DataFrame({"text": ["Room: 25m²", "I have eaten ¼ of the cake."]})
df["text"] = df["text"].str.replace("[\W\d_]", " ")
Он заменяет множество специальных символов. Он не заменяет выражение с m на степень 2 или выражение, в котором мы имеем дробь. Оба символа, которые я бы не видел как буквы, а скорее цифры или специальные символы в юникоде. Итак, как я могу справиться с этими специальными персонажами? Это возможно с повторным пакетом? Я не хотел бы использовать конкретные юникоды, чтобы соответствовать этим случаям. Если возможно, общее решение будет оценено.