Nội dung 6.0 điểm STT Nội dung đánh giá Điểm tối đa Kém 25% Trung bình 50% Khá 75% Tốt 100% Điểm đánh giá lựa chọn ý tưởng Chọn ý tưởng trong số được đề nghị Tìm kiếm và đưa ra được ý tư
Trang 1TRƯỜNG ĐẠI HỌC THỦ DẦU MỘT
VIỆN KỸ THUẬT CÔNG NGHỆ
ĐỒ ÁN MÔN HỌC NHẬP MÔN LẬP TRÌNH KHOA HỌC DỮ LIỆU
Đề tài XÂY DỰNG DỮ LIỆU TÌM KIẾM TIN
TỨC
SVTH: 1 Đỗ Quốc Khánh An Mã SV: 2024801040005
2 Bouabangbay Phaiakone 20L248010400057
Lớp : D20HTTT01
GVHD : ThS Nguyễn Thế Bảo
Tháng 4/2023
Trang 2MỤC LỤC
CHƯƠNG 1 TỔNG QUAN (1đ) 1
1 Giới thiệu tổng quan đề tài 1
2 Tổng quan Python: 1
3 Tổng quan về thu thập dữ liệu bằng Python 3
CHƯƠNG 2 THU THẬP DỮ LIỆU VÀ XÂY DỰNG HỆ THỐNG (6.5đ) 5
1 Mô tả dữ liệu đã thu thập 5
2 Xây dựng hệ thống tìm kiếm 8
a Tìm kiếm theo từ khóa 8
b Sắp xếp kết quả tìm kiếm 8
c Xây dựng giao diện hệ thống tìm kiếm 9
CHƯƠNG 3 KẾT LUẬN (0.5đ) 12
1 Kết quả đã làm được 12
2 Hạn chế (chưa làm được) 12
3 Thuận lợi và khó khăn 12
a Thuận lợi 12
b Khó khăn 12
i
Trang 3TRƯỜNG ĐH THỦ DẦU MỘT
VIỆN KỸ THUẬT CÔNG NGHỆ
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự do – Hạnh phúc PHIẾU CHẤM TIỂU LUẬN
Thời gian: Địa điểm:
Học phần:
Tên đề tài:
Sinh viên/ Nhóm SV thực hiện Lớp
Phần 1 Nội dung (6.0 điểm)
STT Nội dung đánh giá Điểm tối đa
Kém (25%)
Trung bình (50%)
Khá (75%)
Tốt (100%) Điểm
đánh giá
lựa chọn ý tưởng
Chọn ý tưởng trong số được đề nghị
Tìm kiếm
và đưa ra được ý tưởng khá tốt
Tích cực tìm kiếm và chủ động đưa ra
ý tưởng
2
Xác định được các kỹ
thuật để thu thập và xử
lý dữ liệu cho bài toán
cần xây dựng
1.0 Sinh viênkhông xác định được
kỹ thuật
để thu thập và xử
lý dữ liệu
Sinh viên xác định
thuật để thu thập và
xử lý dữ
nhiều sai sót
Sinh viên xác định
thuật để thu thập và
xử lý dữ liệu, còn một vài sai sót nhỏ
Sinh viên viết xác định
thuật để thu thập và xử
lý dữ liệu
không đáng kể)
3
Mô tả dữ liệu đã thu
thập
không thu thập được
dữ liệu như yêu cầu
Sinh viên không thu thập được dữ liệu như yêu cầu
Sinh viên thu thập được dữ liệu khá tốt (từ 500
-1000 mẫu)
Sinh viên thu thập được dữ liệu tốt (hơn
1000 mẫu)
kiếm
không xây
Sinh viên
ii
Trang 4dựng được ứng dụng như yêu cầu
được ứng dụng như yêu cầu, nhưng không
có sắp xếp kết quả tìm kiếm được
được ứng dụng như yêu cầu, có sắp xếp kết quả tìm kiếm được
được ứng
yêu cầu, có sắp xếp kết quả tìm kiếm được,
có kết hợp phương pháp học máy trong tìm kiếm
Phần 2 Trình bày (2.0 điểm)
đúng mẫu
và còn nhiều lỗi chính tả
Đúng mẫu, còn nhiều lỗi chính
tả, lỗi định dạng
Đúng mẫu, còn một vài lỗi định dạng
Đúng mẫu, đúng định dạng
thuyết trình chưa
tự tin, chưa thu hút người nghe
Người thuyết trình còn mắc một số lỗi (giọng nhỏ, đọc là chủ yếu,
…)
Người thuyết trình tự tin
Người thuyết trình
tự tin, thu hút người nghe
Phần 3 Trả lời câu hỏi (2.0 điểm)
lời được câu hỏi đặt ra
Trả lời được 50%
câu hỏi đặt
ra, câu trả lời chưa hoàn chỉnh
Trả lời được câu hỏi đặt ra, còn 1 vài sai sót nhỏ
Trả lời chính xác hầu hết câu hỏi đặt ra
Tổng điểm
ĐIỂM CỦA CÁ NHÂN
(do GV ghi)
Danh sách thành viên của Nhóm:
Họ tên:……… Điểm:………
Họ tên:……… Điểm:………
Họ tên:……… Điểm:………
TÊN HỌ VÀ CHỮ KÝ XÁC NHẬN CỦA GV:
iii
Trang 6LỜI MỞ ĐẦU
Hiện nay cuộc cách mạng khoa học-công nghệ đã giúp chúng ta phát triển một cách nhanh chóng đặc biệt là hệ thống tin tức báo chí.Tin tức đã chuyển mình từ xem một cách thủ công trên báo nay có thể xem trên điện thoại,máy tính một cách nhanh chóng trong thời đại 4.0 ngày nay.Trên mạng có rất nhiều loại tin tức
đa dạng nhưng cũng có nhiều loại tin tức lá cải,sai sự thật làm cho người xem không thể biết thông tin một cách chính xác vì vậy với việc học và nghiên cứu môn Nhập môn lập trình khoa học dữ liệu của thầy Nguyễn Thế Bảo nhóm em
đã cố gắng xây dựng một website hệ thống tìm kiếm tin tức một cách có chọn lọc và chính xác, nhưng trong quá trình cũng sẽ có một số thiếu sót trục trặc của nhóm em nên mong thầy và các bạn thông cảm.Qua học môn Nhập môn lập trình khoa học dữ liệu nhóm em cũng đã tiếp thu nhiều kiến thức về lập trình Python và các cách xử lý dữ liệu
v
Trang 7CHƯƠNG 1 TỔNG QUAN (1đ)
1 Giới thiệu tổng quan đề tài
Đề tài "Xây dựng chức năng tìm kiếm bài báo từ các trang báo điện tử bằng newspapers3k" nhằm mục đích phát triển một công cụ tự động thu thập thông tin bài báo từ các trang báo điện tử bằng thư viện Python là newspapers3k Thư viện này được sử dụng phổ biến để thu thập dữ liệu báo chí trên Internet với khả năng lấy thông tin về tiêu đề bài báo, nội dung bài báo, tác giả, thời gian đăng bài, danh mục, địa chỉ URL và nhiều thông tin khác
Việc sử dụng newspapers3k để xây dựng chức năng crawler bài báo từ các trang báo điện tử sẽ giúp cho quá trình thu thập dữ liệu trở nên đơn giản hơn, tiết kiệm thời gian và nhân lực so với việc tự viết mã hoặc sử dụng các công cụ khác Đồng thời, newspapers3k cũng cho phép tùy chỉnh các thông số cấu hình
để thu thập dữ liệu một cách chính xác và hiệu quả
Với sự phổ biến của internet và công nghệ thông tin, việc thu thập và phân tích
dữ liệu trên mạng trở nên ngày càng quan trọng trong nghiên cứu, tiếp thị, phân tích kinh doanh và giám sát thị trường Việc xây dựng chức năng crawler bài báo từ các trang báo điện tử bằng newspapers3k sẽ giúp cải thiện độ chính xác
và tốc độ thu thập thông tin so với việc thu thập thủ công và là một công cụ hữu ích cho các công ty, tổ chức và cá nhân muốn thu thập thông tin từ các trang báo điện tử
2 Tổng quan Python:
Python là một ngôn ngữ lập trình rất phổ biến và được sử dụng rộng rãi trên toàn thế giới Nó được sử dụng trong nhiều lĩnh vực khác nhau như phân tích dữ liệu, khoa học máy tính, trí tuệ nhân tạo, phát triển web, game và nhiều lĩnh vực khác
Python được thiết kế để đọc và viết dễ dàng, với cú pháp đơn giản và rõ ràng Nó cũng cung cấp rất nhiều thư viện và framework để giúp các lập trình viên phát triển nhanh chóng và hiệu quả Ví dụ, có thư viện NumPy cho tính toán khoa học, thư viện Pandas cho phân tích dữ liệu, thư viện Flask và Django cho phát triển web và rất nhiều thư viện khác
Ngoài ra, Python còn có cộng đồng lớn và tích cực, với nhiều người đóng góp vào việc phát triển ngôn ngữ và cung cấp hỗ trợ và tài liệu cho người dùng
Tính năng của Python
- Đơn giản: Python là 1 ngôn ngữ đơn giản và tối giản Đọc 1 chương trình Python có cảm giác như đọc tiếng Anh, mặc dù ở dạng rút gọn Tính tự
1
Trang 8nhiên của mã giả trong Python là 1 trong các điểm mạnh nhất của ngôn ngữ này Điều này giúp cho lập trình viên tập trung vào giải pháp giải quyết vấn đề hơn là việc tập trung vào ngôn ngữ
- Dễ học: Python dễ học vì có cú pháp cực kỳ đơn giản
- Miễn phí và mã nguồn mở: Python là 1 ví dụ của FLOSS (Free/Libré and Open Source Software) Vì vậy, bạn có thể tự do phân phối bản sao chép của phần mềm, cũng như mã nguồn, thay đổi hay sử dụng các thành phần phần mềm trong các chương trình mới Một trong những lý do Python là ngôn ngữ mạnh vì nó được cộng đồng thường xuyên phát triển và nâng cấp
- Ngôn ngữ bậc cao: Khi sử dụng Python, bạn sẽ không bao giờ phải để ý đến các chi tiết mức thấp như quản lý bộ nhớ cho chương trình của bạn, và vân vân
- Khả năng bỏ túi: Do tính tự nhiên mã mở của Python, Python cũng xây dựng chạy trên nhiều nền tảng khác nhau Bạn có thể sử dụng Python trên GNU/Linux, Windows, FreeBSD, Macintosh, Solaris, OS/2, Amiga, AROS, AS/400, BeOS, OS/390, z/OS, Palm OS, QNX, VMS, Psion, Acorn RISC OS, VxWorks, PlayStation, Sharp Zaurus, Windows CE và PocketPC Bạn còn có thể dùng một nền tảng như Kivy để tạo các trò chơi trên máy tính dành cho iPhone, iPad, và Android
- Diễn dịch: Khi 1 chương trình được viết bằng ngôn ngữ biên dịch (như C hoặc C++) thì nó được chuyển đổi từ mã ngôn ngữ (C/C++) thành ngôn ngữ mà máy tính có hiểu được bằng cách dùng 1 trình biên dịch với các chức năng và các cờ khác nhau Trái lại, Python không cần biên dịch ra nhị phân Chương trình viết bằng Python chạy trực tiếp từ mã nguồn Cụ thể, Python sẽ chuyển mã nguồn thành 1 dạng trung gian gọi là bytecode, sau đó dịch dạng trung gian thành ngôn ngữ mà máy tính có thể hiểu được
- Hướng đối tượng: Python là ngôn ngữ hỗ trợ cho lập trình hướng đối tượng lẫn cả lập trình thủ tục Nếu so sánh với C++ hoặc Java, Python rất mạnh nhưng lại cực kỳ đơn giản để thực hiện lập trình hướng đối tượng
- Tính mở rộng: Nếu bạn cần 1 đoạn mã chạy nhanh hoặc 1 vài thuật toán đóng, bạn có thể lập trình ở C/C++ và sau đó sử dụng nó cho chương trình Python Python cho phép tích hợp các chương trình ở các ngôn ngữ khác
- Khả năng nhúng: Bạn có thể nhúng Python bên trong chương trình C/C++
để mang lại các khả năng kịch bản cho người dùng chương trình
2
Trang 9- Thư viện mở rộng: Thư viện tiêu chuẩn Python thì rất lớn Thư viện giúp bạn làm nhiều thứ khác nhau liên quan đến biểu thực chính quy, gieo tài liệu, tiến trình/tiểu trình, database, trình duyệt web, CGI, FTP, email, XML, XML-RPC, HTML, tập tin WAV, mã hóa, GUI, và các phần khác Tất cả thứ này đều sẵn có khi cài đặt Python
3 Tổng quan về thu thập dữ liệu bằng Python
Trong lĩnh vực khoa học dữ liệu và phân tích dữ liệu, việc thu thập dữ liệu là một bước quan trọng để có được nguồn dữ liệu đủ lớn và đa dạng để phân tích và xử lý Python là một ngôn ngữ lập trình rất phổ biến trong việc thu thập dữ liệu vì nó có nhiều thư viện hỗ trợ mạnh mẽ cho việc này, như requests, BeautifulSoup, scrapy và newspapers3k
Thư viện requests cho phép thực hiện các yêu cầu HTTP đơn giản và phức tạp, như tải xuống trang web hoặc API BeautifulSoup là một thư viện HTML parsing cho phép lấy dữ liệu từ các trang web dễ dàng hơn Scrapy là một framework thu thập dữ liệu mạnh mẽ, cho phép thu thập dữ liệu từ nhiều trang web đồng thời và xử lý dữ liệu theo cách tự động Newspapers3k là một thư viện được sử dụng để thu thập tin tức từ các trang báo điện tử, với khả năng tự động phát hiện và trích xuất các nội dung tin tức
Việc thu thập dữ liệu bằng Python là một công cụ rất hữu ích trong việc nghiên cứu và phân tích dữ liệu Sử dụng Python để thu thập dữ liệu từ các nguồn khác nhau như trang web, tài liệu PDF, CSV hoặc JSON mang lại nhiều lợi ích cho người dùng Thu thập dữ liệu bằng Python giúp tiết kiệm thời gian và công sức của người dùng, vì Python cung cấp các công cụ mạnh mẽ và dễ sử dụng cho việc thu thập dữ liệu Các thư viện phổ biến như BeautifulSoup và Scrapy giúp cho việc thu thập dữ liệu trở nên đơn giản hơn, từ đó giảm thiểu thời gian và công sức mà người dùng phải
bỏ ra
Cung cấp cho người dùng các công cụ để phân tích dữ liệu một cách hiệu quả hơn Dữ liệu thu thập được có thể được lưu trữ và xử lý để tạo ra các biểu đồ và báo cáo phân tích thú vị, giúp người dùng hiểu rõ hơn về dữ liệu mà mình đang nghiên cứu
Việc thu thập dữ liệu bằng Python cung cấp cho người dùng các công cụ để tự động hóa quy trình thu thập dữ liệu Việc này giúp cho việc thu thập dữ liệu trở nên đơn giản và hiệu quả hơn, đồng thời giảm thiểu sai sót có thể xảy ra trong quá trình thu thập dữ liệu
3
Trang 10Việc sử dụng Python và các thư viện này giúp cho việc thu thập dữ liệu trở nên nhanh chóng, dễ dàng và hiệu quả hơn, đồng thời cũng giúp cho các chuyên gia phân tích dữ liệu có được nguồn dữ liệu đa dạng và phong phú để phân tích và xử lý
4
Trang 11CHƯƠNG 2 THU THẬP DỮ LIỆU VÀ XÂY DỰNG HỆ THỐNG (6.5đ)
1 Mô tả dữ liệu đã thu thập
Trước hết phải tạo thư mục DATA trong project => tạo file database có tên cuoiky.db
Trong new DB, click chuột phải vào tables => create table để tạo ra hai bảng category (danh mục trang) và news (danh mục bài báo) có cấu trúc như sau
Hình 1:Bảng và các dòng của bảng
5
Trang 12Sau đó đặt tên cho cột và chọn các dữ liệu cho cột Check vào primary key để đặt khóa chính cho cột Click configure để tùy chỉnh cho khóa
Hình 2:Column của bảng category
Sau đó thêm danh mục các trang báo tùy chọn để có thể sẽ tiến hành craw
dữ liệu
Hình 3:Craw dữ liệu báo ở bảng category
6
Trang 13Tiếp tục làm tương tự các bước trên ở news
Hình 4: Column của bảng news
Sau đó thêm danh mục các trang báo tùy chọn để có thể sẽ tiến hành craw
dữ liệu
Hình 5: Craw dữ liệu báo ở bảng news
7
Trang 142 Xây dựng hệ thống tìm kiếm
a Tìm kiếm theo từ khóa
Phần tìm kiếm trong ứng dụng này được thực hiện bằng cách sử dụng biến kw trong request args Nếu biến kw có giá trị (khác None), thì ứng dụng sẽ truy xuất
dữ liệu từ cơ sở dữ liệu bằng cách thực hiện câu truy vấn SQL tìm kiếm trong bảng news với điều kiện tìm kiếm là tiêu đề của tin tức chứa từ khoá được nhập vào Dữ liệu tìm thấy sẽ được lưu trữ trong biến data và được trả về cho người dùng Nếu biến kw không có giá trị, ứng dụng sẽ truy xuất toàn bộ dữ liệu từ cơ sở dữ liệu và trả về cho người dùng
b Sắp xếp kết quả tìm kiếm
Phần sắp xếp kết quả theo ngày thực hiện bằng cách sử dụng hàm read_news() trong module render_templates Đầu tiên, nó đọc dữ liệu từ file JSON news.json bằng cách sử dụng hàm json.load(), sau đó nó sử dụng câu lệnh if để kiểm tra xem có yêu cầu sắp xếp theo ngày hay không
Nếu yêu cầu sắp xếp theo ngày, nó sẽ sử dụng utils.get_all() để truy vấn tất cả các tin tức trùng khớp với keyword và sắp xếp chúng theo thứ tự giảm dần của ngày
Nó sau đó tạo ra một danh sách các bản ghi với các trường tương ứng như id, tieude, noidung, hinhanh, url_trang, date, và id_trang, và trả về danh sách này cho render_template() để hiển thị trên giao diện web
Nếu không yêu cầu sắp xếp theo ngày, nó sẽ gọi lại hàm read_news() với tham số keywords để lọc kết quả theo từ khóa và trả về danh sách này cho render_template()
8
Trang 15c Xây dựng giao diện hệ thống tìm kiếm
Tạo thư mục templates, sau đó tạo các file category.html (chứa danh mục các trang chứa dữ liệu cần thu thập) , news.html (chứa dữ liệu các bài báo thu thập được) và index.html (trang chủ của webstie)
Cấu trúc các file html như sau:
Category.html:
<!DOCTYPE html >
<html lang="en" >
<head>
<meta charset="UTF-8" >
<title> Trang chủ </title>
</head>
<body>
<h1> Danh mục trang tìm kiếm </h1>
<table class ="table" >
<tr>
<th> ID </th>
<th> Tên trang báo </th>
<th> Link trang chủ bài báo </th>
</tr>
{% for cat in data %}
<tr>
<td>
{{ cat.id }}
</td>
<td>
{{ cat.tentrangbao }}
</td>
9
Trang 16<td>
{{ cat.url }}
</td>
</tr>
{% endfor %}
</table>
</body>
</html>
News.html
<!DOCTYPE html >
<html lang="en" >
<head>
<meta charset="UTF-8" >
<title> DANH MỤC BÀI BÁO </title>
</head>
<body>
<H1> DANH MỤC CÁC BÀI BÁO </H1>
<p>
<form action="{{ url_for('get_news') }}" method="get" > <div class = "form-group" >
<label> Tìm kiếm theo tiêu đề </label> <input type = "text" name = "keywords" > <br> <input type="submit" value="tìm" >
</div>
</form>
</p>
<table class="table" >
<tr>
<th> ID </th>
<th> Tiêu đề </th>
<th> Link gốc bài </th>
<th> ID danh mục </th>
</tr>
{% for new in data %}
<tr>
<td> {{new.id}} </td>
<td> {{new.tieude}} </td>
<td> {{new.video}} </td>
<td> {{new.id_trang}} </td>
</tr>
{% endfor %}
</table>
</body>
</html>
Index.html
<!DOCTYPE html >
<html lang="en" >
<head>
<meta charset="UTF-8" >
<title> My Website </title>
</head>
<body>
<h1> TÌM KIẾM BÀI BÁO </h1>
<p>
<form action="/news/" method="GET" >
<div class ="form-group" >
<label> Tìm theo keywords </label>
<input type="text" name ="keywords" > <br> <input type="submit" value="Tìm" >
</div>
10