Исходный код recs_searcher.preprocessing._base_clear

"""
Алгоритмы для чистки текста.
"""


from typing import List
import re
import string
from ..base import BaseTransformation
import spacy


[документация] class TextLower(BaseTransformation): """Алгоритм привод текст к нижнему регистру.""" def __init__(self): super().__init__()
[документация] def _transform(self, array: List[str]) -> List[str]: transformed_array = [] for text in array: text = text.lower() transformed_array.append(text) return transformed_array
[документация] class RemovePunct(BaseTransformation): """Алгоритм удаляет все пунктуационные знаки из текста.""" def __init__(self): super().__init__() self._whitespaces = ''.join([' ' for _ in range(len(string.punctuation))])
[документация] def _transform(self, array: List[str]) -> List[str]: transformed_array = [] for text in array: text = text.translate(str.maketrans(string.punctuation, self._whitespaces, '')) transformed_array.append(text) return transformed_array
[документация] class RemoveNumber(BaseTransformation): """Алгоритм удаляет все числа из текста.""" def __init__(self): super().__init__()
[документация] def _transform(self, array: List[str]) -> List[str]: transformed_array = [] for text in array: text = re.sub(r'\d+', "", text) transformed_array.append(text) return transformed_array
[документация] class RemoveWhitespace(BaseTransformation): """Алгоритм удаляет все лишние пробелы в тексте.""" def __init__(self): super().__init__()
[документация] def _transform(self, array: List[str]) -> List[str]: transformed_array = [] for text in array: text = text.replace(' ', ' ').strip() transformed_array.append(text) return transformed_array
[документация] class RemoveHTML(BaseTransformation): """Алгоритм удаляет всю HTML-разметку из текста.""" def __init__(self): super().__init__() self._pattern = re.compile('<.*?>')
[документация] def _transform(self, array: List[str]) -> List[str]: transformed_array = [] for text in array: text = re.sub(self._pattern, '', text) transformed_array.append(text) return transformed_array
[документация] class RemoveURL(BaseTransformation): """Алгоритм удаляет все ссылки из текста.""" def __init__(self): super().__init__() self._pattern = re.compile(r'https?://\S+|www\.\S+')
[документация] def _transform(self, array: List[str]) -> List[str]: transformed_array = [] for text in array: text = re.sub(self._pattern, '', text) transformed_array.append(text) return transformed_array
[документация] class RemoveEmoji(BaseTransformation): """Алгоритм удаляет все эмодзи из текста.""" def __init__(self): super().__init__() self._pattern = re.compile("[" u"\U0001F600-\U0001F64F" # смайлики. u"\U0001F300-\U0001F5FF" # символы и пиктограммы. u"\U0001F680-\U0001F6FF" # транспорт и символы на карте. u"\U0001F1E0-\U0001F1FF" # флаги (iOS). "]+", flags=re.UNICODE)
[документация] def _transform(self, array: List[str]) -> List[str]: transformed_array = [] for text in array: text = re.sub(self._pattern, '', text) transformed_array.append(text) return transformed_array
[документация] class SpacyClear(BaseTransformation): """Сборный алгоритм предобработки текстовых данных, основанный на библиотеке `Spacy`.""" def __init__(self, spacy_model_name: str, remove_punct: bool = True, remove_url: bool = True, remove_email: bool = True, remove_digit: bool = True, remove_quote: bool = True, remove_num: bool = True, remove_space: bool = True, ): super().__init__() self._remove_punct = remove_punct self._remove_url = remove_url self._remove_email = remove_email self._remove_digit = remove_digit self._remove_quote = remove_quote self._remove_num = remove_num self._remove_space = remove_space try: self._spacy_model = spacy.load(spacy_model_name) except OSError: print(f'Downloading {spacy_model_name}...') spacy.cli.download(spacy_model_name) self._spacy_model = spacy.load(spacy_model_name)
[документация] def _transform(self, array: List[str]) -> List[str]: transformed_array = [] for text in array: cleared_text = [] doc = self._spacy_model(text) for token in doc: if self._remove_punct and token.is_punct: continue # Удаление ссылки. elif self._remove_url and token.like_url: continue # Удаление почтового адреса. elif self._remove_email and token.like_email: continue # Удаление чисел. elif self._remove_digit and token.is_digit and self._remove_num and token.like_num: continue # Удаление ковычки. elif self._remove_quote and token.is_quote: continue # Удаление пробелов и `\n`. elif self._remove_space and token.is_space: continue cleared_text.append(token.text) cleared_text = ' '.join(cleared_text) return transformed_array