PBThuong96 commited on
Commit
c4a14d2
·
verified ·
1 Parent(s): b9dec91

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -10
app.py CHANGED
@@ -37,10 +37,10 @@ if not GOOGLE_API_KEY:
37
  print("CẢNH BÁO: Chưa thiết lập GOOGLE_API_KEY!")
38
 
39
  # ==========================================
40
- # XỬ LÝ DỮ LIỆU ĐA ĐỊNH DẠNG
41
  # ==========================================
42
  def load_documents_from_folder(folder_path):
43
- """Hàm đọc nhiều loại file khác nhau từ thư mục"""
44
  documents = []
45
  if not os.path.exists(folder_path):
46
  os.makedirs(folder_path)
@@ -50,26 +50,63 @@ def load_documents_from_folder(folder_path):
50
  file_path = os.path.join(folder_path, filename)
51
  loader = None
52
 
 
 
 
53
  try:
54
- if filename.endswith(".pdf"):
55
  loader = PyPDFLoader(file_path)
56
- elif filename.endswith(".docx") or filename.endswith(".doc"):
 
57
  loader = Docx2txtLoader(file_path)
58
- elif filename.endswith(".txt"):
59
- loader = TextLoader(file_path, encoding="utf-8")
60
- elif filename.endswith(".xlsx") or filename.endswith(".xls"):
61
- loader = UnstructuredExcelLoader(file_path)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
 
 
63
  if loader:
64
  print(f"-> Đang đọc file: {filename}")
65
  docs = loader.load()
66
- # Thêm tên file vào metadata nếu chưa có (để trích dẫn sau này)
67
  for doc in docs:
68
  if "source" not in doc.metadata:
69
  doc.metadata["source"] = filename
70
  documents.extend(docs)
 
71
  except Exception as e:
72
- print(f"Lỗi khi đọc file {filename}: {e}")
73
 
74
  return documents
75
 
 
37
  print("CẢNH BÁO: Chưa thiết lập GOOGLE_API_KEY!")
38
 
39
  # ==========================================
40
+ # XỬ LÝ DỮ LIỆU ĐA ĐỊNH DẠNG (BẢN SỬA LỖI TXT)
41
  # ==========================================
42
  def load_documents_from_folder(folder_path):
43
+ """Hàm đọc nhiều loại file khác nhau từ thư mục, hỗ trợ dò bảng mã TXT"""
44
  documents = []
45
  if not os.path.exists(folder_path):
46
  os.makedirs(folder_path)
 
50
  file_path = os.path.join(folder_path, filename)
51
  loader = None
52
 
53
+ # Chuyển tên file về chữ thường để so sánh (.TXT cũng như .txt)
54
+ filename_lower = filename.lower()
55
+
56
  try:
57
+ if filename_lower.endswith(".pdf"):
58
  loader = PyPDFLoader(file_path)
59
+
60
+ elif filename_lower.endswith(".docx") or filename_lower.endswith(".doc"):
61
  loader = Docx2txtLoader(file_path)
62
+
63
+ elif filename_lower.endswith(".xlsx") or filename_lower.endswith(".xls"):
64
+ # Xử Excel: Chuyển thành text để tránh lỗi
65
+ import pandas as pd
66
+ try:
67
+ df = pd.read_excel(file_path)
68
+ text_data = df.to_string(index=False)
69
+ # Tạo loader giả lập từ text
70
+ from langchain_community.docstore.document import Document
71
+ loader = type('obj', (object,), {'load': lambda: [Document(page_content=text_data, metadata={"source": filename})]})
72
+ except Exception as e:
73
+ print(f"Lỗi đọc Excel {filename}: {e}")
74
+ continue
75
+
76
+ elif filename_lower.endswith(".txt"):
77
+ # --- SỬA LỖI TXT: Thử lần lượt các bảng mã ---
78
+ encodings = ['utf-8', 'utf-16', 'cp1258', 'latin-1']
79
+ success = False
80
+
81
+ for enc in encodings:
82
+ try:
83
+ # Thử load với bảng mã này
84
+ temp_loader = TextLoader(file_path, encoding=enc)
85
+ docs = temp_loader.load()
86
+ documents.extend(docs) # Nếu đọc được thì lưu luôn
87
+ print(f"-> Đọc file {filename} thành công (Encoding: {enc})")
88
+ success = True
89
+ break
90
+ except Exception:
91
+ continue
92
+
93
+ if not success:
94
+ print(f"Lỗi: Không thể đọc file {filename} với bất kỳ bảng mã nào.")
95
+
96
+ # Vì đã xử lý add documents trong vòng lặp, ta continue để skip đoạn code chung bên dưới
97
+ continue
98
 
99
+ # Xử lý chung cho PDF, DOCX (vì TXT đã xử lý riêng ở trên)
100
  if loader:
101
  print(f"-> Đang đọc file: {filename}")
102
  docs = loader.load()
 
103
  for doc in docs:
104
  if "source" not in doc.metadata:
105
  doc.metadata["source"] = filename
106
  documents.extend(docs)
107
+
108
  except Exception as e:
109
+ print(f"Lỗi không xác định khi đọc file {filename}: {e}")
110
 
111
  return documents
112