Số hóa văn bản đơn giản

Số hóa văn bản đơn giản

Trong thực tế có một số trường hợp bạn cần tìm kiếm một số nội dung trong đống tài liệu, nhưng vấn đề nằm ở chỗ đống tài liệu thì nhiều, không thể mở từng văn bản để tìm được

Vừa rồi khách hàng có yêu cầu team mính số hóa các tài liệu báo giá, để quản lý tìm kiếm văn bản cho thuận tiện. Đê search trực tiếp từng văn bản thì rât mất thời gian. Ý tưởng của mình là convert tất các về plain text rồi đọc nó lưu vào DB, sau đó chỉ việc thực hiện việc tìm kiếm như các truy vấn SQL thông thương thôi

Vấn đề
– Mình có rất nhiều tài liệu khách nhau (Word, Excel, PDF)
– Sử dụng PHP để đọc tài liệu khá chậm

Giải pháp
Để giải quyết vấn đề về hiệu năng thì mình không dùng PHP để đọc văn bản nữa, mình sẽ cài package hỗ trợ command line convert từ PDF -> TXT, WORD -> TXT, EXCEL tớ CSV

Cài đặt
Sử dụng thư viên pdftotext để convert PDF -> TXT, vì pdftotext là thành phần của gói poppler-utils nên chỉ cần cài như sau

yum install poppler-utils

Đối với Excel thì sử dung gói gnumeric

yum install gnumeric

Đối với Word thì chỉ cần unzip mặc định là đủ không cần cài thêm gì hết

Sử dụng

Convert file PDF

pdftotext file_got.pdf file_convert.txt

Convert file Excel

sconvert file_goc.xlsx file_convert.csv

Convert file Word

unzip -p file_goc.docx word/document.xml | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g' > file_convert.txt

Code demo

function convertFileToText($filename){
	$infoFile = pathinfo($filename);
	$extFile = strtolower($infoFile['extension']);
	$cmd = '';
	if(($extFile == 'doc') || ($extFile == 'docx')){
		$cmd = "unzip -p ".$filename." word/document.xml | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g' > ".$infoFile['filename'].".txt";
	}elseif(($extFile == 'xls') || ($extFile == 'xlsx')){
		$cmd = "ssconvert -S ".$filename." ".$infoFile['filename'].".csv";
	}elseif($extFile == 'pdf'){
		$cmd = "pdftotext ".$infoFile['basename']." ".$infoFile['filename'].".txt";
	}
	putenv('LANG=en_US.UTF-8'); 
	return $cmd ? shell_exec($cmd) : false;
}

Phần còn lại thì chỉ đọc file TXT, CSV lưa vào DB và trùy vấn trên CSDL thì đơn giản rồi

Link demo code https://github.com/thlinhdotcom/demo/blob/master/demo_sohoa.php