Spaces:
Running
Running
import pandas as pd | |
from typing import List | |
from langchain.schema import Document | |
from src.processor.text_utils import VietnameseTextProcessor | |
class CSVProcessor: | |
"""Process various CSV files from ViettelPay documentation""" | |
def __init__(self): | |
self.text_processor = VietnameseTextProcessor() | |
def process_definitions(self, file_path: str) -> List[Document]: | |
"""Process dinh_nghia.csv""" | |
df = pd.read_csv(file_path) | |
documents = [] | |
for _, row in df.iterrows(): | |
term = str(row["Định nghĩa"]).strip() | |
definition = str(row["Giải thích"]).strip() | |
# Create content | |
content = f"Định nghĩa - {term}: {definition}" | |
documents.append( | |
Document( | |
page_content=content, | |
metadata={ | |
"doc_type": "definition", | |
"term": term, | |
"category": "terminology", | |
"source_file": "dinh_nghia.csv", | |
}, | |
) | |
) | |
return documents | |
def process_error_handling(self, file_path: str) -> List[Document]: | |
"""Process huong_dan_xu_ly_loi.csv - Most critical for customer support""" | |
df = pd.read_csv(file_path) | |
documents = [] | |
for _, row in df.iterrows(): | |
error_code = str(row["Mã lỗi"]).strip() | |
error_msg = str(row["Câu báo lỗi/yêu cầu hỗ trợ"]).strip() | |
service = str( | |
row["Nghiệp vụ"] | |
).strip() # Fixed column name (no trailing space) | |
cause = str(row["Nguyên nhân"]).strip() | |
status = str(row["Trạng thái giao dịch"]).strip() | |
solution = str(row["Hướng khắc phục"]).strip() | |
# Create comprehensive content | |
content = f""" | |
Mã lỗi {error_code}: {error_msg} | |
Nghiệp vụ: {service} | |
Nguyên nhân: {cause} | |
Trạng thái: {status} | |
Cách khắc phục: {solution} | |
""".strip() | |
documents.append( | |
Document( | |
page_content=content, | |
metadata={ | |
"doc_type": "error_resolution", | |
"error_code": error_code, | |
"service_type": service, | |
"status": status, | |
"source_file": "huong_dan_xu_ly_loi.csv", | |
}, | |
) | |
) | |
return documents | |
def process_payment_guide(self, file_path: str) -> List[Document]: | |
"""Process huong_dan_thanh_toan.csv""" | |
df = pd.read_csv(file_path) | |
documents = [] | |
for _, row in df.iterrows(): | |
transaction_type = str(row["Loại giao dịch"]).strip() | |
scope = str(row["Phạm vi thanh toán"]).strip() | |
guide = str(row["Hướng dẫn thanh toán"]).strip() | |
content = f""" | |
Hướng dẫn thực hiện giao dịch | |
Loại giao dịch: {transaction_type} | |
Phạm vi: {scope} | |
Các bước thực hiện: | |
{guide} | |
""".strip() | |
documents.append( | |
Document( | |
page_content=content, | |
metadata={ | |
"doc_type": "procedure", | |
"transaction_type": transaction_type, | |
"service_scope": scope, | |
"category": "payment_guide", | |
"source_file": "huong_dan_thanh_toan.csv", | |
}, | |
) | |
) | |
return documents | |
def process_error_codes(self, file_path: str) -> List[Document]: | |
"""Process bang_ma_loi.csv""" | |
df = pd.read_csv(file_path) | |
documents = [] | |
for _, row in df.iterrows(): | |
error_code = str(row["Mã lỗi"]).strip() | |
description = str(row["Mô tả"]).strip() | |
content = f"Mã lỗi {error_code}: {description}" | |
documents.append( | |
Document( | |
page_content=content, | |
metadata={ | |
"doc_type": "error_code", | |
"error_code": error_code, | |
"category": "error_reference", | |
"source_file": "bang_ma_loi.csv", | |
}, | |
) | |
) | |
return documents | |
def process_cancellation_rules(self, file_path: str) -> List[Document]: | |
"""Process quy_dinh_huy_giao_dich.csv""" | |
df = pd.read_csv(file_path) | |
documents = [] | |
# File summary for better semantic context | |
file_summary = """ | |
Tài liệu quy định hủy giao dịch ViettelPay. | |
Bao gồm các quy định về điều kiện, hạn mức, nguyên tắc và hướng dẫn thực hiện hủy giao dịch thanh toán cước viễn thông Viettel. | |
""".strip() | |
for _, row in df.iterrows(): | |
rule_type = str(row["Nội dung"]).strip() | |
rule_details = str(row["Quy định"]).strip() | |
# Create content with summary for better semantic understanding | |
content = f""" | |
{file_summary} | |
Nội dung: {rule_type} | |
Quy định: {rule_details} | |
""".strip() | |
documents.append( | |
Document( | |
page_content=content, | |
metadata={ | |
"doc_type": "policy", | |
"rule_type": rule_type, | |
"category": "cancellation_rules", | |
"source_file": "quy_dinh_huy_giao_dich.csv", | |
}, | |
) | |
) | |
return documents | |
def process_denominations(self, file_path: str) -> List[Document]: | |
"""Process menh_gia.csv - Concatenated approach for comparison queries""" | |
df = pd.read_csv(file_path) | |
# Create a summary chunk for denominations (concatenated approach) | |
content = "Bảng mệnh giá thẻ cào theo nhà mạng:\n\n" | |
for _, row in df.iterrows(): | |
denomination = str( | |
row["Mệnh giá (Đơn vị tính VNĐ)"] | |
).strip() # Fixed column name | |
viettel = str(row["Nhà mạng Viettel"]).strip() | |
mobifone = str(row["Nhà mạng Mobifone"]).strip() | |
vinaphone = str(row["Nhà mạng Vinaphone"]).strip() | |
vietnammobile = str(row["Nhà mạng Vietnammobile"]).strip() | |
content += f"Mệnh giá {denomination}: Viettel({viettel}), Mobifone({mobifone}), Vinaphone({vinaphone}), Vietnammobile({vietnammobile})\n" | |
return [ | |
Document( | |
page_content=content, | |
metadata={ | |
"doc_type": "reference", | |
"category": "denominations", | |
"source_file": "menh_gia.csv", | |
}, | |
) | |
] | |