1. Mục tiêu thí nghiệm
- Tìm hiểu nguyên lý trực quan hóa văn bản
- Áp dụng kỹ thuật xử lý ngôn ngữ tự nhiên
- Triển khai tạo hình ảnh đám mây từ khóa
- Xây dựng dấu vân tay tài liệu văn bản
2. Cơ sở lý thuyết
Quá trình xử lý văn bản dựa trên 3 cấp độ phân tích:
- Cấp độ từ vựng: Sử dụng thuật toán tách từ (jieba)
- Cấp độ ngữ pháp: Phân tích cấu trúc câu
- Cấp độ ngữ nghĩa: Trích xuất chủ đề (LDA)
3. Môi trường phát triển
- Ngôn ngữ: Python 3.6
- Thư viện: matplotlib, jieba, wordcloud, numpy, PIL
4. Quy trình thực hiện
- Đọc file văn bản đầu vào
- Xử lý dữ liệu thô:
- Loại bỏ ký tự đặc biệt
- Tách từ và lọc từ dừng
- Tạo đám mây từ khóa:
- Thiết lập font chữ hỗ trợ Unicode
- Áp dụng mặt nạ hình ảnh tùy chỉnh
- Tạo màu sắc dựa trên hình nền
- Xây dựng dấu vân tay tài liệu:
- Thống kê tần suất từ khóa
- Ánh xạ không gian 2D theo tần suất
- Hiển thị dưới dạng ma trận cường độ
5. Triển khai mã nguồn
Tạo đám mây từ khóa
import jieba
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import re
def xu_ly_van_ban(duong_dan):
with open(duong_dan, 'r', encoding='utf-8') as f:
noi_dung = f.read()
# Dọn dẹp dữ liệu
noi_dung = re.sub(r'[^\u4e00-\u9fa5\s]', '', noi_dung)
return ' '.join(jieba.cut(noi_dung))
def tao_dam_may(du_lieu, hinh_dang=None):
font_path = r'C:\Windows\Fonts\simhei.ttf'
wc = WordCloud(
font_path=font_path,
width=800,
height=400,
background_color='white',
mask=hinh_dang,
max_words=200
)
wc.generate(du_lieu)
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()
Xây dựng dấu vân tay
def tao_van_tay(du_lieu):
# Thống kê tần suất từ
tan_xuat = {}
for tu in jieba.cut(du_lieu):
if len(tu) > 1:
tan_xuat[tu] = tan_xuat.get(tu, 0) + 1
# Sắp xếp và chọn top 50
top_tu = sorted(tan_xuat.items(), key=lambda x: x[1], reverse=True)[:50]
# Tạo ma trận 100x100
kich_thuoc = 100
hinh_anh = np.zeros((kich_thuoc, kich_thuoc))
# Ánh xạ tọa độ
for i, (tu, tan_so) in enumerate(top_tu):
goc = 2 * np.pi * i / len(top_tu)
khoang_cach = kich_thuoc * 0.4 * (tan_so / 100)
x = int(kich_thuoc/2 + khoang_cach * np.cos(goc))
y = int(kich_thuoc/2 + khoang_cach * np.sin(goc))
# Vẽ điểm cường độ
for dx in range(-3, 4):
for dy in range(-3, 4):
if 0 <= x+dx < kich_thuoc and 0 <= y+dy < kich_thuoc:
hinh_anh[x+dx][y+dy] = tan_so/100
plt.imshow(hinh_anh, cmap='plasma')
plt.axis('off')
plt.show()
6. Kết quả đạt được
Thí nghiệm thành công trong việc:
- Tạo đám mây từ khóa với hình dạng tùy biến
- Xây dựng dấu vân tay tài liệu phản ánh đặc trưng văn bản
- Áp dụng kỹ thuật xử lý ngôn ngữ tự nhiên vào trực quan hóa
7. Hướng phát triển
- Kết hợp mô hình chủ đề LDA để phân tích ngữ nghĩa
- Ứng dụng mạng nơ-ron để nhận diện mẫu văn bản
- Tích hợp vào hệ thống phân loại tài liệu thông minh