Я очищаю столбец испанского текста, используя следующую функцию, использующую re
и unicodedata
:
def CleanText(texto: str) -> str:
texto = texto.lower()
texto = ''.join((c for c in unicodedata.normalize('NFD', texto) if unicodedata.category(c) != 'Mn'))
texto = re.sub(r'[^a-z0-9 \n\.,]', '', texto)
texto = re.sub(r'([.,])(?![\s])', r'\1 ', texto)
texto = re.sub(r'\s+', ' ', texto).strip()
texto = texto.replace('.', '')
texto = texto.replace(',', '')
return texto
А затем я применяю это к своему Dataframe
, используя:
(
df
.with_columns(
pl.col("Comment").map_elements(CleanText,return_dtype=pl.String).alias("CleanedText")
)
)
Однако, поскольку поляры принимают regex crate
, я думаю, что мог бы просто использовать поляры для очистки без необходимости создания вспомогательных функций.
Как я могу просто использовать полярное выражение, чтобы сделать то же самое?
Только что отредактировал свой вопрос, спасибо
Две вещи:
regex crate
не поддерживает просмотр вперед, поэтому я немного скорректировал функцию.def CleanExpr(texto: pl.Expr) -> pl.Expr:
texto = texto.str.to_lowercase()
#texto = ''.join((c for c in unicodedata.normalize('NFD', texto) if unicodedata.category(c) != 'Mn'))
texto = texto.str.replace_all(r'[^a-z0-9 \n\.,]', '')
texto = texto.str.replace_all('.', ' ', literal=True)
texto = texto.str.replace_all(',', ' ', literal=True)
texto = texto.str.replace_all(r'\s+', ' ').str.strip_chars()
texto = texto.str.replace_all('.', '', literal=True)
texto = texto.str.replace_all(',', '', literal=True)
return texto
(
df
.with_columns(
CleanExpr(pl.col("Comment")).alias("CleanedText")
)
)
Спросить: «Что вы думаете по этому поводу?» делает этот вопрос не по теме, поскольку спрашивает мнение. Каков ваш настоящий вопрос? Вы спрашиваете, как сделать все это в одном большом сложном выражении внутри поляров? Объединение всего этого в одно большое выражение может показаться разумным, но это может затруднить поддержку или добавление дополнительных функций. Перепишите, пожалуйста, последнее предложение.