import json import os import sys # Đảm bảo import được module app sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) from app.config import CHROMA_DB_PATH, COLLECTION_NAME, EMBEDDING_MODEL from langchain_huggingface import HuggingFaceEmbeddings from langchain_chroma import Chroma from langchain_core.documents import Document def main(): # Cấu hình stdout sang UTF-8 để in tiếng Việt trên console Windows không bị lỗi if hasattr(sys.stdout, "reconfigure"): sys.stdout.reconfigure(encoding="utf-8") print(f"Đang tải mô hình embedding: {EMBEDDING_MODEL}...") embeddings = HuggingFaceEmbeddings( model_name=EMBEDDING_MODEL ) print("Đang đọc dữ liệu từ data/tu_dien_nam_bo.jsonl...") documents = [] jsonl_path = "data/tu_dien_nam_bo.jsonl" if not os.path.exists(jsonl_path): print(f"Lỗi: Không tìm thấy file dữ liệu tại {jsonl_path}") sys.exit(1) with open(jsonl_path, "r", encoding="utf-8") as f: for line in f: line = line.strip() if not line: continue try: entry = json.loads(line) except Exception as e: print(f"Bỏ qua dòng lỗi JSON: {e}") continue # Tạo text để embedding text = f'"{entry["tu"]}" nghĩa là "{entry["nghia"]}"' vi_du_list = entry.get("vi_du", []) if vi_du_list and len(vi_du_list) > 0 and vi_du_list[0]: text += f'. Ví dụ: {vi_du_list[0]}' doc = Document( page_content=text, metadata={ "tu": entry["tu"], "tu_hien_nay": entry.get("tu_hien_nay", ""), "nghia": entry["nghia"], "vi_du": json.dumps(vi_du_list, ensure_ascii=False), "pos": json.dumps(entry.get("pos", []), ensure_ascii=False), } ) documents.append(doc) print(f"Đọc thành công {len(documents)} mục từ điển. Đang lập chỉ mục và lưu vào ChromaDB tại {CHROMA_DB_PATH} (Quá trình này có thể mất vài phút)...") # Tạo ChromaDB persistent vector_store = Chroma.from_documents( documents=documents, embedding=embeddings, persist_directory=CHROMA_DB_PATH, collection_name=COLLECTION_NAME ) print(f"Hoàn thành! Đã index {len(documents)} entries vào ChromaDB.") if __name__ == "__main__": main()