Tải bản đầy đủ (.pdf) (35 trang)

đề tài tích hợp dữ liệu từ các trang tin tức xác định thực thể quan hệ thực thể

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (9.34 MB, 35 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>ĐẠI HỌC BÁCH KHOA HÀ NỘI </b>

<b>TRƯỜNG CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG </b>

<b>BÁO CÁO BÀI TẬP CUỐI KỲ TÍCH HỢP DỮ LIỆU </b>

ĐỀ TÀI: TÍCH HỢP DỮ LIỆU TỪ CÁC TRANG TIN

<b>TỨC, XÁC ĐỊNH THỰC THỂ, QUAN HỆ THỰC THỂ </b>

<b>Giảng viên hướng dẫn: TS. Đỗ Bá Lâm </b>

<b>Hà Nội, tháng 6 năm 2023 </b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>LỜI NÓI ĐẦU </b>

Trong bối cảnh hiện nay công nghệ ngày càng phát triển, đi kèm với nó là sự gia tăng về khối lượng thơng tin được đưa lên các trang mạng xã hội, tin tức…hoặc

lên, muốn so sánh nhiều mặt hàng mua sắm hơn, hoặc muốn cân đối chi tiêu

quan nhất về các dữ liệu trong cùng phạm vi, cho phép người dùng có thể thao tác, truy vấn dữ liệu thơng qua lược đồ tích hợp hồn chỉnh.

Chúng ta thấy được việc xây dựng các hệ thống tích hợp dữ liệu hiện nay rất quan trọng trong các ứng dụng thực tế.Ví dụ trong lĩnh vực khách sạn, người quản lý cũng muốn tích hợp dữ liệu các khách sạn trong chuỗi kinh doanh để theo giõi, đánh giá và đưa ra hướng giải quyết cho từng chi nhánh. Hay thậm chí, cơng tác điều tra triệt phá tội phạm, các đơn vị cảnh sát, công an cũng cần hệ thống tích hợp lại dữ liệu của những thành phần liên quan.

Do nắm bắt được nhu cầu như vậy nên đề tài nhóm chọn hướng tới việc tích

và xác định mối quan hệ giữa các thực thể đó.Đây là một bài tốn nhóm em thấy rất hay và có độ khó cao ở phần xác định các quan hệ thực thể.Bên cạnh đó đề tài cũng bám sát vào thực tế hiện tại người đọc cần biết nhanh các thơng tin nóng được đưa lên và các thơng tin khác một cách chính xác, cụ thể.

Sau q trình nhóm thực hiện đề tài đã chọn, nhóm em xin gửi lời cảm ơn chân

hướng dẫn nhóm và giải đáp các thắc mắc, khó khăn mà nhóm gặp phải để hồn

Nhóm sinh viên thực hiện Nguyễn Kim Dân Nguyễn Thành Đạt

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>MỤC LỤC </b>

<b><small>CHƯƠNG 1. GIỚI THIỆU CHUNG ... 5</small></b>

<b><small>1.1 Giới thiệu đề tài ... 5</small></b>

<b><small>1.2 Hướng tiếp cận, giải quyết ... 5</small></b>

<small>3.3.2 Quá trình thu thập dữ liệu ... 13</small>

<small>3.4 Xử lý dữ liệu, đẩy lên server ... 15</small>

<small>3.5 Kết quả dữ liệu thu thập trên server... 15</small>

<small>CHƯƠNG 4. XÁC ĐỊNH THỰC THỂ, QUAN HỆ GIỮA CÁC THỰC THỂ ... 23</small>

<small>4.1 Cơ sở lý thuyết ... 23</small>

<small>4.2 Hướng tiếp cận giải quyết bài toán ... 25</small>

<small>4.3 Luồng thực hiện ... 26</small>

<small>CHƯƠNG 5. XÂY DỰNG WEB TÍCH HỢP ... 29</small>

<small>5.1 Giới thiệu chung: ... 29</small>

<small>5.2 Các tính năng của Website : ... 29</small>

<small>5.2.1 Hiển thị các bài báo mới nhất vừu thu thập về ... 29</small>

<b><small>5.2.2 Duyệt thêm khi lướt chuột xuống ... 30</small></b>

<b><small>5.2.3 Truy cập trang web gốc khi nhấn vào trang báo để đọc ... 31</small></b>

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<b><small>Hình 8. Minh h a thu th p d li u b ng nhi u Spider</small></b><small>ọậữ ệằề ... 15</small>

<b><small>Hình 9. Minh h a th c hi</small></b><small>ọựện đẩ</small><b><small>y d liữ ệu thu thập được lên server ... 16</small></b>

<b><small>Hình 10. Minh h a d li</small></b><small>ọữ ệu sau khi được đẩ</small><b><small>y lên server</small></b><small> ... 16</small>

<b><small>Hình 11. Hi n th s </small></b><small>ểị ố lượ</small><b><small>ng bài báo thu thập được ... 17</small></b>

<b><small>Hình 12. Th ng kê các bài báo theo ngu</small></b><small>ố</small> <b><small>ồn ... 17</small></b>

<b><small>Hình 13. Th ng kê các bài báo theo lo i danh m</small></b><small>ốạ</small> <b><small>ục ... 17</small></b>

<b><small>Hình 21. Minh h a quá trình sinh triple</small></b><small>ọ ... 28</small>

<b><small>Hình 22. Minh h a visualize quan h th c th</small></b><small>ọệựể ... 28</small>

<b><small>Hình 23. Minh h a xây d</small></b><small>ọựng các trườ</small><b><small>ng d liữ ệu ... 29</small></b>

<b><small>Hình 24. Hi n th cá API c a web</small></b><small>ểịủ ... 29</small>

<b><small>Hình 25. Hi n th các bài báo m i thu th</small></b><small>ểịớ</small> <b><small>ập ... 30</small></b>

<b><small>Hình 26. Hi n th các bài báo khi cu n trang xu</small></b><small>ểịộ</small> <b><small>ống... 30</small></b>

<b><small>Hình 27. Hi n th các bài báo khi cu n trang xu</small></b><small>ểịộ</small> <b><small>ống(tt) ... 31</small></b>

<b><small>Hình 28. Minh h a thao tác truy c p bài báo g</small></b><small>ọậ</small> <b><small>ốc ... 31</small></b>

<b><small>Hình 29. Minh h a hi n th trang báo g</small></b><small>ọểịốc đượ</small><b><small>c chọn ... 32</small></b>

<b>Danh mục bảng <small>Bảng 1. Các trường dữ liệu thu thập ... 12</small></b>

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>CHƯƠNG 1. GIỚI THIỆU CHUNG 1.1 Giới thiệu đề tài </b>

Nhóm em chọn đề tài thu thập, xây dựng hệ thống tích hợp dữ liệu từ các trang báo khác nhau. Vì nhóm muốn giải quyết bài tồn người đọc muốn có được các thơng tin chính xác và nhanh chóng từ các trang báo tin cậy trên internet. Tiếp theo đó từ các dữ liệu đó, chúng em cũng thực hiện phân tích và nhận dạng các thực thể xuất hiện, đồng thời xây dựng mối quan hệ giữa chúng.

Sau khi tìm hiểu về đề tài, cụ thể là cách thức để lưu trữ dữ liệu sau khi thu thập. Nhóm em quyết định lựa chọn hướng tiếp cận dựa trên Data warehouse

đổi, xóa sửa hầu như khơng gặp phải. Do đó lưu trữ dữ liệu dạng vật lý, các bản

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

CHƯƠNG KIẾN TRÚC HỆ THỐNG<b>2. 2.1 Kiến trúc tổng quan </b>

Tổng quan hệ thống sẽ bao gồm các thành phần sau: Crawler thu thập và tích hợp

liệu, yêu cầu người dùng đến trang đọc báo và người dùng cuối.

Hình . Ki n trúc t ng quan h th ng <small>2</small> ế ổ ệ ố

<b>2.2 Crawler </b>

<b>2.2.1 Tổng quan scrapy </b>

được sử dụng để thu thập dữ liệu các trang web và trích xuất dữ liệu có cấu trúc từ các trang của chúng.Nó có thể được sử dụng cho nhiều mục đihcs khác nhau, từ khai thác dữ liệu đến giám sát và tự động kiểm tra(testing).

Hiệu suất của nó rất nhanh, hơn nữa nó được xây dựng dựa trên Twisted, một khung mạng không đồng bộ, sử dụng cơ chế không chặn trong khi gửi yêu cầu đến người dùng.Một số ưu điểm của Scrapy trong thu thập dữ liệu là:

• Scrapy có hỗ trợ tích hợp để trích xuất dữ liệu từ các nguồn html bằng cách sử dụng biểu thức XPath và biểu thức CSS

• Nó là thư viện di động, được biết bằng python

• Tốc độ nhanh hơn các thư viện thu thập khác. Nó có thể giải nén các trang web với tốc độ nhanh hơn vài chục lần, hơn nữa nó tiêu tốn ít bộ nhớ và CPU

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<b>2.2.2 Cấu trúc scrapy </b>

Hình . C u trúc scrapy <small>3</small> ấ

<small>• </small> <b>Scrapy Engine: Kiểm sốt luồng dữ liệu của hệ thống, kích hoạt sự kiện </b>

khi có hành động xảy ra như click phân trang…

<small>• </small> <b>Scheduler: Có chức năng như một hàng đợi, sắp xếp thứ tự các url cần </b>

download.

<small>• </small> <b>Downloader: Thực hiện download các trang web trong Scheduler và cung </b>

cấp cho Scrapy Engine.

<small>• </small> <b>Spiders: Class được viết bởi lập trình viên, có chức năng bóc tách các dữ </b>

liệu cần thiết từ trang web thông qua các selector và tạo các url mới để đưa vào Scheduler.

<small>• </small> <b>Item Pipeline: Những dữ liệu được bóc tách từ Spiders sẽ được đưa vào </b>

đây để lưu trữ theo định dạng mong muốn: text, json…

<small>• </small> <b>Các middlewares: Là các thành phần nằm giữa Engine với các thành phần </b>

khác, chúng đều có mục địch là giúp người dùng có thể tùy biến, mở rổng khả năng xử lý cho các thành phần. VD: sau khi dowload xong url, bạn muốn tracking, gửi thông tin ngay lúc đó thì bạn có thể viết phần mở rộng và sửa lại cấu hình để sau khi Dowloader tải xong trang thì sẽ thực hiện việc tracking.

<small>o </small> <b>Spider middlewares: Là thành phần nằm giữa Eninge và Spiders, </b>

chúng xử lý các response đầu vào của Spiders và đầu ra (item và các

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<small>o </small> <b>Downloader middlewares: Nằm giữa Engine và Dowloader, chúng </b>

xử lý các request được đẩy vào từ Engine và các response được tạo ra từ Dowloader

<small>o </small> <b>Scheduler middlewares: Nằm giữa Engine và Scheduler để xử lý </b>

những requests giữa hai thành phần

<b>2.2.3 Luồng thực hiện trong scrapy </b>

<small>• </small> Khi bắt đầu crawl một website, Engine sẽ xác định tên miền và tìm vị trí của spider đó và u cầu spider đó tìm các urls đầu tiên để crawl.

<small>• </small> Engine nhận danh sách các urls đầu tiên từ spider, gửi cho Scheduler để sắp xếp.

<small>• </small> Engine yêu cầu danh sách các urls tiếp theo từ Scheduler

<small>• </small> Engine nhận danh sách các url tiếp theo từ Scheduler vào gửi đến Dowloader (requests).

<small>• </small> Downloader nhận request và thực hiện việc tải trang, sau khi tải xong sẽ tạo một response và gửi lại Engine.

<small>• </small> Respone từ Dowloader sẽ được Engine đẩy qua Spiders để xử lý.

<small>• </small> Tại Spiders, khi nhận được response, chúng bóc tách thông tin từ response (tilte, content, author, date publish...) và những url có khả năng để crawl và đẩy lại cho Engine (requests).

<small>• </small> Ở bước này, Engine nhận được kết quả từ Spiders sẽ thực hiện 2 công việc: đẩy những dữ liệu đã được bóc tách tới Item Pipeline để xử lý và lưu vào Databases, đẩy những url mới (requests) mới về Scheduler và bắt đầu lại từ bước 3(nhận các yêu cầu cho đến khi khơng cịn request nào từ Scheduler).

<b>2.3 Datawarehouse </b>

trên cloud nhằm giúp các thành viên trong nhóm có thể sử dụng được data mới nhất.

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Hình . Minh h a mongoDB Atlas <small>4</small> ọ

MongoDB là một hệ quản trị cơ sở dữ liệu NoSQL mã nguồn mở đa nền tảng viết bằng C++. Bản ghi trong MongoDB được lưu trữ dạng một dữ liệu văn bản (Document), là một cấu trúc dữ liệu bao gồm các cặp giá trị và trường tương tự như các đối tượng JSON. MongoDB được phát triển bởi MongoDB Inc. dưới dạng giấy phép Server Side Public License (SSPL).

MongoDB Atlas là cloud database của MongoDB được ra mắt vào năm 2016 chạy trên AWS, Microsoft Azure và Google Cloud Platform. Dữ liệu trong mỗi Cluster ở Atlas được lưu trữ theo cơ chế Replication, với 3 nodes: 1 master (primary) và 2 slaves (secondary).

<b>2.4 Server </b>

-framework để lập trình cho Frontend là ReactJs và Backend nhóm sử dụng Django.

ReactJS là một thư viện JavaScript mã nguồn mở được phát triển bởi Facebook nhằm tạo ra các ứng dụng web nhanh và hiệu quả với mã nguồn. Mục đích chính của ReactJS là khiến cho website hoạt động mượt mà, khả năng mở rộng cao và đơn giản. Thay vì làm việc trên toàn ứng dụng web, ReactJS cho phép các nhà phát triển có thể phá vỡ giao diện người dùng phức tạp một cách thuận lợi thành các thành phần đơn giản. Nhóm sử dụng thư viện này vì đây là thư viện đơn giản và có cộng đồng hỗ trợ lớn.

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

Hình . Minh h a react.js <small>5</small> ọ

Django là một framework phát triển ứng dụng web mã nguồn mở được viết bằng Python. Nó tập trung vào việc tạo ra các ứng dụng web mạnh mẽ và linh hoạt, với mục tiêu giảm thiểu công việc lặp lại và tăng năng suất phát triển. Nhóm sử dụng Django vì đây là thư viện có nhiều hỗ trợ trong việc quản lý cơ sở dữ liệu. Django

-tác với cơ sở dữ liệu bằng cách sử dụng các đối tượng Python thay vì viết các truy vấn SQL trực tiếp. Điều này giúp giảm thiểu công việc phức tạp của việc xử lý cơ sở dữ liệu và giúp bạn tập trung vào việc phát triển ứng dụng.

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

Hình . Minh h a Django <small>6</small> ọ

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<b>CHƯƠNG 3. THU THẬP, XỬ LÝ DỮ LIỆU 3.1 Phân tích chung </b>

Thu thập dữ liệu là một cơng đoạn rất quan trọng trong kiến trúc của nhóm em nói riêng và các hệ thống xử lý lớn nói chung.Do đó nhóm đã tìm hiểu khá kỹ về cách thức để thu thập được dữ liệu đủ lớn và rõ ràng.

Với đề tài mà nhóm em lựa chọn thì việc tìm được các trang báo đáng tin cậy khơng khó khăn, chính vì vậy nhóm đã tìm được khoảng 17 trang báo khác nhau để tiến hành thu thập dữ liệu:

Với mỗi trang báo kể trên chúng em thu thập dữ liệu có các trường như nhau,gồm 10 trường dữ liệu:

Bảng . <small>1</small> Các trường d li u thu thữ ệ ập

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

subcategory Thể loại bài báo phân nhỏ hơn (Ví dụ trong thể loại “Giải trí” có

Sau khi nhóm cân nhắc đã lựa chọn ra 10 trường dữ liệu như bảng trên để tiến hành thu thập dữ liệu, mỗi trường sẽ phục vụ một mục đích khác nhau.

<b>3.3 Thu thập dữ liệu 3.3.1 Các công nghệ sử dụng </b>

thu thập dữ liệu. Tổng quan về Scrapy nhóm em đã trình bày trong mục 2 chương 2.

Bên cạnh đó nhóm cũng dùng thư viện Beautifulsoup để hỗ trợ q trình bóc

các định dạng file HTML và XML. Nó hoạt động cùng với các parser (trình

và chỉnh sửa trong parse tree (cây phân tích được tạo từ parser). Nhờ các parser này,BeautifulSoup đã giúp các lập trình viên tiết kiệm được nhiều giờ làm việc khi trích xuất dữ liệu.

<b>3.3.2 Quá trình thu thập dữ liệu </b>

cấu trúc cơ bản của một spider:

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

Hình . C u trúc mơt spider <small>7</small> ấ

parse_page( ). Sau đó dữ liệu lấy về được phân tích cụ thể thơng qua hàm

thập được và xử lý nếu cần.

Tiếp theo, chúng em thực hiện chạy cùng lúc 17 Spider để thu thập dữ liệu từ 17 trang báo, đây là ưu thế của Scrapy trong thu thập dữ liệu từ nhiều nguồn với tốc độ cao:

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

Hình . Minh h a thu th p d li u b ng nhi u Spider <small>8</small> ọ ậ ữ ệ ằ ề

<b>3.3.3 Kiểm tra trùng lặp, đẩy lên server </b>

Với mỗi dữ liệu thu thập được, nhóm em tiến hành đối sánh với dữ liệu hiện có trên database server và nếu khơng có trùng lặp sẽ tiến hành đẩy dữ liệu mới lên và cập nhật:

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

Hình . Minh h a th c hi n y d<small>9</small> ọ ự ệ đẩ ữ liệu thu thập được lên server Hình bên dưới hiển thị dữ liệu sau khi được đưa lên server, gồm 10 trường dữ

Hình . Minh h a d li<small>10</small> ọ ữ ệu sau khi được đẩy lên server

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

Hình . Hi n th s <small>11</small> ể ị ố lượng bài báo thu thập được

Hiện tại nhóm đã thu thập được hơn 10 000 bài báo từ 17 trang báo khác nhau,

1793, 1653 bài báo.

Hình . Th ng kê các bài báo theo ngu n <small>12</small> ố ồ

Hình . Th ng kê các bài báo theo lo i danh m c <small>13</small> ố ạ ụ

nhau, các tin tức giải trí, thời sự, thế giới chiếm top3 số lượng, lần lượt là 975, 886, 672 bài báo.

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

Hình . Hi n th s lo i subcategory <small>14</small> ể ị ố ạ

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

<b>3.4 Schema matching and maping: </b>

Do mỗi bài báo đều có một quy chuẩn chung, từ một số bài chỉ đăng video thì các bài đều sẽ có các phần : ‘title’, ‘abstract’, ‘content’,… do đó nên việc đưa

cso quy định sẵn như vậy rồi. Và ngay từ bước đó nhóm đã quy chuẩn theo đó và crawl dữ liệu theo các trường như vậy nên không cần phải matching các schema.

Tuy nhiên, hệ thống cần phải phân các bài báo theo các category cho người

nhau(hình 14), như vậy cần phải nhóm các đề mục nay với nhau thành các đề mục có nội dung chung nhằm đảm bảo trải nghiệm người dùng.

Danh sách các đề mục nhóm tổng hợp được:

<small>['Hậu trường', 'Giao thông', 'Tuy n sinh', 'Tay lái', 'Giáo dểục', 'Bóng đá quố ế', 'Th ịc ttrường', 'Du l ch', 'Goft', 'Doanh nghi p', 'Th gi i', 'Bịệế ớất động sản', 'Du học', 'Giới sao', 'Tài chính', ' m th c', 'Xe', 'Quân s ', 'TiẨựựếng Anh', 'Đời sống', 'Chính trị', 'Pháp luật', 'Nh c'ạ , 'Lao động-Việc làm', 'B nh', 'Th i s ', 'Th thao', 'H ệờ ựểồ sơ', 'Phân tích', 'Gia đình', 'Pháp đình', 'Quần vợt', 'Dinh dưỡng', 'Sống kh e', 'S c kh e', 'Diỏứỏễn đàn', 'Chứng khốn', 'Các mơn khác', 'Cu c sộ ống đó đây', 'Tư vấn', 'Tiêu dùng', 'Phim', 'Bóng đá Việt Nam', 'Thời trang', 'Kinh doanh', 'Gi i trí'] ả</small>

Nhóm sử dụng pretrain PhoBERT để embedding cho nội dung của từng bài báo. Coi mỗi đề mục là 1 cụm, nhóm tìm tâm cụm đó. Từ 46 tâm cụm, nhóm tiến hành dùng Kmeans và độ đo “Inertia”, nếu chỉ số này không giảm đáng kể sau khi tăng số cụm trong phạm vi đó thì đấy là số cụm hợp lý:

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

Số cụm được cho là hợp lý tại vị trí 10. Khi nhóm thử phân các đề mục với số cụm là 10 được một kết quả tạm chấp nhận được:

<small>[['Giới sao', 'Nhạc', 'Phim', 'Th i trang', 'Giờải trí'], ['Thế gi i', 'Quân s ', 'Phân tích', 'Cu c sớựộ ống đó đây'], </small>

<small>['Giao thơng', 'Du l ch', 'Doanh nghi p', 'Bịệất động s n', 'Tài chính', ' m th c', 'Chính tr ', ảẨựị'Lao động-Việc làm', 'Th i s ', 'Ch ng khoán', 'Tiêu dùng', 'Kinh doanh'], ờ ựứ</small>

<small>['Tay lái', 'Thị trường', 'Xe', 'Diễn đàn'], </small>

<small>['Bóng đá quốc tế', 'Thể thao', 'Bóng đá Việt Nam'], ['Goft', 'Qu n v t', 'Các môn khác'], ầợ</small>

<small>['Đời sống', 'Bệnh', 'Gia đình', 'Dinh dưỡng', 'Sống khỏe', 'Sức khỏe', 'Tư vấn'], ['Pháp lu t', 'Hậồ sơ', 'Pháp đình'], </small>

<small>['Hậu trường'], </small>

<small>['Tuyển sinh', 'Giáo d c', 'Du h c', 'Tiụọếng Anh']] </small>

Ta thấy nhóm các đề mục: ['Tuyển sinh', 'Giáo d c', 'Du h c', 'Ti<small>ụọếng Anh']] khá là </small>hợp lý vì có chung chủ đề chính là trong học tập, du học. Hay các nhóm khác cũng hợp lý, tuy nhiên vẫn có các đề mục bị nhóm với nhau không hợp lý lắm: <small>['Giao thông', 'Du l ch', 'Doanh nghi p', 'Bịệất động s n', 'Tài chính', ' m th c', 'Chính tr ', ảẨựị'Lao động-Việc làm', 'Th i s ', 'Ch ng khoán', 'Tiêu dùng', 'Kinh doanh'].ờ ựứ</small>

Nguyên nhân có thể chỉ ra là có những đề mục số lượng tin bài rất nhỏ, có những đề mục chủ đề lại rất rộng, nhiều tin bài, điều đó có thể dẫn đến mơ hình của nhóm khơng chính xác.

Tuy vậy thì đây cũng là bước xử lý đã giúp đỡ chúng em, có thể tham khảo và tiếp tục phân cụm các đề mục một nhanh chóng thay vì ngồi đọc và gh p 46 đề émục.

Sau khi thêm các bước xử lý bằng cơm thì các đề mục được phân như sau:Tư

<b>vấn </b>

Tư vấn Giải

<b>trí </b>

Giải trí

thực Giới sao

Du lịch

Thời trang

trường

</div>

×