72 lines
2.4 KiB
Python
72 lines
2.4 KiB
Python
"""
|
|
Dịch vụ xử lý văn bản (Text processing service)
|
|
"""
|
|
|
|
from typing import List, Optional
|
|
from ..utils.file_parser import FileParser, split_text_into_chunks
|
|
|
|
|
|
class TextProcessor:
|
|
"""Trình xử lý văn bản"""
|
|
|
|
@staticmethod
|
|
def extract_from_files(file_paths: List[str]) -> str:
|
|
"""Trích xuất và kết hợp văn bản từ nhiều file (các đường dẫn file truyền vào)"""
|
|
return FileParser.extract_from_multiple(file_paths)
|
|
|
|
@staticmethod
|
|
def split_text(
|
|
text: str,
|
|
chunk_size: int = 500,
|
|
overlap: int = 50
|
|
) -> List[str]:
|
|
"""
|
|
Chia nhỏ văn bản (Phân mảnh văn bản dài thành các đoạn nhỏ hơn - chunking)
|
|
|
|
Args:
|
|
text: Văn bản gốc cần chia
|
|
chunk_size: Kích thước tối đa của mỗi đoạn (chunk)
|
|
overlap: Số ký tự chồng chéo giữa các đoạn liên tiếp (để giữ bối cảnh không bị đứt đoạn)
|
|
|
|
Returns:
|
|
Danh sách gồm các mảng văn bản sau khi chia
|
|
"""
|
|
return split_text_into_chunks(text, chunk_size, overlap)
|
|
|
|
@staticmethod
|
|
def preprocess_text(text: str) -> str:
|
|
"""
|
|
Tiền xử lý văn bản (Làm sạch văn bản)
|
|
- Xoá bỏ các khoảng trắng thừa
|
|
- Chuẩn hoá định dạng xuống dòng (Line breaks)
|
|
|
|
Args:
|
|
text: Văn bản thô ban đầu
|
|
|
|
Returns:
|
|
Văn bản đã được tinh giản, làm sạch
|
|
"""
|
|
import re
|
|
|
|
# Chuẩn hoá ký tự xuống dòng (Windows \r\n hoặc Mac cũ \r thành \n chuẩn Linux)
|
|
text = text.replace('\r\n', '\n').replace('\r', '\n')
|
|
|
|
# Xoá các dòng trống liên tiếp (Chỉ giữ lại tối đa 2 lần xuống dòng liên tiếp)
|
|
text = re.sub(r'\n{3,}', '\n\n', text)
|
|
|
|
# 移除行首行尾空白
|
|
lines = [line.strip() for line in text.split('\n')]
|
|
text = '\n'.join(lines)
|
|
|
|
return text.strip()
|
|
|
|
@staticmethod
|
|
def get_text_stats(text: str) -> dict:
|
|
"""Lấy một số thông tin thống kê về đoạn văn bản (Số ký tự, số dòng, số từ)"""
|
|
return {
|
|
"total_chars": len(text),
|
|
"total_lines": text.count('\n') + 1,
|
|
"total_words": len(text.split()),
|
|
}
|
|
|