Feature/parser init#30
Conversation
| "text": text, | ||
| } | ||
| else: | ||
| print(f"⚠️ Страница {page_num}: текст не найден") |
There was a problem hiding this comment.
убрать ИИшный контент (Смайлики и прочее)
| page.flush_cache() | ||
|
|
||
| if page_num % 10 == 0: | ||
| print(f"⌛ Обработано {page_num} страниц...") |
| pdf_path, model, chapter_name="unknown", start_page=1, end_page=None | ||
| ): | ||
| """ | ||
| Полный pipeline для RAG: парсинг → фильтрация → блоки → эмбеддинги. |
There was a problem hiding this comment.
описание попроще - чтобы не иишный контент был
| flush_batch() | ||
|
|
||
| if count % 10 == 0: | ||
| print(f"✍️ Обработано и записано {count} логических блоков в SQL...") |
| flush_batch() | ||
|
|
||
| print( | ||
| f"✅ SQL скрипт успешно сгенерирован: {output_file}. " |
|
|
||
| def main(): | ||
| print( | ||
| "⏳ Инициализация модели " |
| cache_folder=str(models_dir), | ||
| ) | ||
| except Exception as e: | ||
| print(f"❌ Ошибка при загрузке модели: {e}") |
| data_dir = Path(__file__).parent.parent / "data" | ||
| if not data_dir.exists(): | ||
| print( | ||
| f"⚠️ Папка {data_dir} не найдена. " |
There was a problem hiding this comment.
ну и так далее, больше не буду
|
|
||
| def main(): | ||
| print( | ||
| "⏳ Инициализация модели " |
There was a problem hiding this comment.
... Замена но нормальный лог
print("Initializing model: sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2...")
|
|
||
| pdf_files = list(data_dir.glob("*.pdf")) | ||
| if not pdf_files: | ||
| print(f"⚠️ В папке {data_dir} нет PDF файлов.") |
There was a problem hiding this comment.
Аналогично смайлик и на английский
print(f"No PDF files found in {data_dir}.")
| print(f"⚠️ В папке {data_dir} нет PDF файлов.") | ||
| return | ||
|
|
||
| print(f"🔍 Найдено {len(pdf_files)} PDF файлов для обработки.") |
There was a problem hiding this comment.
print(f"Found {len(pdf_files)} PDF files for processing.")
|
|
||
| def all_pdfs_generator(): | ||
| for pdf_path in pdf_files: | ||
| print(f"📖 Читаем документ: {pdf_path.name}") |
There was a problem hiding this comment.
print(f"Processing document: {pdf_path.name}")
| kw_cleaned = [ | ||
| str(kw).replace("'", "").replace('"', "") for kw in item["keywords"][:10] | ||
| ] | ||
| keywords_pg = "{" + ",".join(kw_cleaned) + "}" |
| return ( | ||
| f"('{escape_sql_string(item['chapter_name'])}', " | ||
| f"'{keywords_pg}', " | ||
| f"'{escape_sql_string(item['chunk_text'])}', " | ||
| f"'{embedding_str}')" | ||
| ) |
There was a problem hiding this comment.
return (
f"('{escape_sql_string(item['front_text'])}', "
f"'{escape_sql_string(item['back_text'])}', "
f"'{embedding_str}', "
f"'{escape_sql_string(item['source_info'])}')"
)
There was a problem hiding this comment.
напоминаю, что у нас карточки, и все посмотри в миграцию
|
|
||
| def generate_sql(data_generator, output_file="init.sql"): | ||
| """ | ||
| Генерирует init.sql: DDL и пакетные INSERT (не по одной строке на команду). |
| init_script = [ | ||
| "-- Инициализация таблиц для RAG", | ||
| "CREATE EXTENSION IF NOT EXISTS vector;", | ||
| "CREATE TABLE IF NOT EXISTS documents (", | ||
| " id SERIAL PRIMARY KEY,", | ||
| " chapter_name TEXT,", | ||
| " keywords TEXT[],", | ||
| " chunk_text TEXT,", | ||
| " embedding vector(384)", | ||
| ");", | ||
| "", | ||
| f"-- Данные: один INSERT содержит до {INSERT_VALUES_PER_STATEMENT} строк.", | ||
| "", | ||
| ] |
There was a problem hiding this comment.
Что тут вообще просходит? Если прям так что-то хочет в инит напиши
"-- Auto-generated seed file for card_contents",
"-- Data is chunked into batches for performance.",
""
There was a problem hiding this comment.
Опять же ты миграции я тебе кидал
| insert_header = ( | ||
| "INSERT INTO documents (chapter_name, keywords, chunk_text, embedding) VALUES\n" | ||
| ) |
There was a problem hiding this comment.
insert_header = "INSERT INTO card_contents (front_text, back_text, embedding, source_info) VALUES\n"
|
Скрипт решает задачу, но архитектурно сейчас он выглядит как God Object (один файл делает абсолютно всё), и доки, раз уж ты взялся, нужно привести к общему стандарту. Пожалуйста, сделай следующие правки перед мерджем: 1 Разделение ответственности (SRP)
2 Документация и Docstrings
|
|
В целом - код работает, просто надо по комментариями исправить -> и поработать над качеством данных |
я пробежался по всем требованиям, вроде все красиво.