12/08/2018, 16:00

Tìm hiểu Tokenizers phổ biến trong Elasticsearch

1 Tokenizers nhận được thường là một mảng các từ riêng lẻ xuất rả từ một chuỗi ký tự tìm kiếm Ví dụ whitespace tokenizer chia đoạn văn bản bởi các khoảng trắng. Ví dụ với chuỗi quick brown fox sử dụng whitespace tokenizer sẽ chia thành các thuật ngữ [quick, brown, fox] Elasticsearch định ...

  • 1 Tokenizers nhận được thường là một mảng các từ riêng lẻ xuất rả từ một chuỗi ký tự tìm kiếm
  • Ví dụ whitespace tokenizer chia đoạn văn bản bởi các khoảng trắng. Ví dụ với chuỗi quick brown fox sử dụng whitespace tokenizer sẽ chia thành các thuật ngữ [quick, brown, fox]
  • Elasticsearch định nghĩa sẵn một số Tokenizers, ngoài ra có thể xây dựng 1 Tokenizers mới dựa trên custom analyzers. Chúng ta sẽ tìm hiểu về Custom Analyzers ở bài viết sau.

Word Oriented Tokenizers

Các tokenizers sau đây thường được sử dụng để tokenizing văn bản đầy đủ thành các từ riêng lẻ:

Standard Tokenizers

  • Standard Tokenizers chia văn bản thành các thuật ngữ về ranh giới từ, như được xác định bởi thuật toán Unicode Text Segmentation. Nó loại bỏ hầu hết các dấu chấm câu. Đây là sự lựa chọn tốt nhất cho hầu hết các ngôn ngữ.

Example output

POST _analyze
{
  "tokenizer": "standard",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

Các viết ở trên sẽ tạo ra các terms sau:

[The, 2, QUICK, Brown, Foxes, jumped, over, the, lazy, dog's, bone]

Configuration

Standard Tokenizers nhận tham số:

max_token_length

Mặc định giá trị này bằng 255 chúng ta có thể chỉnh để nhận đầu ra tối đa của 1 terms: Ví dụ

PUT my_index
{
   "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "standard",
          "max_token_length": 5
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_analyzer",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

Đầu ra nhận được là:

[ The, 2, QUICK, Brown, Foxes, jumpe, d, over, the, lazy, dog's, bone]

Letter Tokenizers

Các tokenizer thư chia văn bản thành các thuật ngữ bất cứ khi nào nó gặp một ký tự không phải là 1 letter.

Example output

{
  "tokenizer": "letter",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

Đầu ra nhận được sẽ là:

[ The, QUICK, Brown, Foxes, jumped, over, the, lazy, dog, s, bone ]

Lowercase Tokenizers

Lowercase Tokenizers giống như letter tokenizers, chia văn bản thành các thuật ngữ bất cứ khi nào nó chạm trán một ký tự không phải là một letter, nhưng nó cũng chuyển thành dạng lowercase tất cả các thuật ngữ.

Example Output

POST _analyze
{
  "tokenizer": "lowercase",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

Đầu ra nhận được là:

[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]

Whitespace Tokenizers

whitespace tokenizers phá vỡ văn bản bất cứ khi nào nó gặp 1 ký tự khoảng trắng

Example Output

POST _analyze
{
  "tokenizer": "whitespace",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

Đầu ra nhận được là:

[ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog's, bone. ]

UAX URL Email Tokenizers

UAX URL Email Tokenizers giống như Standard tokenizer ngoại trừ việc nó nhận ra URL và địa chỉ email dưới dạng các mã đơn.

Example Output

POST _analyze
{
  "tokenizer": "uax_url_email",
  "text": "Email me at john.smith@global-international.com"
}

Đối với Standard Tokenizers đầu ra nhận được sẽ là:

[ Email, me, at, john.smith, global, international.com ]

Còn đối với UAX URL Email Tokenizers đầu ra nhận được là:

[ Email, me, at, john.smith@global-international.com ]

Classic Tokenizers

Classic Tokenizers là một tokenizer dựa trên ngữ pháp tiếng anh, rất tốt cho các tài liệu tiếng Anh. Tokkenizer này có heuristics để xử lý đặc biệt của từ viết tắt, tên công ty, địa chỉ email, và tên máy chủ lưu trữ internet. Tuy nhiên, những quy tắc này không phải lúc nào cũng hiệu quả, và tokenizer không hoạt động tốt với hầu hết các ngôn ngữ khác ngoài tiếng Anh:

  • Nó phân chia các từ thành nhiều ký tự chấm câu, loại bỏ dấu chấm câu. Tuy nhiên, một chấm không theo sau bởi khoảng trắng được coi là một phần của một mã thông báo.
  • Nó chia tách các từ thành các dấu nối, trừ khi có một số trong mã thông báo, trong trường hợp toàn bộ mã thông báo được hiểu là số sản phẩm và không bị chia tách.
  • Nó nhận ra địa chỉ email và tên máy chủ internet là một mã thông báo.

Example Output

POST _analyze
{
  "tokenizer": "classic",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

Đầu ra nhận được là:

[ The, 2, QUICK, Brown, Foxes, jumped, over, the, lazy, dog's, bone ]

Configuration

Tương tự như Standard Tokenizers cũng có tham số: max_token_length

Partial Word Tokenizers

Những mã token này chia nhỏ văn bản hoặc các từ thành các đoạn nhỏ.

N-Gram Tokenizers

N-Gram Tokenizers phá vỡ văn bản thành các từ bất cứ khi nào nó chạm trán một trong những ký tự được chỉ định, sau đó nó phát ra N-gram của mỗi từ có độ dài quy định.

N-Gram giống như một cửa sổ trượt di chuyển qua từ - một dãy liên tục các ký tự có độ dài quy định. Chúng hữu ích cho việc truy vấn các ngôn ngữ không sử dụng không gian hoặc có từ ghép dài, chẳng hạn như tiếng Đức.

Example Output

Với cài đặt mặc định, N-Gram tokenizer xử lý văn bản ban đầu dưới dạng một mã thông báo đơn và tạo ra N-gram với độ dài tối thiểu 1 và chiều dài tối đa 2:

POST _analyze
{
  "tokenizer": "ngram",
  "text": "Quick Fox"
}

Đầu ra nhận được là:

[ Q, Qu, u, ui, i, ic, c, ck, k, "k ", " ", " F", F, Fo, o, ox, x ]

Configuration

N-Gram Tokenizers chấp nhận các tham số sau:

  • min_gram: Chiều dài tối thiểu của ký tự trong một gram. Mặc định là 1.
  • max_gram: Chiều dài tối đa của ký tự trong một gram. Mặc định là 2.
  • token_chars: Các lớp ký tự nên chứa trong một mã thông báo. Elasticsearch sẽ chia nhỏ các ký tự không thuộc các lớp được chỉ định. Mặc định là [] (giữ tất cả các ký tự).
    • letter —  for example a, b, ï or 京
    • digit —  for example 3 or 7
    • whitespace —  for example " " or " "
    • punctuation — for example ! or "
    • symbol —  for example $ or √

Example configuration

Trong ví dụ này, chúng ta cấu hình ngram tokenizer để xử lý chữ cái và chữ số như là các token, và grams có chiều dài là 3.

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "ngram",
          "min_gram": 3,
          "max_gram": 3,
          "token_chars": [
            "letter",
            "digit"
          ]
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_analyzer",
  "text": "2 Quick Foxes."
}

Đầu ra nhận được là:

[ Qui, uic, ick, Fox, oxe, xes ]

Edge N-Gram Tokenizers

Edge N-Gram Tokenizers đầu tiên chia nhỏ văn bản thành các từ bất cứ khi nào nó chạm trán một trong những ký tự được chỉ định, sau đó nó phát ra N-gram của mỗi từ nơi bắt đầu N-gram được neo vào đầu từ.

Edge N-Grams rất hữu ích cho các truy vấn tìm kiếm khi bạn nhập.

Example Output

Với các thiết lập mặc định, Edge N-Gram Tokenizers xử lý văn bản ban đầu dưới dạng một mã thông báo đơn và tạo ra N-gram với độ dài tối thiểu 1 và chiều dài tối đa 2:

POST _analyze
{
  "tokenizer": "edge_ngram",
  "text": "Quick Fox"
}

Đầu ra nhận được là:

[ Q, Qu ]

Configuration

Edge N-gram Tokenizers cũng có những tham số Tương tự như N-Gram Tokenizers

Example Configuration

Trong ví dụ này, chúng ta cấu hình thẻ edge ngram tokenizer để xử lý các chữ cái và chữ số dưới dạng thẻ, và tạo ra gram với chiều dài tối thiểu 2 và chiều dài tối đa 10:

PUT my_index
{
 "settings": {
   "analysis": {
     "analyzer": {
       "my_analyzer": {
         "tokenizer": "my_tokenizer"
       }
     },
     "tokenizer": {
       "my_tokenizer": {
         "type": "edge_ngram",
         "min_gram": 2,
         "max_gram": 10,
         "token_chars": [
           "letter",
           "digit"
         ]
       }
     }
   }
 }
}

POST my_index/_analyze
{
 "analyzer": "my_analyzer",
 "text": "2 Quick Foxes."
}

Đầu ra nhận được sẽ là:

[ Qu, Qui, Quic, Quick, Fo, Fox, Foxe, Foxes ]

Như vậy là chúng ta đã tìm hiểu kỹ hơn về các tokenizer của elasticsearch giúp cho việc cấu hình tìm kiếm được chính xác hơn. Trong bài viết tới tôi sẽ đề cập đến custom analyzer để cho bạn có thể cấu hình tìm kiếm máy tìm kiếm của mình theo cách của riêng bạn> Mong rằng bài viết giúp các bạn hiểu hơn về elasticsearch

Nguồn: Analysis-tokenizers

0