1. Trang chủ
  2. » Giáo Dục - Đào Tạo

bài tập lớn môn kỹ thuật lập trình trong phân tích dữ liệu phân tích dữ liệu trang thông tin điện tử thethao247

40 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Phân tích dữ liệu trang thông tin điện tử Thethao247
Tác giả Nguyễn Tất Thành, Nguyễn Quốc Đạt, Phimphixay Nouhak
Người hướng dẫn TS. Hồ Ngọc Trung Kiên
Trường học Trường Đại Học Thủ Dầu Một
Chuyên ngành Kỹ Thuật Lập Trình Trong Phân Tích Dữ Liệu
Thể loại Bài tập lớn môn
Năm xuất bản 2023
Thành phố Bình Dương
Định dạng
Số trang 40
Dung lượng 506,12 KB

Cấu trúc

  • CHƯƠNG 1 TỔNG QUAN ĐỀ TÀI (6)
    • 1.1 LÝ DO CHỌN ĐỀ TÀI (6)
    • 1.2 MỤC TIÊU NGHIÊN CỨU (6)
    • 1.3 ĐỐI THƯỢNG NGHIÊN CỨU (7)
    • 1.4 PHẠM VI NGHIÊN CỨU (7)
  • CHƯƠNG 2 CƠ SỞ LÝ THUYẾT (8)
    • 2.1 GOOGLE COLAB (8)
    • 2.2 LẬP TRÌNH PYTHON (8)
    • 2.3 CÁC THUẬT TOÁN SỬ DỤNG TRONG ĐỀ TÀI (9)
      • 2.3.1 Requests (9)
      • 2.3.2 Numpy (9)
      • 2.3.3. BeautifulSoup (11)
      • 2.3.4. Pandas (11)
      • 2.3.5. RegEx (11)
      • 2.3.6. ViTokenizer (11)
      • 2.3.7. TfidfVectorizer (11)
      • 2.3.8. PorterStemmer (12)
      • 2.3.9. Stopwords (12)
  • CHƯƠNG 3 MÔ HÌNH BÀI TOÁN (13)
    • 3.1 MÔ HÌNH BÀI TOÁN (13)
    • 3.2 NÊU TỪNG BƯỚC THỰC HIỆN TRONG MÔ HÌNH (13)
  • CHƯƠNG 4 THỰC NGHIỆM (15)
    • 4.1. Import thư viện cần thiết (15)
    • 4.2. Thu thập 1000 tin tức (16)
    • 4.3. Lưu excel vào dataframe (20)
    • 4.4. Xóa số, xóa tab HTML (21)
    • 4.5. Chuyển văn bản thành chữ thường (23)
    • 4.6. Chuẩn hóa văn bản. (Hòa bình) - (Hoà bình) (23)
    • 4.7. Xóa STOPWORDS và chuyển sang dạng ngữ nghĩa (32)
    • 4.8. Chuyển sang dạng ngữ nghĩa (34)
    • 4.9. Chuyển thành vector (35)
    • 4.10. Đánh vào 1 cụm từ tìm bài báo giống hoặc gần giống (37)
  • CHƯƠNG 5 KẾT LUẬN (38)
    • 5.1. Kết quả đạt được (38)
      • 5.1.1 Ưu điểm (38)
      • 5.2.2 Nhược điểm (38)
    • 5.2. Hướng phát triển (38)
  • TÀI LIỆU THAM KHẢO (39)

Nội dung

Các nội dung nghiên cứu, kết quả trong đề tàinày là trung thực và chưa công bố dưới bất kỳ hình thức nào trước đây.Những số liệu trong các bảng biểu phục vụ cho việc phân tích, nhận xét,

CƠ SỞ LÝ THUYẾT

GOOGLE COLAB

Cơ sở lý thuyết của Google Colab bao gồm:

Python: Google Colab hỗ trợ lập trình Python, một ngôn ngữ lập trình phổ biến và mạnh mẽ được sử dụng rộng rãi trong phân tích dữ liệu.

Jupyter Notebook: Google Colab được xây dựng trên nền tảng của Jupyter

Notebook, một công cụ phổ biến trong phân tích dữ liệu.

Jupyter Notebook cho phép người dùng kết hợp các đoạn mã lập trình, mã markdown, hình ảnh và tài liệu vào trong một tài liệu duy nhất.

GPU và TPU: Google Colab cung cấp GPU và TPU miễn phí cho người dùng, cho phép người dùng thực hiện các tác vụ tính toán nặng trong thời gian ngắn.

Kết nối với Google Drive: Google Colab cho phép người dùng kết nối với

Google Drive để lưu trữ và chia sẻ các notebook Jupyter của mình.

Các thư viện phổ biến: Google Colab được tích hợp sẵn các thư viện phổ biến như NumPy, pandas, matplotlib và scikit-learn, giúp người dùng thực hiện phân tích dữ liệu dễ dàng hơn.

Tóm lại, Google Colab là một môi trường lập trình trực tuyến mạnh mẽ và tiện lợi để thực hiện các tác vụ phân tích dữ liệu với Python và các thư viện phổ biến Nó được hỗ trợ bởi Jupyter Notebook và kết nối với các tài khoản Google Drive của người dùng Ngoài ra, Google Colab còn cung cấp GPU và TPU miễn phí cho người dùng.

LẬP TRÌNH PYTHON

Python là một ngôn ngữ lập trình thông dịch, đa mục đích và dễ học Nó được phát triển vào cuối những năm 1980 bởi Guido van Rossum và đã trở thành một trong những ngôn ngữ lập trình phổ biến nhất trên thế giới.

Hình 2 2 Logo ngôn ngữ lập trình python

Python có rất nhiều ưu điểm, bao gồm:

- Dễ học và dễ sử dụng: Python có cú pháp đơn giản và dễ hiểu, cho phép người mới học có thể bắt đầu lập trình ngay lập tức Ngoài ra, Python cũng có một cộng đồng lớn và chia sẻ thông tin rộng rãi, vì vậy người học có thể dễ dàng tìm kiếm thông tin và giúp đỡ.

- Đa năng: Python có thể được sử dụng để phát triển các ứng dụng desktop, web và mobile, cũng như các phần mềm khoa học dữ liệu và trí tuệ nhân tạo.

- Cộng đồng lớn: Python có một cộng đồng lớn và sôi động, với hàng nghìn thư viện và module được phát triển bởi các nhà phát triển trên toàn thế giới Điều này giúp người dùng dễ dàng tìm kiếm các giải pháp sẵn có cho các vấn đề lập trình khác nhau.

- Tính linh hoạt: Python là ngôn ngữ lập trình đa nền tảng, cho phép người dùng chạy chương trình trên nhiều hệ điều hành khác nhau.

CÁC THUẬT TOÁN SỬ DỤNG TRONG ĐỀ TÀI

Requests là một thư viện Python được sử dụng để tương tác với các trang web thông qua HTTP và cung cấp cho người dùng một loạt các phương thức để gửi các yêu cầu HTTP và nhận phản hồi từ các trang web Nó có tính đơn giản và dễ sử dụng, cung cấp hỗ trợ cho việc xác thực và quản lý phiên làm việc, và hỗ trợ tải xuống và tải lên các tập tin và hình ảnh từ trang web.

NumPy là một thư viện Python phổ biến được sử dụng để xử lý các ma trận và mảng số học Nó cung cấp các công cụ để thực hiện các phép toán số học và thống kê

1 phức tạp trên các mảng số NumPy được tối ưu hóa để hoạt động nhanh chóng và hiệu quả trên các mảng số lớn và có tính tương thích cao với các thư viện khoa học dữ liệu khác trong Python NumPy cũng được sử dụng rộng rãi trong machine learning và deep learning để tính toán trên các mảng số và ma trận.

BeautifulSoup là một thư viện Python được sử dụng để phân tích cú pháp HTML và XML, cung cấp các công cụ để tìm kiếm và truy cập các phần tử trong tài liệu Nó có tính đơn giản và dễ sử dụng và được sử dụng rộng rãi trong lĩnh vực web scraping để trích xuất các dữ liệu từ các trang web

Pandas là một thư viện Python phổ biến được sử dụng để phân tích và xử lý dữ liệu Nó cung cấp cho người dùng các công cụ để tạo ra và quản lý các cấu trúc dữ liệu, bao gồm các DataFrame và Series, để thực hiện các phép toán số học và thống kê trên các dữ liệu số và thực hiện các tác vụ xử lý dữ liệu Pandas được tối ưu hóa để hoạt động nhanh chóng và hiệu quả trên các tập dữ liệu lớn và có tính tương thích cao với các thư viện khoa học dữ liệu khác trong Python.

Thư viện RegEx là một công cụ rất hữu ích trong lập trình và xử lý văn bản, cung cấp các phương pháp để tìm kiếm, phân tích cú pháp và thay thế các chuỗi ký tự theo các mẫu cú pháp khác nhau RegEx được sử dụng rộng rãi trong nhiều ngôn ngữ lập trình và là một phần quan trọng của các công cụ xử lý dữ liệu.

Thư viện ViTokenizer là một thư viện mã nguồn mở của ngôn ngữ Python, được sử dụng để tách từ trong văn bản tiếng Việt Nó có khả năng xử lý các trường hợp phức tạp trong tiếng Việt và được sử dụng rộng rãi trong các ứng dụng liên quan đến xử lý ngôn ngữ tự nhiên bằng tiếng Việt.

Thư viện TfidfVectorizer là một thư viện mã nguồn mở của ngôn ngữ Python,được sử dụng trong xử lý ngôn ngữ tự nhiên và học máy Nó cho phép chuyển đổi các

1 văn bản thành các vector số thực, dựa trên giá trị TF-IDF của các từ trong văn bản. TfidfVectorizer cung cấp các phương pháp để xử lý các văn bản, bao gồm loại bỏ stop words, chuyển đổi các từ về dạng gốc và loại bỏ các ký tự đặc biệt Nó cũng đánh giá tầm quan trọng của các từ trong tài liệu hoặc bộ sưu tập các tài liệu, dựa trên giá trị TF-IDF của từ đó TfidfVectorizer được sử dụng rộng rãi trong các ứng dụng liên quan đến xử lý ngôn ngữ tự nhiên và học máy, bao gồm phân loại văn bản, tóm tắt văn bản và tìm kiếm văn bản.

PorterStemmer là một thư viện mã nguồn mở của ngôn ngữ Python, được sử dụng để chuyển đổi các từ về dạng gốc của chúng bằng cách loại bỏ các hậu tố Nó có khả năng xử lý các từ trong tiếng Anh và được tích hợp sẵn trong các thư viện xử lý ngôn ngữ tự nhiên khác của Python PorterStemmer được sử dụng rộng rãi trong các ứng dụng liên quan đến xử lý ngôn ngữ tự nhiên, bao gồm phân loại văn bản, tóm tắt văn bản và tìm kiếm văn bản.

Thư viện Stopwords là một thư viện mã nguồn mở của ngôn ngữ Python, được sử dụng để loại bỏ các stop words trong các văn bản Nó cung cấp danh sách stop words cho nhiều ngôn ngữ khác nhau và được tích hợp sẵn trong các thư viện xử lý ngôn ngữ tự nhiên khác của Python Stopwords được sử dụng rộng rãi trong các ứng dụng liên quan đến xử lý ngôn ngữ tự nhiên.

MÔ HÌNH BÀI TOÁN

MÔ HÌNH BÀI TOÁN

Hình 3.1 Mô hình bài toán

NÊU TỪNG BƯỚC THỰC HIỆN TRONG MÔ HÌNH

Các bước thực hiện trong mô hình :

Bước 1 : Crawl dữ diệu từ website :

 Xác định URL: Chọn URL (Uniform Resource Locator) để bắt đầu crawl dữ liệu.

 Phân tích cấu trúc trang web: Phân tích cấu trúc của trang web để tìm kiếm các liên kết và các thẻ HTML có chứa dữ liệu cần thu thập.

 Lấy dữ liệu: Sử dụng các thư viện hoặc công cụ crawl để lấy dữ liệu từ trang web Dữ liệu này có thể bao gồm văn bản, hình ảnh, video, âm thanh hoặc các tệp khác.

 Lưu trữ dữ liệu: Lưu trữ dữ liệu thu thập được vào một tệp excel để sau này có thể truy xuất và sử dụng.

Bước 2 : Xử lý dữ liệu bằng ngôn ngữ python:

 Đầu tiên xử lý dữ liệu thu thập được để tạo ra các thông tin hữu ích hoặc phân tích dữ liệu.

 Lặp lại quá trình: Tiếp tục crawl dữ liệu từ các trang web khác trong cùng lĩnh vực hoặc với các liên kết liên quan để thu thập thêm dữ liệu.

 Thực hiện xử lý dữ liễu theo yêu cầu của giảng viện : Xóa tab HTML, xóa số; chuyển văn bản thành chữ thường; chuẩn hóa văn bản; chuyển sang dạng ngữ nghĩa; xóa stopword; chuyển thành dạng vector; tìm kiếm.

Bước 3: Kiểm tra kết quả thuật toán :

 Xác định kết quả mong đợi

 Thiết lập các thử nghiệm : thiếp lập các bộ dữ liệu khác nhau để chuẩn bị cho trường hợp khác nhau khi chạy thuật toán

 Chạy thuật toán và lấy kết quả : chạy thuật toán trên thiết lập các thử nghiệm và thu kết quả.

 So sánh kết quả : so sánh kết quả thu được với kết quả mong đợi để cân nhắc và cải thiện thuật toán.

Lặp lại quá trình : thực hiện lại các bước để tối ưu kết quả thuật toán để đảm bảo tính tin cậy của thuật toán.

Bước 4 : kết thúc và thông báo hoàn thành

Code: import numpy as np import pandas as pd import attrs import string import nltk import time import re import os import sys import traceback

THỰC NGHIỆM

Import thư viện cần thiết

Trong Python, khai báo thư viện là cách để sử dụng các tính năng mới trong chương trình Thư viện bao gồm các module chứa các hàm, lớp và biến để giúp thực hiện các nhiệm vụ cụ thể trong ứng dụng của bạn Các thư viện Python cung cấp nhiều tính năng khác nhau, bao gồm tính toán số học, xử lý chuỗi, đọc và ghi dữ liệu từ tệp, và nhiều hơn nữa Bằng cách sử dụng các hàm và lớp có sẵn trong thư viện, bạn có thể giảm thiểu thời gian và công sức cần thiết để phát triển ứng dụng.

Ngoài ra, khai báo thư viện còn giúp tăng tính tương thích của chương trình Các thư viện được thiết kế và kiểm tra cẩn thận để đảm bảo tính ổn định và tương thích với các phiên bản Python khác nhau Việc sử dụng mã được kiểm tra và được sử dụng rộng rãi từ các thư viện giúp giảm thiểu các lỗi và rủi ro trong quá trình phát triển ứng dụng của bạn.

[nltk_data] Downloading package stopwords to /root/nltk_data

[nltk_data] Unzipping corpora/stopwords.zip.

Code: import requests as rq

# xử dụng BeautifulSoup để tách dữ liệu from bs4 import BeautifulSoup as bs import re

# dánh sách lưu trữ thuộc tính

1 import dateutil.parser import requests as rq from nltk.corpus import stopwords from datetime import datetime as dt nltk.download('stopwords') from bs4 import BeautifulSoup as bs from pyvi import ViTokenizer from nltk.stem import PorterStemmer from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity

Thu thập 1000 tin tức

# # r = rq.get("https://thethao247.vn/") soup = bs(r.content, "html.parser") titles = soup.find_all('a',class_="title")

# print(titles) links = [link.attrs["href"]for link in titles]

# -Truy cập từng link bài báo và lấy ra dữ liệu -#

# # for link in links: news = rq.get(link) soup = bs(news.content,"html.parser") a=soup.find("h1",class_="big_title") b= soup.find("p",class_="sapo_detail") c=soup.find(class_="txt_content") d=soup.find("a",class_="relative")

# kiểm tra trùng khớp bài báo #

# # if b!=None and a!=None and c!=None and d!=None: title=soup.find("h1",class_="big_title").text mota=soup.find("p",class_="sapo_detail").text theloai="THE THAO 247" noidung=soup.find("a",class_="relative").text print(link,title,dem)

# thêm vào list lmota.append(mota) lnd.append(noidung) ltitle.append(title) ltheloai.append(theloai) dem+1 if dem=00: break j=j+1

Kết quả: https://thethao247.vn/406-doi-thu-world-cup-cua-viet-nam-thua-dau-truoc-dt-duc- d283570.html Đối thủ World Cup của Việt Nam thua đau trước ĐT Đức 0 https://thethao247.vn/395-vua-chuyen-nhuong-xac-nhan-tan-binh-dau-tien-cap- ben-psg-mua-2023-24-d283571.html

Vua chuyển nhượng xác nhận tân binh đầu tiên cập bến PSG mùa 2023/24 1 https://thethao247.vn/406-truc-tiep-binh-dinh-vs-thanh-hoa-18h00-hom-nay-08-4- d283572.html

Trực tiếp Bình Định vs Thanh Hóa, 18h00 hôm nay 08/4 2 https://thethao247.vn/448-truc-tiep-wolves-vs-chelsea-21h-ngay-8-4-thay-tuong- doi-van-d283563.html

Trực tiếp Wolves vs Chelsea, 21h ngày 8/4: Thay tướng đổi vận? 3 https://thethao247.vn/405-thu-mon-dt-viet-nam-phan-ung-la-sau-sai-lam-cua-trong- tai- d283566.html

Thủ môn ĐT Việt Nam phản ứng lạ sau sai lầm của trọng tài 4 https://thethao247.vn/436-da-ro-thoi-diem-ronaldo-20-cua-mu-tai-xuat-san-co- d283556.html Đã rõ thời điểm 'Ronaldo 2.0' của MU tái xuất sân cỏ 5

2 https://thethao247.vn/406-xuan-truong-co-dong-thai-dac-biet-quyet-chuoc-loi- truoc-cahn-d283552.html

Xuân Trường có động thái đặc biệt, quyết 'chuộc lỗi' trước CAHN 6 https://thethao247.vn/448-ngoi-khong-cung-dinh-hoa-messi-hung-tron-chi-trich- cua-chu-tich-uefa-d283554.html

Ngồi không cũng dính họa, Messi hứng trọn chỉ trích của chủ tịch UEFA 7 https://thethao247.vn/403-dan-tuyen-thu-dt-viet-nam-bat-ngo-sang-han-quoc-thi- dau-d283567.html

Dàn tuyển thủ ĐT Việt Nam bất ngờ sang Hàn Quốc thi đấu 8 https://thethao247.vn/449-truc-tiep-tottenham-vs-brighton-21h00-hom-nay-8-4- d283558.html

Trực tiếp Tottenham vs Brighton, 21h00 hôm nay (8/4) 9 https://thethao247.vn/395-chu-tich-len-tieng-thuc-messi-som-chon-con-tim-hay-ly- tri- d283569.html

Chủ tịch lên tiếng thúc Messi sớm chọn con tim hay lý trí 10 https://thethao247.vn/406-vff-phan-ung-bat-ngo-sau-tinh-huong-be-coi-kho-hieu- cua-trong-tai-d283568.html

Ban trọng tài VFF: Nam Định được hưởng phạt đền là đúng 11 https://thethao247.vn/449-lampard-co-thong-ke-buon-ngay-ra-mat-chelsea-au-lo- truoc-tran-gap-wolves-d283553.html

Lampard có thống kê buồn ngày ra mắt, Chelsea âu lo trước trận gặp Wolves 12

Lưu excel vào dataframe

Để lưu dữ liệu vào các biến và xuất chúng thành một tệp Excel, chúng ta có thể sử dụng thư viện pandas trong Python Đầu tiên, ta sử dụng hàm "DataFrame()" của pandas để lưu các dữ liệu vào các biến Sau đó, ta sử dụng hàm "to_excel()" để xuất dữ liệu đó ra file Excel với định dạng.

# Tạo bảng chuyển đổi để loại bỏ số digit_table = str.maketrans('', '', string.digits)

# Đọc file excel df = pd.read_excel('baochinhphu.xlsx')

# Loại bỏ ký tự đặc biệt và xóa số khỏi từng cột

#Lưu văn bản vào excel data = {'tieude': ltitle,

'theloai':ltheloai} df = pd.DataFrame(data) df.to_excel('ketqua.xlsx')

Xóa số, xóa tab HTML

Hàm "replace()" là một phương thức chuỗi trong Python, được sử dụng để thay thế các ký tự hoặc chuỗi ký tự trong chuỗi ban đầu bằng một chuỗi mới Hàm này trả về một chuỗi mới, không làm thay đổi chuỗi ban đầu.

Hàm "replace()" thường được sử dụng để xử lý và định dạng dữ liệu chuỗi, đặc biệt là trong các trường hợp cần thay thế các ký tự hoặc chuỗi ký tự nhất định trong chuỗi Ví dụ, bạn có thể sử dụng hàm này để loại bỏ các ký tự đặc biệt, ký tự trắng hoặc các chuỗi ký tự không mong muốn khác trong chuỗi dữ liệu của mình.

2 df['Tiêu Đề'] = df['Tiêu Đề'].replace('[^\w\s]', '', regex=True).apply(lambda x: x.trans late(digit_table)) df['Mô tả'] = df['Mô tả'].replace('[^\w\s]', '', regex=True).apply(lambda x: x.translate( digit_table)) df['Thể loại'] = df['Thể loại'].replace('[^\w\s]', '', regex=True).apply(lambda x: x.trans late(digit_table)) df['Nội dung'] = df['Nội dung'].apply(lambda x: x if isinstance(x, str) else '').replace(' [^\w\s]', '', regex=True).apply(lambda x: x.translate(digit_table))

# Lưu DataFrame mới vào file excel df.to_excel('baochinhphu-remove.xlsx', indexse)

Bảng 4 1 Kết quả của việc lưu Xóa số và xóa tab HTML

Tiêu Đề Mô tả Thể loại Nội dung

Việt Nam thua đau trướ

\nCó lợi thế sân nhà, ĐT nữ Hà Lan vẫn để thua

1 \nVua chuyển nhượng xác nhận tân binh đầu tiên

\nDù kỳ chuyển nhượng hè 2023 còn khoảng 2 thá

\n(Trực tiếp V- League) - Bình Định cần ít nhất

Code: def chuyenvanban_thuong(noidung): noidung = noidung.strip().lower() noidung = re.sub(r'\t', ' ', noidung) noidung = re.sub(r'\n', ' ', noidung) noidung = re.sub(r'/' , ' ', noidung) return noidung df

= df.applymap(lambda a: chuyenvanban_thuong(a)) df.head(100)

Code: import regex as re uniChars "àáảãạâầấẩẫậăằắẳẵặèéẻẽẹêềếểễệđìíỉĩịòóỏõọôồốổỗộơờớởỡợùúủũụưừứửữựỳýỷỹỵÀÁẢ ÃẠÂẦẤẨẪẬĂẰẮẲẴẶÈÉẺẼẸÊỀẾỂỄỆĐÌÍỈĨỊÒÓỎÕỌÔỒỐỔỖỘƠỜỚỞỠỢÙÚỦ ŨỤƯỪỨỬỮỰỲÝỶỸỴÂĂĐÔƠƯ" unsignChars "aaaaaaaaaaaaaaaaaeeeeeeeeeeediiiiiooooooooooooooooouuuuuuuuuuuyyyyyAAAA AAAAAAAAAAAAAEEEEEEEEEEEDIIIOOOOOOOOOOOOOOOOOOOUUU UUUUUUUUYYYYYAADOOU" def loaddicchar():

Chuẩn hóa văn bản (Hòa bình) - (Hoà bình)

'|') for i in range(len(char1252)): dic[char1252[i]] = charutf8[i] return dic dicchar = loaddicchar() def convert_unicode(txt): return re.sub( r'à|á|ả|ã|ạ|ầ|ấ|ẩ|ẫ|ậ|ằ|ắ|ẳ|ẵ|ặ|è|é|ẻ|ẽ|ẹ|ề|ế|ể|ễ|ệ|ì|í|ỉ|ĩ|ị|ò|ó|ỏ|õ|ọ|ồ|ố|ổ|ỗ|ộ|ờ|ớ|ở|ỡ|ợ|ù|ú|ủ|ũ|ụ|ừ| ứ|ử|ữ|ự|ỳ|ý|ỷ|ỹ|ỵ|À|Á|Ả|Ã|Ạ|Ầ|Ấ|Ẩ|Ẫ|Ậ|Ằ|Ắ|Ẳ|Ẵ|Ặ|È|É|Ẻ|Ẽ|Ẹ|Ề|Ế|Ể|Ễ|Ệ|Ì|Í|Ỉ|Ĩ|Ị|Ò|Ó|Ỏ| Õ|Ọ|Ồ|Ố|Ổ|Ỗ|Ộ|Ờ|Ớ|Ở|Ỡ|Ợ|Ù|Ú|Ủ|Ũ|Ụ|Ừ|Ứ|Ử|Ữ|Ự|Ỳ|Ý|Ỷ|Ỹ|Ỵ', lambda x: dicchar[x.group()], txt)

Start section: Chuyển câu văn về kiểu gõ telex khi không bật Unikey

Ví dụ: thủy = thuyr, tượng = tuwowngj

['y', 'ỳ', 'ý', 'ỷ', 'ỹ', 'ỵ', 'y']] bang_ky_tu_dau = ['', 'f', 's', 'r', 'x', 'j'] nguyen_am_to_ids = {} for i in range(len(bang_nguyen_am)): for j in range(len(bang_nguyen_am[i]) - 1): nguyen_am_to_ids[bang_nguyen_am[i][j]] = (i, j)

2 def vn_word_to_telex_type(word): dau_cau = 0 new_word = ' ' for char in word: x, y = nguyen_am_to_ids.get(char, (-1, -1)) if x == -1: new_word += char continue if y != 0: dau_cau = y new_word += bang_nguyen_am[x][-1] new_word += bang_ky_tu_dau[dau_cau] return new_word def vn_sentence_to_telex_type(sentence):

Chuyển câu tiếng việt có dấu về kiểu gõ telex.

""" words = sentence.split() for index, word in enumerate(words): words[index] = vn_word_to_telex_type(word) return ' '.join(words)

End section: Chuyển câu văn về kiểu gõ telex khi không bật Unikey

Start section: Chuyển câu văn về cách gõ dấu kiểu cũ: dùng òa úy thay oà uý

Xem tại đây: https://vi.wikipedia.org/wiki/Quy_t%E1%BA%AFc_%C4%91%E1%BA

%B7t_d%E 1%BA%A5u_thanh_trong_ch%E1%BB%AF_qu%E1%BB%91c_ng

""" def chuan_hoa_dau_tu_tieng_viet(word): if not is_valid_vietnam_word(word): return word chars = list(word) dau_cau = 0 nguyen_am_index = []

2 qu_or_gi = False for index, char in enumerate(chars): x, y = nguyen_am_to_ids.get(char, (-1, -1)) if x == -1: continue elif x == 9: # check qu if index != 0 and chars[index - 1] == 'q': chars[index] = 'u ' qu_or_gi = True elif x == 5: # check gi if index != 0 and chars[index - 1] == 'g': chars[index] = 'i ' qu_or_gi = True if y != 0: dau_cau = y chars[index] = bang_nguyen_am[x][0] if not qu_or_gi or index != 1: nguyen_am_index.append(index) if len(nguyen_am_index) < 2: if qu_or_gi: if len(chars) == 2: x, y = nguyen_am_to_ids.get(chars[1]) chars[1] = bang_nguyen_am[x][dau_cau] else: x, y = nguyen_am_to_ids.get(chars[2], (-1, -1)) if x != -1: chars[2] = bang_nguyen_am[x][dau_cau] else: chars[1] = bang_nguyen_am[5][dau_cau] if chars[1] == 'i' else bang_nguyen_am[9][dau_cau] return ''.join(chars) return word for index in nguyen_am_index: x, y = nguyen_am_to_ids[chars[index]] if x == 4 or x == 8: # ê, ơ chars[index] = bang_nguyen_am[x][dau_cau]

# for index2 in nguyen_am_index:

# x, y = nguyen_am_to_ids[chars[index]]

# chars[index2] = bang_nguyen_am[x][0] return ''.join(chars) if len(nguyen_am_index) == 2: if nguyen_am_index[-1] == len(chars) - 1: x, y = nguyen_am_to_ids[chars[nguyen_am_index[0]]] chars[nguyen_am_index[0]] = bang_nguyen_am[x][dau_cau]

# x, y = nguyen_am_to_ids[chars[nguyen_am_index[1]]]

# chars[nguyen_am_index[1]] = bang_nguyen_am[x][0] else:

# x, y = nguyen_am_to_ids[chars[nguyen_am_index[0]]]

# chars[nguyen_am_index[0]] = bang_nguyen_am[x][0] x, y = nguyen_am_to_ids[chars[nguyen_am_index[1]]] chars[nguyen_am_index[1]] = bang_nguyen_am[x][dau_cau] else:

# x, y = nguyen_am_to_ids[chars[nguyen_am_index[0]]]

# chars[nguyen_am_index[0]] = bang_nguyen_am[x][0] x, y = nguyen_am_to_ids[chars[nguyen_am_index[1]]] chars[nguyen_am_index[1]] = bang_nguyen_am[x][dau_cau]

# x, y = nguyen_am_to_ids[chars[nguyen_am_index[2]]]

# chars[nguyen_am_index[2]] = bang_nguyen_am[x][0] return ''.join(chars) def is_valid_vietnam_word(word): chars = list(word) nguyen_am_index = -1 for index, char in enumerate(chars): x, y = nguyen_am_to_ids.get(char, (-1, -1)) if x != -1: if nguyen_am_index == -1: nguyen_am_index = index else: if index - nguyen_am_index != 1: return False nguyen_am_index = index return True def chuan_hoa_dau_cau_tieng_viet(sentence):

Chuyển câu tiếng việt về chuẩn gõ dấu kiểu cũ

""" sentence = sentence.lower() words = sentence.split() for index, word in enumerate(words): cw = re.sub(r'(^\p{P}*)([p{L}.]*\p{L}+)(\p{P}*$)', r'\1/\2/\3', word).split('/') # print(cw) if len(cw) == 3: cw[1] = chuan_hoa_dau_tu_tieng_viet(cw[1]) words[index] = ''.join(cw) return ' '.join(words)

= df.applymap(lambda a: chuan_hoa_dau_cau_tieng_viet(a)) df.head()

Xóa STOPWORDS và chuyển sang dạng ngữ nghĩa

Để loại bỏ các từ Stopword và chuyển sang dạng ngữ nghĩa, ta có thể sử dụng thư viện pyvi trong Python Đầu tiên, ta sử dụng hàm "vitokenizer.tokenize(text)" để tách từ trong câu văn bản "text" Hàm này sử dụng phương pháp maxmatch để tách từ, và trả về một chuỗi đã được tách từ, trong đó các từ trong câu được phân tách bằng dấu gạch dưới

"_" để chuyển sang dạng ngữ nghĩa.

Sau khi tách từ, chuỗi kết quả được gán vào biến "tokens" Tiếp theo, ta sử dụng hàm for để lặp qua từng từ trong chuỗi và sử dụng hàm "split()" để tách các từ trong chuỗi thành một danh sách các từ Sau đó, ta loại bỏ các từ Stopword bằng cách so sánh từ đó với danh sách các Stopword có sẵn.

# Tạo biến và gán file STOPWORD

!pip install underthesea import pandas as pd import nltk from nltk.corpus import stopwords from google.colab import files

# đọc dữ liệu từ file excel df = pd.read_excel('/content/drive/MyDrive/Nhóm 13: Báo Thể Thao 247/ketqua(3).xlsx')

# tải bộ stopword tiếng Việt nltk.download('stopwords') stop_words = set(stopwords.words('/content/drive/MyDrive/Nhóm 13: Báo Thể Thao 247/Vietnam stopwrod.txt'))

# xóa stopword for i in range(len(df)): words = df['tieude'][i].split() # tách từ trong câu words = [word for word in words if word not in stop_words] # loại bỏ từ trong stopword df['tieude'] = ' '.join(words) # ghép các từ lại thành câu words = df['mota'][i].split() # tách từ trong câu words = [word for word in words if word not in stop_words] # loại bỏ từ trong stopword df['mota'] = ' '.join(words) # ghép các từ lại thành câu words = df['theloai'][i].split() # tách từ trong câu words = [word for word in words if word not in stop_words] # loại bỏ từ trong stopword df['theloai'] = ' '.join(words) # ghép các từ lại thành câu words = df['noidung'][i].split() # tách từ trong câu words = [word for word in words if word not in stop_words] # loại bỏ từ trong stopword df['noidung'] = ' '.join(words) # ghép các từ lại thành câu

!pip install underthesea from underthesea import pos_tag def tachTu(a): dic={} dic=pos_tag(a) return dic def chuyenngunghia(noidung): mang=' ' noidung = tachTu(noidung) for text in noidung: if text[1] not in stop_word: mang += text[0] + ' ' return ''.join(mang) stop_word=['M','CH'] df['noidung'] = df['noidung'].apply(lambda a: chuyenngunghia(a))

# in kết quả print(df)

Chuyển sang dạng ngữ nghĩa

Code: from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() vector_tieude = vectorizer.fit_transform(df['tieude']) vector_mota = vectorizer.fit_transform(df['mota']) vector_noidung = vectorizer.fit_transform(df['noidung']) vector_theloai = vectorizer.fit_transform(df['theloai']) print(vector_tieude.toarray()) print(vector_mota.toarray()) print(vector_noidung.toarray()) print(vector_theloai.toarray())

# nhập và giá trị cần tìm kiếm và tiền xử lý văn bản nhập vào

= input("Nhập cụm từ cần tìm")

A=clearSo(A) df['tieude'] = df['tieude'].apply(lambda a: chuyenngunghia(a)) df.iloc[0,2]

Chuyển thành vector

Để chuyển đổi văn bản thành vector sử dụng phương pháp TF-IDF, ta sử dụng thư viện TfidfVectorizer trong Python Phương pháp này tính toán tần suất của mỗi từ trong văn bản và chuyển đổi chúng thành vector số thực Tần suất của từ được đo bằng cách tính toán TF-IDF (term frequency - inverse document frequency), một chỉ số được tính toán bằng cách so sánh tần suất của từ trong văn bản với tần suất của từ đó trong toàn bộ tập dữ liệu.

A=chuan_hoa_dau_cau_tieng_viet(A)

#Để tìm sự giống nhau của 2 vector bằng TF-IDF trong Python, bạn có thể sử dụng thư viện sklearn Ví dụ, để tính độ tương đồng giữa 2 câu A và B dựa trên TF-IDF, bạn có thể thực hiện như sau:

#python from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity import numpy as np

# Chuẩn bị dữ liệu listGT=[] listTD=[] for i in range(len(df["tieude"])): corpus =[A,df.iloc[i,0]]

# # corpus = [str(text) for text in corpus] vectorizer = TfidfVectorizer() tfidf = vectorizer.fit_transform(corpus)

# # similarity = cosine_similarity(tfidf[0], tfidf[1]) if similarity[0][0]>0: listGT.append(df.iloc[i,0]) listTD.append(similarity[0][0])

# Sắp xếp các chuỗi đã được tìm kiếm tương đồng vs từ khóa theo thứ tự chính xác giảm dần sorted_lists = sorted(zip(listTD,listGT),reverse=True)

# xuất ra danh sách tìm kiếm for item in sorted_lists: print(item[1],item[0],sep=" -//////Độ tương đồng với lits cần tìm là: ",end="\n")

Đánh vào 1 cụm từ tìm bài báo giống hoặc gần giống

Ngày đăng: 14/08/2024, 11:46

HÌNH ẢNH LIÊN QUAN

Hình 2. 2. Logo ngôn ngữ lập trình python - bài tập lớn môn kỹ thuật lập trình trong phân tích dữ liệu phân tích dữ liệu trang thông tin điện tử thethao247
Hình 2. 2. Logo ngôn ngữ lập trình python (Trang 9)
Hình 3.1 Mô hình bài toán - bài tập lớn môn kỹ thuật lập trình trong phân tích dữ liệu phân tích dữ liệu trang thông tin điện tử thethao247
Hình 3.1 Mô hình bài toán (Trang 13)
Bảng 4. 1. Kết quả của việc lưu Xóa số và xóa tab HTML - bài tập lớn môn kỹ thuật lập trình trong phân tích dữ liệu phân tích dữ liệu trang thông tin điện tử thethao247
Bảng 4. 1. Kết quả của việc lưu Xóa số và xóa tab HTML (Trang 22)
BẢNG PHÂN CÔNG CHI TIẾT - bài tập lớn môn kỹ thuật lập trình trong phân tích dữ liệu phân tích dữ liệu trang thông tin điện tử thethao247
BẢNG PHÂN CÔNG CHI TIẾT (Trang 40)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w