Используйте функцию регулярного выражения на Polars

Я очищаю столбец испанского текста, используя следующую функцию, использующую 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, я думаю, что мог бы просто использовать поляры для очистки без необходимости создания вспомогательных функций.

Как я могу просто использовать полярное выражение, чтобы сделать то же самое?

Спросить: «Что вы думаете по этому поводу?» делает этот вопрос не по теме, поскольку спрашивает мнение. Каков ваш настоящий вопрос? Вы спрашиваете, как сделать все это в одном большом сложном выражении внутри поляров? Объединение всего этого в одно большое выражение может показаться разумным, но это может затруднить поддержку или добавление дополнительных функций. Перепишите, пожалуйста, последнее предложение.

AdrianHHH 30.07.2024 18:01

Только что отредактировал свой вопрос, спасибо

Simon 30.07.2024 18:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Две вещи:

  • в настоящее время regex crate не поддерживает просмотр вперед, поэтому я немного скорректировал функцию.
  • Я не думаю, что пока существует встроенная функция нормализации данных Юникода, поэтому вы можете запустить или проверить эту (недокументированную?) функцию pyarrow — pyarrow.compute.utf8_normalize() . Проверьте и этот вопрос.
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")
    )
)

Другие вопросы по теме