1.2.1 Удаление HTML-тегов и ненужных элементов
Пример: Очистка выгрузки с корпоративного сайта
Ваши данные включают статьи с HTML-тегами, ссылками и ненужными стилями. Используйте `BeautifulSoup` для автоматической очистки контента:
```python
from bs4 import BeautifulSoup
import os
def clean_html_file(filepath):
with open(filepath, "r", encoding="utf-8") as file:
html_content = file.read()
soup = BeautifulSoup(html_content, "html.parser")
clean_text = soup.get_text()
return clean_text.strip()
# Пример применения для директории
directory = "./data"
for filename in os.listdir(directory):
if filename.endswith(".html"):
cleaned_text = clean_html_file(os.path.join(directory, filename))
with open(f"./cleaned/{filename.replace('.html', '.txt')}", "w", encoding="utf-8") as clean_file:
clean_file.write(cleaned_text)
```
Этот скрипт обработает все HTML-файлы, извлекая только текстовый контент.
1.2.2 Фильтрация дублирующихся текстов
Пример: Исключение одинаковых статей из нескольких источников
Если в базе обнаруживаются дублирующие тексты, используйте хэширование для их удаления.
```python
import hashlib
def remove_duplicates(texts):
unique_texts = {}
for text in texts:
text_hash = hashlib.md5(text.encode()).hexdigest()
if text_hash not in unique_texts:
unique_texts[text_hash] = text
return list(unique_texts.values())
texts = ["Текст 1…", "Текст 2…", "Текст 1…"]
unique_texts = remove_duplicates(texts)
print(unique_texts)
```
Этот код сохранит только уникальные тексты, минимизируя объем данных.
1.2.3 Нормализация текста
Пример: Приведение текстов к единому формату
Для унификации данных выполните нормализацию текста: удаление стоп-слов, специальных символов и приведение к нижнему регистру.
```python
import re
import nltk
from nltk.corpus import stopwords
nltk.download('stopwords')
stop_words = set(stopwords.words('russian'))
def normalize_text(text):
text = text.lower()
# Приведение к нижнему регистру
text = re.sub(r'[^\w\s]', '', text)
# Удаление специальных символов
tokens = text.split()
filtered_tokens = [word for word in tokens if word not in stop_words]
# Удаление стоп-слов
return " ".join(filtered_tokens)
text = "Пример текста: как удалить лишние символы и нормализовать данные!"
normalized_text = normalize_text(text)
print(normalized_text)
```
Результат: `"пример текста удалить лишние символы нормализовать данные"`
1.2.4 Автоматизация процесса очистки
Пример: Скрипт для обработки всех файлов в папке
Создайте скрипт, который автоматически выполняет весь процесс очистки – удаляет шумы, фильтрует дубли и нормализует данные:
```python
import os
def process_files(input_dir, output_dir):
for filename in os.listdir(input_dir):
with open(os.path.join(input_dir, filename), "r", encoding="utf-8") as file:
raw_text = file.read()
# Очистка данных
clean_text = normalize_text(clean_html_file(raw_text))
# Сохранение результата
with open(os.path.join(output_dir, filename), "w", encoding="utf-8") as clean_file:
clean_file.write(clean_text)
process_files("./raw_data", "./cleaned_data")
```
Этот инструмент автоматизирует обработку данных для всех текстов в указанной директории.
1.2.5 Инструменты для ускорения обработки больших объемов данных
Пример: Использование `spaCy` для масштабных операций
Если объем данных велик, подключите `spaCy` для ускорения обработки:
```python
import spacy
nlp = spacy.load("ru_core_news_sm")
def process_with_spacy(text):
doc = nlp(text.lower())
return " ".join([token.text for token in doc if not token.is_stop and not token.is_punct])
text = "Когнитивное программирование – это подход, направленный на оптимизацию работы сознания."
processed_text = process_with_spacy(text)
print(processed_text)
```
Результат: `"когнитивное программирование подход направленный оптимизацию работы сознания"`
Эти примеры демонстрируют, как автоматизировать и оптимизировать процесс очистки данных для подготовки качественного материала, который станет основой для работы RAG и LLM.