MySQL - Bộ phân tích văn bản toàn văn ngram: Hướng dẫn cho người mới bắt đầu

Xin chào các bậc thầy cơ sở dữ liệu trong tương lai! Hôm nay, chúng ta sẽ bắt đầu một cuộc hành trình thú vị vào thế giới của Bộ phân tích văn bản toàn văn ngram của MySQL. Đừng lo lắng nếu bạn mới bắt đầu lập trình - Tôi sẽ là người hướng dẫn thân thiện của bạn, giải thích mọi thứ từng bước một. Vì vậy, hãy cầm một cốc cà phê và chúng ta hãy bắt đầu!

MySQL - ngram Fulltext Parser

Bộ phân tích văn bản toàn văn ngram: Điều quan trọng là gì?

Tưởng tượng bạn đang cố gắng tìm một cuốn sách cụ thể trong một thư viện lớn. Sẽ tuyệt vời nếu bạn chỉ cần gõ một vài từ và ngay lập tức tìm thấy những gì bạn đang tìm kiếm? Đó chính xác là những gì Bộ phân tích văn bản toàn văn ngram làm cho cơ sở dữ liệu!

Bộ phân tích ngram giống như một thủ thư siêu thông minh chia văn bản thành các đoạn nhỏ (được gọi là ngram) và giúp bạn tìm kiếm qua chúng một cách nhanh chóng và hiệu quả. Nó đặc biệt hữu ích cho các ngôn ngữ không sử dụng khoảng trắng giữa các từ, như tiếng Trung hoặc tiếng Nhật.

Ngram là gì?

Ngram là một chuỗi liên tục của n mục từ một văn bản nhất định. Ví dụ, nếu chúng ta có từ "hello" và n = 2 (mà chúng ta gọi là bigram), chúng ta sẽ có:

  • he
  • el
  • ll
  • lo

Rất thú vị, phải không? Bây giờ, hãy xem chúng ta có thể sử dụng điều này trong MySQL như thế nào!

Cấu hình kích thước token ngram

Trước khi chúng ta bắt đầu sử dụng bộ phân tích ngram, chúng ta cần nói cho nó biết chúng ta muốn kích thước ngram của chúng ta lớn như thế nào. Đây được gọi là kích thước token.

Đây là cách chúng ta có thể đặt nó:

SET GLOBAL ngram_token_size = 2;

Điều này đặt kích thước ngram của chúng ta thành 2 (bigram). Nhưng nhớ rằng, bạn cần quyền đặc biệt để thay đổi các biến toàn cục. Nếu bạn mới bắt đầu, quản trị viên cơ sở dữ liệu của bạn có thể cần phải làm điều này cho bạn.

Tạo chỉ mục FULLTEXT sử dụng Bộ phân tích ngram

Bây giờ chúng ta đã đặt kích thước token của chúng ta, hãy tạo một bảng và thêm một chỉ mục FULLTEXT sử dụng bộ phân tích ngram:

CREATE TABLE articles (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200),
content TEXT,
FULLTEXT INDEX ngram_idx (content) WITH PARSER ngram
) ENGINE=InnoDB;

Trong ví dụ này, chúng ta đang tạo một bảng được gọi là 'articles' với một cột 'id', 'title' và 'content'. Sự kỳ diệu xảy ra ở dòng cuối cùng, nơi chúng ta tạo một chỉ mục FULLTEXT trên cột 'content' sử dụng bộ phân tích ngram.

Xử lý khoảng trắng của Bộ phân tích ngram

Một điều thú vị về bộ phân tích ngram là cách nó xử lý khoảng trắng. Nó đối xử với chúng giống như bất kỳ ký tự nào khác. Vì vậy, "hello world" với bigram sẽ là:

  • he
  • el
  • ll
  • lo
  • o
  • w
  • wo
  • or
  • rl
  • ld

Điều này làm cho nó tuyệt vời cho việc tìm kiếm cụm từ!

Xử lý từ dừng của Bộ phân tích ngram

Không giống như một số bộ phân tích khác, bộ phân tích ngram không sử dụng từ dừng. Từ dừng là các từ phổ biến như "the" hoặc "and" thường bị bỏ qua trong các tìm kiếm. Bộ phân tích ngram bao gồm mọi thứ, điều này có thể tốt và xấu tùy thuộc vào nhu cầu của bạn.

Tìm kiếm cụm từ của Bộ phân tích ngram

Hãy thử một tìm kiếm cụm từ! Đầu tiên, hãy thêm một số dữ liệu vào bảng của chúng ta:

INSERT INTO articles (title, content) VALUES
('MySQL Tutorial', 'MySQL là một cơ sở dữ liệu phổ biến'),
('Python Guide', 'Python là một ngôn ngữ lập trình');

Bây giờ, hãy tìm kiếm "phổ biến cơ sở dữ liệu":

SELECT * FROM articles
WHERE MATCH(content) AGAINST('phổ biến cơ sở dữ liệu' IN BOOLEAN MODE);

Điều này sẽ trả về bài viết MySQL Tutorial của chúng ta.

Tìm kiếm từ của Bộ phân tích ngram

Chúng ta cũng có thể tìm kiếm các từ riêng lẻ. Hãy thử tìm kiếm "lập trình":

SELECT * FROM articles
WHERE MATCH(content) AGAINST('lập trình' IN BOOLEAN MODE);

Điều này sẽ trả về bài viết Python Guide của chúng ta.

Tìm kiếm ký tự đại diện của Bộ phân tích ngram

Bộ phân tích ngram không hỗ trợ tìm kiếm ký tự đại diện theo cách truyền thống. Tuy nhiên, bởi vì nó chia các từ thành các đoạn nhỏ, nó vẫn có thể tìm thấy các kết hợp một phần. Ví dụ:

SELECT * FROM articles
WHERE MATCH(content) AGAINST('prog' IN BOOLEAN MODE);

Điều này có thể vẫn tìm thấy bài viết "lập trình" của chúng ta, mặc dù chúng ta chỉ tìm kiếm một phần của từ.

Bộ phân tích văn bản toàn văn ngram sử dụng chương trình khách hàng

Cuối cùng, hãy xem cách chúng ta có thể sử dụng bộ phân tích ngram trong một chương trình Python:

import mysql.connector

# Kết nối với cơ sở dữ liệu
cnx = mysql.connector.connect(user='tên người dùng của bạn', password='mật khẩu của bạn',
host='127.0.0.1', database='cơ sở dữ liệu của bạn')
cursor = cnx.cursor()

# Thực hiện tìm kiếm
query = "SELECT * FROM articles WHERE MATCH(content) AGAINST(%s IN BOOLEAN MODE)"
search_term = 'cơ sở dữ liệu'

cursor.execute(query, (search_term,))

# In kết quả
for (id, title, content) in cursor:
print(f"ID: {id}, Title: {title}, Content: {content}")

# Đóng kết nối
cursor.close()
cnx.close()

Chương trình này kết nối với cơ sở dữ liệu MySQL của bạn, thực hiện tìm kiếm sử dụng bộ phân tích ngram và in ra kết quả.

Và đó là nó, mọi người! Chúng ta đã đi qua vùng đất của Bộ phân tích văn bản toàn văn ngram trong MySQL. Hãy nhớ rằng, thực hành tạo thành hoàn hảo, vì vậy đừng sợ thử nghiệm với các khái niệm này. Trước khi bạn biết, bạn sẽ phân tích và tìm kiếm như một chuyên gia!

Phương pháp Mô tả
SET GLOBAL ngram_token_size = n Cấu hình kích thước token ngram
CREATE TABLE... FULLTEXT INDEX... WITH PARSER ngram Tạo một bảng với chỉ mục FULLTEXT sử dụng bộ phân tích ngram
INSERT INTO... VALUES... Chèn dữ liệu vào bảng
SELECT... WHERE MATCH(...) AGAINST(... IN BOOLEAN MODE) Thực hiện tìm kiếm văn bản toàn văn sử dụng bộ phân tích ngram

Chúc bạn mã hóa vui vẻ và có thể các truy vấn của bạn luôn trả về kết quả bạn đang tìm kiếm!

Credits: Image by storyset