1. Trang chủ
  2. » Luận Văn - Báo Cáo

Ứng dụng cây hậu tố để so khớp độ giống nhau giữa các tài liệu

71 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 71
Dung lượng 4,89 MB

Nội dung

Cây hậu tố là một cấu trúc dữ liệu quan trọng được sử dụng trong rất nhiều thuật toán xử lý xâu Sức mạnh của cây hậu tố nằm ở khả năng biểu diễn tất cả các hậu tố của một xâu và cung cấp nhiều phép toán quan trọng giúp nâng cao tính hiệu quả của những thuật toán Chính nhờ những tính chất đó mà cây hậu tố được sử dụng rất nhiều trong các lĩnh vực khác nhau như xử lý văn bản trích chọn và tìm kiếm thông tin phân tích dữ liệu sinh học đối sánh mẫu nén dữ liệu… Để đánh giá mức độ giống nhau của văn bản thường sử dụng các phép đo độ tương tự giữa các văn bản Sự tương đồng giữa hai văn bản là sự giống nhau về nội dung giữa hai văn bản đó Do đó hai văn bản là bản sao hoặc gần giống nhau thì sẽ có nội dung giống nhau nhiều hay độ tương đồng giữa hai văn bản là cao Luận văn tập trung nghiên cứu đề xuất phương pháp so sánh văn bản dựa trên cây hậu tố để ứng dụng trong bài toán tính độ tương đồng văn bản cụ thể là đánh giá mức độ giống nhau của hai văn bản và của một văn bản truy vấn so với tập văn bản mẫu trong kho dữ liệu

ĐẠI HỌC ĐÀ NẴNG TRƢỜNG ĐẠI HỌC BÁCH KHOA HUỲNH THỊ XUÂN DIỆU ỨNG DỤNG CÂY HẬU TỐ ĐỂ SO KHỚP ĐỘ GIỐNG NHAU GIỮA CÁC TÀI LIỆU Chuyên ngành: Khoa học máy tính Mã số: 60.48.01.01 LUẬN VĂN THẠC SĨ Ngƣời hƣớng dẫn khoa học: PGS.TS Nguyễn Thanh Bình Đà Nẵng – Năm 2018 LỜI CẢM ƠN Lời xin trân trọng gửi lời cảm ơn đến cán bộ, giáo viên Phòng Đào tạo Khoa Công nghệ thông tin, Trƣờng Đại học Bách khoa Đà Nẵng tạo điều kiện thuận lợi cho thời gian nghiên cứu hoàn thành Luận văn Với lịng kính trọng biết ơn sâu sắc, tơi xin gửi lời cảm ơn đến thầy giáo hƣớng dẫn PGS.TS.Nguyễn Thanh Bình tận tình giúp đỡ tơi xây dựng ý tƣởng nghiên cứu, nhƣ suốt trình nghiên cứu hồn thiện Luận văn Thầy ủng hộ, động viên hỗ trợ điều kiện tốt để tơi hồn thành Luận văn Bên cạnh đó, tơi xin gửi lời cảm ơn đến gia đình bạn bè, đồng nghiệp giúp đỡ, hỗ trợ tơi nghiên cứu, hồn thành luận văn Xin chân thành cảm ơn thầy, cô Hội đồng cho tơi đóng góp q báu để hồn chỉnh luận văn Xin trân trọng cảm ơn! TÁC GIẢ Huỳnh Thị Xuân Diệu LỜI CAM ĐOAN Tôi xin cam đoan nội dung luận văn nghiên cứu riêng tôi, tự thực dƣới hƣớng dẫn trực tiếp PGS.TS Nguyễn Thanh Bình Trong tồn luận văn, nội dung đƣợc trình bày cá nhân tơi đƣợc tổng hợp từ nhiều nguồn tƣ liệu khác Mọi tài liệu tham khảo dùng luận văn đƣợc trích dẫn rõ ràng tên tác giả, tên cơng trình, thời gian, địa điểm cơng bố Tơi xin hồn tồn chịu trách nhiệm chịu hình thức kỷ luật theo quy định cho lời cam đoan NGƢỜI CAM ĐOAN Huỳnh Thị Xuân Diệu ỨNG DỤNG CÂY HẬU TỐ ĐỂ SO KHỚP ĐỘ GIỐNG NHAU GIỮA CÁC TÀI LIỆU Học viên: Huỳnh Thị Xuân Diệu Chuyên ngành: Khoa học máy tính Mã số: 60.48.01.01 - Khóa: K34, Trường Đại học Bách khoa - ĐHĐN Tóm tắt - Cây hậu tố cấu trúc liệu quan trọng sử dụng nhiều thuật toán xử lý xâu Sức mạnh hậu tố nằm khả biểu diễn tất hậu tố xâu cung cấp nhiều phép toán quan trọng giúp nâng cao tính hiệu thuật tốn Chính nhờ tính chất mà hậu tố sử dụng nhiều lĩnh vực khác như: xử lý văn bản, trích chọn tìm kiếm thơng tin, phân tích liệu sinh học, đối sánh mẫu, nén liệu… Để đánh giá mức độ giống văn bản, thường sử dụng phép đo độ tương tự văn Sự tương đồng hai văn giống nội dung hai văn Do đó, hai văn gần giống có nội dung giống nhiều, hay độ tương đồng hai văn cao Luận văn tập trung nghiên cứu, đề xuất phương pháp so sánh văn dựa hậu tố để ứng dụng tốn tính độ tương đồng văn bản, cụ thể đánh giá mức độ giống hai văn văn truy vấn so với tập văn mẫu kho liệu Từ khóa – hậu tố, độ tương đồng văn bản, toán tách câu, khoảng cách Jaro, thuật toán Ukkonen APPLICATION SUFFIX TREE TO MATCH THE SIMILARITY BETWEEN DOCUMENTS Abstract - Suffix trees are an important data structure used in many string processing algorithms The strength of the suffix tree lies in its ability to represent all of the suffixes of a string and provides many important mathematical operations to improve the efficiency of algorithms It is because of these properties that the suffix tree is used extensively in various fields such as word processing, extracting and searching information, biological data analysis, pattern matching, data compression To evaluate the similarity of text, similarity measurements between texts are often used The similarity between the two texts is the similarity between them Therefore, if the two texts are identical or duplicate, their content will be very similar, or the similarity between the two documents will be high The thesis focuses on the research, proposing a method of comparing the text based on the suffix trees to be applied in the problem of calculating the similarity of the text, namely the assessment of the similarity of the two texts and of the text query with sample text file in datastore Keywords – suffix trees, text match, sentence separation, Jaro distance, Ukkonen algorithm -i- MỤC LỤC MỤC LỤC iv LỜI CAM ĐOAN i LỜI CẢM ƠN i DANH MỤC CÁC HÌNH VẼ iii DANH MỤC CÁC BẢNG iv MỞ ĐẦU 1 LÝ DO CHỌN ĐỀ TÀI MỤC TIÊU VÀ NHIỆM VỤ NGHIÊN CỨU ĐỐI TƢỢNG VÀ PHẠM VI NGHIÊN CỨU PHƢƠNG PHÁP NGHIÊN CỨU Ý NGHĨA KHOA HỌC VÀ THỰC TIỄN CỦA ĐỀ TÀI BỐ CỤC LUẬN VĂN CHƢƠNG NGHIÊN CỨU TỔNG QUAN 1.1 Đặt vấn đề 1.2 Các thuật toán so khớp chuỗi 1.2.1 Thuật tốn Nạve 1.2.2 Thuật toán Brute – Force 1.2.3 Thuật toán Rabin – Karp 1.2.4 Thuật toán Boyer – Moore 1.3 Các công cụ có 1.3.1 Hệ thống phần mềm Plagiarism Checker 1.3.2 Hệ thống phần mềm Dupli Checker 1.4 Kết chƣơng 11 CHƢƠNG ỨNG DỤNG CÂY HẬU TỐ ĐỂ SO KHỚP ĐỘ GIỐNG NHAU GIỮA CÁC TÀI LIỆU 12 2.1 Giới thiệu hậu tố 12 2.2 Một số khái niệm sở 12 2.2.1 Trie hậu tố 13 2.2.2 Cây hậu tố 15 2.2.3 Chuỗi, chuỗi con, hậu tố tiền tố 16 2.2.4 Cây hậu tố tổng quát 16 2.2.5 Liên kết hậu tố 17 2.3 Thuật toán xây dựng hậu tố 18 2.3.1 Thuật toán Ukkonen 18 2.3.2 Ứng dụng hậu tố tốn tìm xâu chung dài 23 2.4 Ứng dụng hậu tố để so khớp độ giống văn 24 2.4.1 Phát biểu toán 24 2.4.2 Xây dựng tập liệu 25 2.5 Mô hình tổng quát hệ thống 27 2.5.1 Kiến trúc hệ thống 27 2.5.2 Sơ đồ chi tiết 28 2.6 Phƣơng pháp đo độ tƣơng đồng văn 29 2.7 Kết chƣơng 30 -iiCHƢƠNG XÂY DỰNG ỨNG DỤNG VÀ THỬ NGHIỆM 31 3.1 Đặc điểm ngơn ngữ tiếng Việt tốn tách câu 31 3.1.1 Câu cấu trúc câu tiếng Việt 31 3.1.2 Bài toán tách câu 35 3.2 Môi trƣờng cài đặt 36 3.3 Kết thử nghiệm đánh giá 36 3.3.1 Kết thử nghiệm 36 3.3.2 Đánh giá kết 43 3.4 Kết chƣơng 43 KẾT LUẬN 44 TÀI LIỆU THAM KHẢO 45 PHỤ LỤC QUYẾT ĐỊNH GIAO ĐỀ TÀI LUẬN VĂN (bản sao) -iii- DANH MỤC CÁC HÌNH VẼ Hình 1.1 Minh họa giải thuật Nạve Hình 1.2 Giao diện web Plagiarism Checker Software Hình 1.3 Kiểm tra nội dung giống Plagiarism Checker Software Hình 1.4 Kết so khớp với Plagiarism Checker Software Hình 1.5 Giao diện web Dupli CheckerSoftware 10 Hình 1.6 Kết so khớp với Dupli CheckerSoftware 11 Hình 2.1 Trie 13 Hình 2.2 Vai trị ký tự cầm canh @ 14 Hình 2.3 Trie hậu tố 15 Hình 2.4 Cây hậu tố chuỗi bbabab 16 Hình 2.5 Cây hậu tố tổng quát cho chuỗi S1=TACTAG; S2 = CACT 17 Hình 2.6 Cây hậu tố tổng quát liên kết 17 Hình 2.7 Cây hậu tố ngầm định cho xâu axabx trƣớc (a) sau (b) thêm ký tự thứ sáu b 19 Hình 2.8 Bƣớc mở rộng j > pha i Đi lên tối đa cạnh từ cuối đƣờng S[j1 i] đến nút v sau theo liên kết hậu tố đến s(v), xuống theo đƣờng có nhãn  áp dụng luật bổ sung phù hợp để thêm hậu tố S[j i+1] 20 Hình 2.9 Quá trình thực thuật toán 22 Hình 2.10 Mơ hình kiến trúc hệ thống 27 Hình 2.11 So sánh hai văn 28 Hình 2.12 So sánh văn với tập văn nguồn 29 Hình 3.1 Giao diện chƣơng trình 38 Hình 3.2 So sánh văn giống hoàn toàn cho kết tỉ lệ so khớp 100% 38 Hình 3.3 So sánh văn khác hoàn toàn cho kết tỉ lệ so khớp 0% 39 Hình 3.4 So sánh văn 40 Hình 3.5 Xem lịch sử chƣơng trình 40 -iv- DANH MỤC CÁC BẢNG Bảng 1.1 Thuật toán Naive Bảng 1.2 Thuật toán Rabin - Karp Bảng 1.3 So sánh đánh giá số thuật toán so khớp chuỗi Bảng 2.1 Thuật toán Ukkonen dựng hậu tố ngầm định 21 Bảng 2.2 Thủ tục tìm LCS sử dụng hậu tố 26 Bảng 3.1 Các tài liệu mẫu để so với giá trị ƣớc lƣợng 37 Bảng 3.2 Kết chƣơng trình so với giá trị ƣớc lƣợng 37 Bảng 3.3 Thống kê tỉ lệ giống văn (VB1) so với văn khác kho liệu theo từ câu 41 Bảng 3.4 Thống kê tỉ lệ giống hai văn 43 MỞ ĐẦU LÝ DO CHỌN ĐỀ TÀI Trong năm gần đây, xử lý ngơn ngữ tự nhiên, tìm kiếm so khớp nội dung tài liệu văn lĩnh vực đƣợc cộng đồng khoa học nƣớc quan tâm Hiện nay, liệu đƣợc lƣu trữ dƣới nhiều hình thức khác nhau, nhƣng văn hình thức chủ yếu để lƣu trữ trao đổi thông tin Ngày nay, với phát triển mạnh mẽ Internet, liệu văn trở nên phong phú nội dung tăng nhanh số lƣợng Chỉ vài thao tác đơn giản, đâu, thời điểm nào, ta nhận khối lƣợng khổng lồ trang web tài liệu điện tử liên quan đến nội dung tìm kiếm Chính dễ dàng này, dẫn đến tình trạng chép, vi phạm quyền gian dối, chống đối kết học tập, nghiên cứu diễn sơi khó kiểm sốt Đặc biệt, lĩnh vực giáo dục – đào tạo, việc ngƣời học tham khảo chép phổ biến, làm giảm khả tƣ chất lƣợng nghiên cứu, học tập Vấn đề đặt là, làm để xác định phép đo độ giống văn bản, sở đƣa kết luận việc chép bài, làm để phân loại đánh giá kết luận, nghiên cứu ngƣời học Trong nhiều lĩnh vực nhƣ tìm kiếm, so khớp, trích chọn thơng tin… lƣợng lớn liệu thƣờng đƣợc lƣu trữ tập tin tuyến tính khối lƣợng liệu thu thập đƣợc tăng lên nhanh nên đòi hỏi phải có thuật tốn xử lý so khớp liệu văn hiệu So khớp chuỗi chủ đề quan trọng lĩnh vực xử lý văn Các thuật toán so khớp chuỗi đƣợc xem thành phần sở đƣợc ứng dụng hệ thống thực tế Hơn nữa, thuật tốn đối sánh chuỗi cịn cung cấp tảng, mơ hình cho nhiều lĩnh vực khác khoa học máy tính nhƣ xử lý ngơn ngữ tự nhiên, khai thác liệu văn bản, tin y sinh… Vì vậy, chúng tơi nghiên cứu thuật tốn so khớp chuỗi để ứng dụng tốn tính độ tƣơng đồng văn Để đánh giá mức độ giống văn bản, thƣờng sử dụng phép đo độ tƣơng tự văn Sự tƣơng đồng hai văn giống nội dung hai văn Do đó, hai văn gần giống có nội dung giống nhiều, hay độ tƣơng đồng hai văn cao Đã có nhiều cơng trình nghiên cứu đánh giá độ tƣơng tự văn sử dụng trực tuyến nhƣ Plagiarism Checker, Turnitin, Dupli Checker Tuy nhiên, hệ thống cho phép phát trùng lặp nguồn sở liệu gốc thực đƣợc trực tuyến môi trƣờng có Internet Bên cạnh đó, việc mở rộng sở liệu mẫu theo yêu cầu ngƣời sử dụng trở nên khó khăn chi phí cao Với tốn đặt nhƣ trên, chúng tơi tìm hiểu, nghiên cứu phƣơng pháp, kỹ thuật biểu diễn so khớp văn bản… định chọn đề tài “Ứng dụng hậu tố để so khớp độ giống tài liệu” làm đề tài tốt nghiệp luận văn cao học MỤC TIÊU VÀ NHIỆM VỤ NGHIÊN CỨU 2.1 Mục tiêu nghiên cứu Mục tiêu nghiên cứu đề tài xây dựng ứng dụng sử dụng thuật tốn so khớp chuỗi để phát nội dung giống tài liệu 2.2 Nhiệm vụ đề tài - Nghiên cứu cấu trúc tài liệu dạng văn - Tìm hiểu phƣơng pháp kỹ thuật tách câu tiếng Việt - Tìm hiểu thuật tốn tìm kiếm so khớp chuỗi - Xây dựng chƣơng trình ứng dụng để so sánh độ giống tài liệu ĐỐI TƢỢNG VÀ PHẠM VI NGHIÊN CỨU 3.1 Đối tƣợng nghiên cứu Đối tƣợng nghiên cứu đề tài tập trung vào nội dung: - Cấu trúc tài liệu dạng văn - Phƣơng pháp kỹ thuật tách câu tiếng Việt - Các thuật tốn tìm kiếm so khớp chuỗi 3.2 Phạm vi nghiên cứu - Tài liệu ngôn ngữ tiếng Việt - Xử lý văn theo hậu tố để phục vụ đánh giá mức độ giống văn tiếng Việt PHƢƠNG PHÁP NGHIÊN CỨU - Nghiên cứu lý thuyết:  Thu nhập, phân tích tài liệu thơng tin liên quan đến đề tài nhƣ: mơ hình đặc trƣng văn tiếng Việt, kỹ thuật tách câu tiếng Việt, thuật tốn tìm kiếm so khớp chuỗi  Tìm hiểu tài liệu mơ tả số công cụ so khớp văn tài liệu liên quan - Nghiên cứu ứng dụng: Nghiên cứu cơng cụ, đề xuất thuật tốn xây dựng Phụ lục 3: Mã nguồn nạp danh sách từ public void NapDanhSachTu() { if (!string.IsNullOrEmpty(this.NoiDung) && (this.DanhSachTu == null || this.DanhSachTu.Count == 0)) { string[] iNoiDungAStr = this.NoiDung.Split(new string[] { " " }, StringSplitOptions.None); if (iNoiDungAStr != null && iNoiDungAStr.Length > 0) { Tu iTu; string iNoiDung; int iViTri = -1; if (this.DanhSachTu == null) { this.DanhSachTu = new List(); } foreach (var item in iNoiDungAStr) { iNoiDung = item.Trim(); if (!string.IsNullOrEmpty(iNoiDung)) { iViTri++; iTu = new Tu() { Cau = this, ViTri = iViTri, NoiDung = iNoiDung, ViTriChung = -1 }; //iTu.XuLyTu(); this.DanhSachTu.Add(iTu); } } } } } Phụ lục 4: Mã nguồn xử lý văn private static void XuLySoKhop(Dictionary aThuVienTu1, Dictionary aThuVienTu2) { Tu iTu = null; int iViTri = 1; int iViTriMoi = 1; Tu iTuLonNhat = null; bool iKetThuc = false; bool iNhayCoc = false; int iTongSoKhopMax = 1; IEnumerable ieSoKhop; string iNoiDung = string.Empty; string iNoiDung1 = string.Empty; string iNoiDung2 = string.Empty; List iDanhSachTu1 = aThuVienTu1.Values.SelectMany(d => d).OrderBy(t t.ViTriVanBan).ToList(); List iDanhSachTu2 = aThuVienTu2.Values.SelectMany(d => d).OrderBy(t t.ViTriVanBan).ToList(); for (int i = 0; i < iDanhSachTu1.Count; i++) { ieSoKhop = null; iNoiDung = iDanhSachTu1[i].NoiDung.ToLower(); if (aThuVienTu2.ContainsKey(iNoiDung)) { ieSoKhop = aThuVienTu2[iNoiDung].Where(t => t.ViTriChung < 0); } if (ieSoKhop != null && ieSoKhop.Count() > 0) { iTongSoKhopMax = 0; iTuLonNhat = ieSoKhop.ElementAt(0); foreach (var item in ieSoKhop) { iViTri = 0; iNoiDung1 = iDanhSachTu1[i].NoiDung; iNoiDung2 = iDanhSachTu2[item.ViTriVanBan].NoiDung; while (string.Compare(iNoiDung1, iNoiDung2, true) == 0) { if ((i + iViTri + 1) >= iDanhSachTu1.Count || (item.ViTriVanBan + iViTri + 1) >= iDanhSachTu2.Count || iDanhSachTu2[item.ViTriVanBan + iViTri + 1].ViTriChung >= { break; } if (iDanhSachTu2[item.ViTriVanBan + iViTri + 1].ViTriChung >= { break; } => => 0) 0) iViTri++; iNoiDung1 = iDanhSachTu1[i + iViTri].NoiDung; iNoiDung2 = iDanhSachTu2[item.ViTriVanBan + iViTri].NoiDung; } if (string.Compare(iNoiDung1, iNoiDung2, true) != 0) { iViTri -= 1; } if (iTongSoKhopMax < iViTri) { iTongSoKhopMax = iViTri; iTuLonNhat = item; } } if (iTongSoKhopMax > 0) { iNhayCoc = false; iViTriMoi = iTuLonNhat.ViTriVanBan + iTongSoKhopMax + 1; if (iDanhSachTu2.Count > iViTriMoi) { iViTri = iDanhSachTu1[i].ViTriVanBan; ieSoKhop = aThuVienTu1[iNoiDung].Where(t => t.ViTriVanBan > iViTri); if (ieSoKhop != null) { foreach (var item in ieSoKhop) { iNhayCoc = false; for (int j = iTuLonNhat.ViTriVanBan; j = iDanhSachTu1.Count) { iNhayCoc = false; break; } iTu = iDanhSachTu1[item.ViTriVanBan + j - iTuLonNhat.ViTriVanBan]; iNhayCoc = string.Compare(iTu.NoiDung, iDanhSachTu2[j].NoiDung, true) == 0; if (!iNhayCoc) { break; } } if (iNhayCoc) { break; } } } } if (!iNhayCoc) { for (int j = iTuLonNhat.ViTriVanBan; j < iViTriMoi; j++) { iTu = iDanhSachTu1[i + j - iTuLonNhat.ViTriVanBan]; iTu.ViTriChung = iDanhSachTu2[j].ViTriVanBan; iDanhSachTu2[j].ViTriChung = iTu.ViTriVanBan; } } i += iTongSoKhopMax; } } iKetThuc = iDanhSachTu2.Count == iDanhSachTu2.Count(t => t.ViTriChung >= 0); if (iKetThuc) { break; } } if (!iKetThuc) { ieSoKhop = iDanhSachTu1.Where(t => t.ViTriChung < 0); foreach (var item in ieSoKhop) { iTu = null; iNoiDung = item.NoiDung.ToLower(); if (aThuVienTu2.ContainsKey(iNoiDung)) { iTu = aThuVienTu2[iNoiDung].Where(t => t.ViTriChung < 0).OrderBy(t => t.ViTriVanBan).FirstOrDefault(); } if (iTu != null) { item.ViTriChung = iTu.ViTriVanBan; iTu.ViTriChung = item.ViTriVanBan; } } } } Phụ lục 5: Mã nguồn tính độ tƣơng đồng văn private static decimal TinhTheoKhoangCachJaro(string[] ieChungVanBan1, string[] ieChungVanBan2, int aTongVanBan1, int aTongVanBan2) { int iTongChung = ieChungVanBan1.Length; if (iTongChung == 0) { return 0; } decimal iPhanTram = 0; decimal iSoBuocChuyen = 0; if (iTongChung > 0) { int iSoKhongDungViTri = 0; for (int i = 0; i < iTongChung; i++) { if (string.Compare(ieChungVanBan1[i], ieChungVanBan2[i], true) != 0) { iSoKhongDungViTri++; } } iSoBuocChuyen = (decimal)iSoKhongDungViTri / 2; } iPhanTram = (decimal)iTongChung / aTongVanBan1; iPhanTram += (decimal)iTongChung / aTongVanBan2; iPhanTram += (decimal)(iTongChung - iSoBuocChuyen) / iTongChung; iPhanTram = (decimal)iPhanTram / 3; return iPhanTram; } ... dung giống tài liệu Tiếp theo chƣơng 2, chúng tơi trình bày thuật toán so khớp chuỗi ứng dụng tốn so khớp độ giống tài liệu 12 CHƢƠNG ỨNG DỤNG CÂY HẬU TỐ ĐỂ SO KHỚP ĐỘ GIỐNG NHAU GIỮA CÁC TÀI LIỆU... thuật tốn tìm kiếm so khớp mẫu có, giới thiệu số ứng dụng tƣơng tự Chương Ứng dụng hậu tố để so khớp độ giống tài liệu Chƣơng đƣợc dành để trình bày khái niệm vấn đề liên quan đến hậu tố, xác... hiểu, nghiên cứu phƣơng pháp, kỹ thuật biểu diễn so khớp văn bản… định chọn đề tài ? ?Ứng dụng hậu tố để so khớp độ giống tài liệu? ?? làm đề tài tốt nghiệp luận văn cao học MỤC TIÊU VÀ NHIỆM VỤ NGHIÊN

Ngày đăng: 26/04/2021, 12:00

w