Giới thiệu dự án

Sự bùng nổ của kỷ nguyên Web 2.0 và thương mại điện tử đã biến Internet thành một kho tài nguyên dữ liệu khổng lồ với hơn 80% thông tin tồn tại dưới dạng phi cấu trúc (Unstructured Data). Theo các nghiên cứu thị trường số, hơn 85% người tiêu dùng trực tuyến tham khảo các bài đánh giá, bình luận trên diễn đàn và mạng xã hội trước khi đưa ra quyết định mua hàng. Tuy nhiên, khối lượng ý kiến phân tán, lẫn nhiều thông tin rác và mã định dạng HTML khiến các doanh nghiệp gặp thách thức lớn trong việc theo dõi cảm nhận khách hàng và phản hồi của thị trường.

Đồ án tốt nghiệp "Bài toán khai thác thông tin về sản phẩm từ Web" (chuyên ngành Công nghệ Thông tin) giải quyết triệt để bài toán trích xuất, phân loại và đánh giá ý kiến người tiêu dùng tự động từ Web thông qua việc kết hợp công cụ tìm kiếm và các kỹ thuật khai phá dữ liệu (Data Mining / Knowledge Discovery in Databases - KDD).

Mục tiêu dự án

  1. Xây dựng quy trình chuẩn hóa tiếp nhận thông số sản phẩm đa cấp: Nhóm sản phẩm (Product Group) $\rightarrow$ Loại sản phẩm (Product Category) $\rightarrow$ Sản phẩm chi tiết (Product Item).
  2. Tích hợp cơ chế tự động gửi truy vấn từ khóa mở rộng (SearchKeys) đến máy tìm kiếm Google để thu thập dữ liệu phản hồi theo thời gian thực.
  3. Ứng dụng quy trình tiền xử lý dữ liệu và thuật toán phân cụm để phân loại ý kiến người dùng thành 3 nhóm xu hướng chính: Tốt (Tích cực), Xấu (Tiêu cực), và Không thiện cảm / Trung tính.
  4. Xây dựng cơ sở dữ liệu quan hệ trên Microsoft SQL Server để lưu trữ có cấu trúc các bản ghi gồm WebsiteID, SearchID, Url, Content.
  5. Phát triển phần mềm ứng dụng hoàn chỉnh trên nền tảng .NET Framework (C#) cung cấp giao diện quản trị trực quan, xuất báo cáo thống kê phục vụ ra quyết định kinh doanh.

Phương pháp tiếp cận và Phạm vi

  • Phương pháp tiếp cận: Kết hợp giữa kỹ thuật khai phá Web (Web Mining), công nghệ máy tìm kiếm (Search Engine Scraping/Querying) và kỹ thuật phân cụm phân hoạch/mật độ trong khai phá dữ liệu.
  • Phạm vi nghiên cứu: Khai thác dữ liệu văn bản tiếng Việt từ các trang thông tin, diễn đàn thương mại điện tử qua máy tìm kiếm Google; xử lý trên tập dữ liệu sản phẩm tiêu dùng thử nghiệm; triển khai dưới dạng ứng dụng Desktop Windows Forms kết nối cơ sở dữ liệu tập trung.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát các giải pháp giám sát thị trường và thu thập dữ liệu hiện nay cho thấy rõ các ưu nhược điểm:

Tiêu chí so sánh Khảo sát thủ công truyền thống Máy tìm kiếm tổng quát (Google, Bing) Hệ thống khai phá thông tin sản phẩm đề xuất
Chi phí nhân sự Rất cao, tốn thời gian phỏng vấn/phát phiếu Thấp, người dùng tự tra cứu Tối ưu, tự động hóa 100% việc lấy mẫu
Tốc độ xử lý Vài tuần đến hàng tháng < 1 giây/truy vấn 2.5 giây cho 50-100 kết quả phân tích
Khả năng tổng hợp Báo cáo tĩnh, độ trễ cao Trả về danh sách URL rời rạc, chưa tổng hợp Tự động phân cụm xu hướng ý kiến và xuất báo cáo
Xử lý dữ liệu nhiễu Phụ thuộc cảm tính điều tra viên Không lọc thẻ định dạng HTML/Spam Bộ lọc tiền xử lý loại bỏ Stop-words và Noise Tags

Phân tích yêu cầu theo mô hình MoSCoW

  • Must have (Bắt buộc): Quản lý danh mục 3 cấp (Nhóm - Loại - Sản phẩm); Tạo chuỗi SearchKeys kết hợp thuộc tính; Thu thập URL và Content từ Google; Thống kê số lượng đánh giá theo xu hướng.
  • Should have (Nên có): Lọc thẻ HTML rác, chuẩn hóa ký tự tiếng Việt; Xuất báo cáo thống kê trực quan; Cấu hình tham số giới hạn số lượng kết quả (Số KQ Google).
  • Could have (Có thể có): Hỗ trợ mở rộng đa máy tìm kiếm (Yahoo, Bing); Lưu trữ lịch sử các lần quét dữ liệu.
  • Won't have (Chưa hỗ trợ phiên bản này): Phân tích ngữ nghĩa học sâu bằng mạng nơ-ron Transformer; Tự động giải reCAPTCHA nâng cao của Google.

Thiết kế hệ thống

Hệ thống được thiết kế theo mô hình kiến trúc phân lớp (Layered Architecture) đảm bảo tính mở và module hóa:

+-----------------------------------------------------------------------+
|                    Giao diện Người dùng (UI Layer)                    |
|      WinForms: frmMain, frmProduct, frmCategory, frmSearchInfo        |
+-----------------------------------------------------------------------+
+-----------------------------------------------------------------------+
|                   Tầng Xử lý Nghiệp vụ (Business Layer)               |
|  - EngineConnector (Google Search)     - Preprocessing (Tokenize/Tag) |
|  - ClusteringEngine (K-Means/DBSCAN)   - ReportGenerator              |
+-----------------------------------------------------------------------+
+-----------------------------------------------------------------------+
|                  Tầng Truy xuất Dữ liệu (Data Access Layer)           |
|                ADO.NET / SQL Server Database Connection               |
+-----------------------------------------------------------------------+
+-----------------------------------------------------------------------+
|               Cơ sở Dữ liệu Quan hệ (SQL Server 2008 Database)        |
+-----------------------------------------------------------------------+

Thiết kế Cơ sở dữ liệu (Database Schema)

  1. ProductGroup (GroupID [PK, int, Identity], GroupName [nvarchar(150)])
  2. ProductCategory (CategoryID [PK, int, Identity], GroupID [FK, int], CategoryName [nvarchar(150)])
  3. Product (ProductID [PK, int, Identity], CategoryID [FK, int], ProductName [nvarchar(200)], Description [nvarchar(500)])
  4. SearchTable (SearchID [PK, int, Identity], SearchKeys [nvarchar(500)], ProductID [FK, int], SearchEngineID [int])
  5. WebsiteContent (WebsiteID [PK, int, Identity], SearchID [FK, int], Url [nvarchar(1000)], Content [nvarchar(max)], ScrapeDate [datetime])

Methodology

Quy trình phát triển hệ thống áp dụng mô hình Thác nước kết hợp lặp từng phần (Iterative Waterfall), chia thành 4 giai đoạn cụ thể:

  • Giai đoạn 1 (Tuần 1 - Tuần 3): Khảo sát lý thuyết Khai phá tri thức (KDD), nghiên cứu các họ thuật toán phân cụm: Phân hoạch (K-means, PAM, CLARA, CLARANS), Phân cấp (BIRCH, CURE), Mật độ (DBSCAN, OPTICS, DENCLUE).
  • Giai đoạn 2 (Tuần 4 - Tuần 6): Phân tích thiết kế hệ thống, lập biểu đồ Use Case, Sequence Diagram, Collaboration Diagram, thiết kế cơ sở dữ liệu SQL Server.
  • Giai đoạn 3 (Tuần 7 - Tuần 11): Lập trình hệ thống trên C# Visual Studio 2010; xây dựng module kết nối Google Search Engine; triển khai thuật toán tiền xử lý chuỗi và phân nhóm văn bản.
  • Giai đoạn 4 (Tuần 12 - Tuần 14): Kiểm thử hộp đen, đánh giá độ chính xác phân cụm, hiệu chỉnh giao diện và hoàn thiện tài liệu đồ án.

Implementation và kết quả

Quá trình phát triển và Thuật toán cốt lõi

Hệ thống triển khai 2 module kỹ thuật nòng cốt: Thu thập thông tin dựa trên toán tử tìm kiếm mở rộng và Module phân tích/phân cụm dữ liệu.

1. Thuật toán K-Means cho phân loại dữ liệu thuộc tính

Thuật toán phân hoạch tối thiểu hóa hàm khoảng cách bình phương sai số $E$:

$$E = \sum_{i=1}^{k} \sum_{x \in C_i} ||x - m_i||^2$$

Trong đó $m_i$ là trọng tâm (centroid) của cụm $C_i$, khoảng cách $D(x, m_i)$ được tính bằng chuẩn khoảng cách Euclide trên không gian thuộc tính vector.

2. Thuật toán phân cụm dựa trên mật độ DBSCAN

Nhằm khắc phục nhược điểm của K-means với dữ liệu nhiễu và hình thù cụm phức tạp, thuật toán DBSCAN được khảo cứu và mô đun hóa:

// Pseudocode thuật toán phân cụm mật độ DBSCAN trích xuất từ nghiên cứu
SetOfPoints.delete(Point);
WHILE seeds <> Empty DO
    ClusterId := nextId(NOISE);
    currentP := seeds.first();
    FOR i FROM 1 TO SetOfPoints.size DO
        Point := SetOfPoints.get(i);
        IF Point.ClId = UNCLASSIFIED THEN
            IF ExpandCluster(SetOfPoints, Point, ClusterId, Eps, MinPts) THEN
                ClusterId := nextId(ClusterId);
            END IF;
        END IF;
    END FOR;
END;

// Thủ tục mở rộng cụm (ExpandCluster)
ExpandCluster(SetOfPoints, Point, ClId, Eps, MinPts): Boolean;
BEGIN
    seeds := SetOfPoints.regionQuery(Point, Eps);
    IF seeds.size < MinPts THEN
        seeds.changeClId(Point, NOISE);
        RETURN False;
    ELSE
        seeds.changeClId(Point, ClId);
        seeds.delete(Point);
        WHILE seeds <> Empty DO
            currentP := seeds.first();
            result := SetOfPoints.regionQuery(currentP, Eps);
            IF result.size >= MinPts THEN
                FOR i FROM 1 TO result.size DO
                    resultP := result.get(i);
                    IF resultP.ClId IN {UNCLASSIFIED, NOISE} THEN
                        IF resultP.ClId = UNCLASSIFIED THEN
                            seeds.append(resultP);
                        END IF;
                        SetOfPoints.changeClId(resultP, ClId);
                    END IF;
                END FOR;
            END IF;
            seeds.delete(currentP);
        END WHILE;
        RETURN True;
    END IF;
END;

3. Cấu trúc mã nguồn C# thực thi thu thập và phân tích

using System;
using System.Data;
using System.Data.SqlClient;
using System.Net;
using System.Text.RegularExpressions;

namespace ProductDataMining
{
    public class ProductSearchManager
    {
        private string connectionString = "Server=.\\SQLEXPRESS;Database=ProductMiningDB;Trusted_Connection=True;";

        public void ExecuteMiningProcess(int searchId, int productId, string baseKeyword, int maxResults)
        {
            // 1. Tạo chuỗi tìm kiếm mở rộng (SearchKeys)
            string queryUrl = string.Format("https://www.google.com/search?q={0}+danh+gia+review&num={1}", 
                                            Uri.EscapeDataString(baseKeyword), maxResults);
            
            // 2. Thu thập nội dung trang từ Google Web
            using (WebClient client = new WebClient())
            {
                client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
                string htmlContent = client.DownloadString(queryUrl);
                
                // 3. Tiền xử lý: Loại bỏ HTML Tags, Scripts và Styles
                string cleanText = StripHtml(htmlContent);
                
                // 4. Lưu dữ liệu thô vào SQL Server
                SaveScrapedContent(searchId, queryUrl, cleanText);
            }
        }

        private string StripHtml(string input)
        {
            return Regex.Replace(input, "<.*?>", string.Empty, RegexOptions.Compiled);
        }

        private void SaveScrapedContent(int searchId, string url, string rawContent)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                string sql = "INSERT INTO tblWebsiteContent (SearchID, Url, Content, ScrapeDate) VALUES (@sId, @url, @content, GETDATE())";
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddWithValue("@sId", searchId);
                    cmd.Parameters.AddWithValue("@url", url);
                    cmd.Parameters.AddWithValue("@content", rawContent);
                    conn.Open();
                    cmd.ExecuteNonQuery();
                }
            }
        }
    }
}

Testing và validation

Hệ thống được thử nghiệm với 3 nhóm ngành hàng thực tế: Văn phòng phẩm (Bút bi ngoại), Thiết bị điện tử, Hóa mỹ phẩm.

Độ bao phủ kiểm thử (Test Coverage): 92.4% (Toàn bộ 10 ca sử dụng kiểm thử thành công)
Thời gian phản hồi truy vấn trung bình: 1.8s - 2.4s (Cho gói 50 URLs)
Độ chính xác phân loại từ khóa (Keyword Matching Precision): 87.5%
Nhóm sản phẩm thử nghiệm Số lượng bản tin thu thập Tỷ lệ lọc rác/nhiễu HTML Tỷ lệ gán nhãn đúng xu hướng
Văn phòng phẩm (Bút bi) 120 URLs 94.2% 88.3%
Thiết bị số (Smartphone) 250 URLs 91.8% 86.5%
Gia dụng (Nồi cơm điện) 150 URLs 93.5% 87.8%

Đổi mới và đóng góp

  1. Cơ chế liên kết phân cấp danh mục với bộ sinh khóa tìm kiếm (SearchKeys): Thay vì tìm kiếm đơn lẻ, hệ thống tự động kết hợp GroupName + CategoryName + ProductName + Lexicon Keywords (như: "tốt", "bền", "rẻ", "hàng giả", "kém", "mau hỏng"), tạo ra độ chính xác ngữ cảnh cao hơn 60% so với tra cứu thông thường.
  2. Khảo cứu toàn diện các lớp thuật toán phân cụm hiện đại: Tổng hợp chi tiết từ thuật toán phân hoạch ($O(k \cdot n)$), phân cấp BIRCH (dùng cây đặc trưng cụm CF-Tree với hệ số nhánh $B$ và ngưỡng $T$), CURE (đại diện đa điểm, độ phức tạp $O(n^2 \log n)$) đến họ mật độ DBSCAN/DENCLUE với nền tảng phân phối Gaussian.
  3. Cầu nối ứng dụng thực tiễn: Chuyển đổi các lý thuyết khai phá dữ liệu hàn lâm thành một công cụ hỗ trợ ra quyết định kinh doanh (Decision Support System - DSS) trực quan, có khả năng bóc tách dữ liệu thị trường nhanh gấp 15 lần so với nhân sự tổng hợp thủ công.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng (Use Cases)

  • Doanh nghiệp bán lẻ & Phân phối: Đánh giá nhanh phản hồi của khách hàng đối với dòng sản phẩm mới ra mắt trước khi nhập khẩu số lượng lớn.
  • Phòng Marketing & Truyền thông: Giám sát khủng hoảng truyền thông, phát hiện sớm các từ khóa tiêu cực ("hỏng", "kém chất lượng", "hàng giả") xuất hiện trên các diễn đàn trực tuyến.
  • Cơ quan quản lý thị trường: Khảo sát xu hướng hàng nhái, hàng trôi nổi thông qua các liên kết rao bán bất thường.

Yêu cầu triển khai hệ thống

  • Phần cứng: CPU tối thiểu Intel Core i3 hoặc tương đương, RAM 2GB (Khuyến nghị 4GB+), Ổ cứng trống 500MB cho ứng dụng và dữ liệu.
  • Phần mềm: Hệ điều hành Windows 7 / Windows 8 / Windows 10 / Windows Server; Cài đặt .NET Framework 4.0 trở lên; Hệ quản trị cơ sở dữ liệu Microsoft SQL Server 2008 / 2012 / 2016.

Hạn chế và hướng phát triển

Hạn chế hiện tại

  • Kiến trúc ứng dụng: Hiện tại cài đặt trên Desktop Windows Forms, chưa hỗ trợ giao diện Web động hoặc ứng dụng di động.
  • Mức độ phụ thuộc máy tìm kiếm: Phụ thuộc vào cấu trúc phản hồi của máy tìm kiếm Google; việc truy vấn tần suất quá cao có thể gặp cơ chế phòng vệ (IP rate limiting).
  • Phân tích ngữ nghĩa tự nhiên (NLP): Phương pháp phân cụm hiện chủ yếu dựa trên bộ từ điển (Dictionary-based / Keyword-matching) và tần suất xuất hiện, chưa xử lý triệt để các câu nói mỉa mai, châm biếm phức tạp trong tiếng Việt.

Hướng phát triển

  1. Nâng cấp bộ phân tích ngôn ngữ tự nhiên bằng các mô hình nhúng từ (Word2Vec) và mô hình ngôn ngữ sâu (PhoBERT/Transformer).
  2. Chuyển đổi hệ thống sang kiến trúc Web/Cloud (ASP.NET Core Web API + ReactJS), tích hợp cơ chế phân tán để cào dữ liệu đa luồng (Multi-threading Web Crawler).
  3. Bổ sung biểu đồ trực quan hóa dữ liệu thời gian thực (Real-time Dashboard) theo dạng biểu đồ tròn (Pie chart), biểu đồ cột thể hiện biến thiên cảm xúc người dùng theo chuỗi thời gian.

Đối tượng hưởng lợi

  • Sinh viên & Học viên CNTT: Nguồn tài liệu tham khảo chi tiết về quy trình KDD, mã nguồn chuẩn C# .NET kết nối cơ sở dữ liệu SQL Server và hệ thống biểu đồ UML hoàn chỉnh (Use Case, Sequence, Class Diagram).
  • Lập trình viên & Kỹ sư dữ liệu: Nắm vững cấu trúc kết hợp giữa Web Scraping, cấu trúc dữ liệu CF-Tree và thuật toán phân cụm mật độ DBSCAN/OPTICS.
  • Doanh nghiệp & Giám đốc sản phẩm: Sở hữu giải pháp tự động hóa nghiên cứu thị trường, tiết kiệm hàng chục triệu đồng chi phí khảo sát thực địa hàng tháng.
  • Nhà nghiên cứu (Researchers): Tài liệu phân tích và so sánh có hệ thống về độ phức tạp tính toán giữa các họ thuật toán phân cụm dữ liệu phổ biến.

Câu hỏi thường gặp

1. Yêu cầu kỹ thuật tối thiểu để cài đặt và triển khai hệ thống là gì?

Hệ thống yêu cầu máy trạm chạy hệ điều hành Windows (32-bit hoặc 64-bit), đã cài đặt Microsoft .NET Framework phiên bản 4.0 và hệ quản trị Microsoft SQL Server 2008 trở lên. Người dùng chỉ cần import file script cơ sở dữ liệu và cấu hình chuỗi kết nối connectionString trong file cấu hình phần mềm.

2. Hệ thống xử lý thế nào khi Google thay đổi cấu trúc trả về hoặc chặn IP?

Trong phiên bản thử nghiệm, phần mềm sử dụng các tham số HTTP Header (User-Agent) tiêu chuẩn để gửi request. Khi mở rộng, hệ thống có thể tích hợp danh sách Proxy xoay vòng (Proxy Rotation) hoặc sử dụng trực tiếp Google Custom Search JSON API chính thức với API Key để đảm bảo tính ổn định tuyệt đối.

3. Có thể tích hợp thêm các máy tìm kiếm khác như Bing hay Yahoo không?

Có. Cơ sở dữ liệu và mã nguồn đã được thiết kế sẵn trường SearchEngineID trong bảng SearchTable. Lập trình viên chỉ cần hiện thực thêm class kế thừa module gửi truy vấn với endpoint và cú pháp tham số tương ứng của Bing hoặc Yahoo.

4. Chi phí vận hành và bảo trì hệ thống ước tính như thế nào?

Chi phí vận hành gần như bằng 0 nếu triển khai nội bộ (On-premises) trên hạ tầng máy tính có sẵn của doanh nghiệp. Chi phí bảo trì chủ yếu phát sinh khi cần mở rộng bộ từ khóa đánh giá (SearchKeys) hoặc nâng cấp dung lượng lưu trữ cơ sở dữ liệu SQL Server khi lượng bài viết thu thập đạt hàng triệu bản ghi.

5. Thời gian thu hồi vốn đầu tư (ROI) cho doanh nghiệp ứng dụng phần mềm?

Với một doanh nghiệp chi tiêu trung bình 15 - 30 triệu VNĐ/tháng cho các đợt khảo sát thị trường thủ công, việc áp dụng hệ thống tự động hóa này giúp cắt giảm 80% chi phí khảo sát, mang lại thời gian thu hồi vốn đầu tư (Payback Period) chỉ sau 1 đến 2 tháng vận hành.


Kết luận

Đồ án "Bài toán khai thác thông tin về sản phẩm từ Web" đã giải quyết thành công bài toán cầu nối giữa cơ sở lý thuyết Khai phá dữ liệu (Data Mining) và nhu cầu thực tiễn trong quản trị kinh doanh hiện đại. Với việc khảo cứu có hệ thống các thuật toán phân cụm kinh điển (K-Means, DBSCAN, BIRCH, CURE, DENCLUE) cùng việc hoàn thiện phần mềm ứng dụng C# .NET kết nối SQL Server 2008, đề tài không chỉ khẳng định tính khả thi về mặt kỹ thuật mà còn mở ra tiềm năng thương mại hóa rộng lớn trong lĩnh vực phân tích ý kiến người tiêu dùng và giám sát thương hiệu trên không gian số.