File size: 3,072 Bytes
6036494
 
 
 
 
 
 
 
 
 
 
 
ff54afc
69180fb
6036494
 
 
90e90fa
6036494
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90e90fa
6036494
 
 
 
 
 
 
90e90fa
 
 
 
 
 
6036494
 
 
90e90fa
6036494
 
 
 
 
 
90e90fa
 
6036494
 
 
90e90fa
6036494
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from langchain_community.document_loaders import TextLoader
from langchain_community.docstore.document import Document
from langchain.text_splitter import CharacterTextSplitter, RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.retrievers import BM25Retriever

import os

def split_with_source(text, source):
    splitter = CharacterTextSplitter(
        separator = "\n",
        chunk_size = 512,
        chunk_overlap  = 172,
        add_start_index = True,
    )
    documents = splitter.create_documents([text])
    print(documents)
    for doc in documents:
        doc.metadata["source"] = source
        # print(doc.metadata)

    return documents


def count_files_in_folder(folder_path):
    # Kiểm tra xem đường dẫn thư mục có tồn tại không
    if not os.path.isdir(folder_path):
        print("Đường dẫn không hợp lệ.")
        return None

    # Sử dụng os.listdir() để lấy danh sách các tập tin và thư mục trong thư mục
    files = os.listdir(folder_path)

    # Đếm số lượng tập tin trong danh sách
    file_count = len(files)

    return file_count

def get_document_from_raw_text():
    documents = [Document(page_content="", metadata={'source': 0})]
    files = os.listdir(os.path.join(os.getcwd(), "raw_data"))
    # print(files)
    for i in files:
        file_path = i
        with open(os.path.join(os.path.join(os.getcwd(), "raw_data"),file_path), 'r', encoding="utf-8") as file:
            # Xử lý bằng text_spliter
            # Tiền xử lý văn bản
            content = file.read().replace('\n\n', "\n")
            # content = ''.join(content.split('.'))
            new_doc = content
            texts = split_with_source(new_doc, i)
            documents = documents + texts

            ##Xử lý mỗi khi xuống dòng
            # for line in file:
            #     # Loại bỏ khoảng trắng thừa và ký tự xuống dòng ở đầu và cuối mỗi dòng
            #     line = line.strip()
            #     documents.append(Document(page_content=line, metadata={"source": i}))
    print(documents)
    return documents

def load_the_embedding_retrieve(is_ready = False, k = 3, model= 'sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2'):
    embeddings = HuggingFaceEmbeddings(model_name=model)
    if is_ready:
        retriever = Chroma(persist_directory=os.path.join(os.getcwd(), "Data"), embedding_function=embeddings).as_retriever(
            search_kwargs={"k": k}
        )
    else:
        documents = get_document_from_raw_text()
        print(type(documents))
        retriever = Chroma.from_documents(documents, embeddings).as_retriever(
            search_kwargs={"k": k}
        )


    return retriever

def load_the_bm25_retrieve(k = 3):
    documents = get_document_from_raw_text()
    bm25_retriever = BM25Retriever.from_documents(documents)
    bm25_retriever.k = k

    return bm25_retriever