toxic-detector/tests/test_text_preprocessing.py

96 lines
5.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from app.core.text_preprocessing import preprocess_text
def test_preprocess_lowercase():
"""Тестирование преобразования текста в нижний регистр."""
input_text = "ПрИвет Мир"
expected = "привет мир"
assert preprocess_text(input_text) == expected
def test_preprocess_replace_english_letters():
"""Тестирование замены похожих английских букв на русские."""
input_text = "Hello, how are you?"
expected = "hello, how are you?" # В данном случае, поскольку 'H', 'e', 'l', 'o' заменяются на русские?
# Но согласно ENGLISH_TO_RUSSIAN_LETTERS, 'a' -> 'а', 'c' -> 'с', 'e' -> 'е', 'o' -> 'о', 'p' -> 'р', 'x' -> 'х', 'y' -> 'у', 'B' -> 'В', 'M' -> 'М', 'T' -> 'Т'
# Так как ENGLISH_TO_RUSSIAN_LETTERS не охватывает все, нужно скорректировать
# Лучше использовать пример с заменяемыми буквами
input_text = "Привет a, c, e, o, p, x, y"
expected = "привет а, с, е, о, р, х, у"
assert preprocess_text(input_text) == expected
def test_preprocess_replace_digits_in_russian_word():
"""Тестирование замены цифр '3' и '0' на 'з' и 'о' в словах с преобладанием русских букв."""
input_text = "Привет3 и 0дела"
expected = "привет з и одела"
assert preprocess_text(input_text) == expected
def test_preprocess_split_letters_digits():
"""Тестирование разделения букв и цифр в словах."""
input_text = "привет12 как дела"
expected = "привет 12 как дела"
assert preprocess_text(input_text) == expected
def test_preprocess_mixed_russian_english_letters():
"""Тестирование обработки слов с смешанными русскими и английскими буквами."""
input_text = "а3b0 привет12"
# 'a3b0' -> 'азбо' (замена 'a'->'а', '3'->'з', '0'->'о') и затем разделение букв и цифр
# Но после замены, 'a3b0' -> 'азбо', в котором нет цифр, поэтому разделения не произойдет
# Возможно, другой пример: "a3b0c" -> "азбoc" -> возможно "азбоc", но это не ясно
# Давайте использовать другой пример, где после замены остаются цифры
input_text = "a3b0c123"
# 'a3b0c123' -> 'азбоc123' (замена 'a'->'а', '3'->'з', '0'->'о'), затем разделение
# Но 'c' -> 'с', по словарю 'c' -> 'с', 'a' -> 'а'
# 'a3b0c123' -> 'азбос123' -> 'азбос 123'
expected = "азбос 123"
assert preprocess_text(input_text) == expected
def test_preprocess_no_digits():
"""Тестирование обработки текста без цифр."""
input_text = "как дела сегодня"
expected = "как дела сегодня"
assert preprocess_text(input_text) == expected
def test_preprocess_digits_not_3_or_0():
"""Тестирование замены цифр, отличных от '3' и '0'."""
input_text = "привет12 и 45дела"
expected = "привет 12 и 45дела" # Цифры '1', '2', '4', '5' не заменяются
assert preprocess_text(input_text) == expected
def test_preprocess_only_digits():
"""Тестирование обработки текста, состоящего только из цифр."""
input_text = "12345"
expected = "12345" # Нет букв, ничего не заменяется
assert preprocess_text(input_text) == expected
def test_preprocess_empty_string():
"""Тестирование обработки пустой строки."""
input_text = ""
expected = ""
assert preprocess_text(input_text) == expected
def test_preprocess_special_characters():
"""Тестирование обработки текста с особыми символами."""
input_text = "Привет! Как дела? a3b0c!"
expected = "привет! как дела? азбоc!"
# 'a3b0c' -> 'азбоc', затем разделение, но 'c' -> 'с', так что 'азбос!'
# Исправленный ожидаемый результат: "привет! как дела? азбос!"
expected = "привет! как дела? азбос!"
assert preprocess_text(input_text) == expected
def test_preprocess_multiple_spaces():
"""Тестирование обработки текста с несколькими пробелами."""
input_text = "привет 12 как дела"
expected = "привет 12 как дела"
assert preprocess_text(input_text) == expected
def test_preprocess_mixed_case_and_letters():
"""Тестирование обработки текста с разными регистрами и смешанными буквами."""
input_text = "ПрИвет a3B0C и 0DEFG"
# Приведение к нижнему: "привет a3b0c и 0defg"
# Замена похожих букв: 'a'->'а', 'b'->'б', 'c'->'с', 'y'->'у' и т.д.
# 'a3b0c' -> 'азбос'
# '0defg' -> 'одефg' (замена '0'->'о', 'd','e','f','g' остаются
# Но 'd','e','f','g' не заменены, так как они не в словаре
# Затем разделение: 'привет азбос и odefg'
expected = "привет азбос и odefg"
assert preprocess_text(input_text) == expected