Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

đối sánh tìm kiếm php (mờ)

Thật không may, thực hiện điều này trong PHP rất tốn kém (sử dụng CPU và bộ nhớ cao.) Tuy nhiên, bạn chắc chắn có thể áp dụng thuật toán cho các tập dữ liệu nhỏ.

Để mở rộng cụ thể về cách bạn có thể tạo sự cố máy chủ:một số hàm PHP tích hợp sẵn sẽ xác định "khoảng cách" giữa các chuỗi: levenshtein same_text .

Dữ liệu giả:(giả sử chúng là tiêu đề tin tức)

$titles = <<< EOF
Apple
Apples
Orange
Oranges
Banana
EOF;

$titles = explode("\n", $titles );

Tại thời điểm này, $ title chỉ nên là một mảng các chuỗi. Bây giờ, hãy tạo một ma trận và so sánh từng dòng tiêu đề với MỌI dòng tiêu đề khác để có sự giống nhau. Nói cách khác, đối với 5 dòng tiêu đề, bạn sẽ nhận được ma trận 5 x 5 (25 mục nhập.) Đó là nơi CPU và bộ nhớ chìm đi vào.

Đó là lý do tại sao phương pháp này (thông qua PHP) không thể được áp dụng cho hàng nghìn mục nhập. Nhưng nếu bạn muốn:

$matches = array();
foreach( $titles as $title ) {
    $matches[$title] = array();
    foreach( $titles as $compare_to ) {
        $matches[$title][$compare_to] = levenshtein( $compare_to, $title );
    }
    asort( $matches[$title], SORT_NUMERIC  );
}

Tại thời điểm này, những gì bạn có về cơ bản là một ma trận với "khoảng cách văn bản". Trong khái niệm (không phải trong dữ liệu thực), nó giống như bảng dưới đây. Lưu ý cách có một tập hợp các giá trị 0 đi theo đường chéo - điều đó có nghĩa là trong vòng lặp đối sánh, hai từ giống hệt nhau - tốt, giống hệt nhau.

       Apple Apples Orange Oranges Banana
Apple    0     1      5      6       6
Apples   1     0      6      5       6
Orange   5     6      0      1       5
Oranges  6     5      1      0       5
Banana   6     6      5      5       0

Mảng $ so khớp thực tế trông giống như thế này (bị cắt bớt):

Array
(
    [Apple] => Array
        (
            [Apple] => 0
            [Apples] => 1
            [Orange] => 5
            [Banana] => 6
            [Oranges] => 6
        )

    [Apples] => Array
        (
      ...

Nhưng dù sao, việc (bằng thử nghiệm) tùy thuộc vào bạn để xác định mức giới hạn khoảng cách số tốt hầu như có thể phù hợp - và sau đó áp dụng nó. Nếu không, hãy đọc trên sphinx-search và sử dụng nó - vì nó có các thư viện PHP.

Orange, bạn có vui vì bạn đã hỏi về điều này?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Tham gia và đếm các hàng từ một bảng khác

  2. SQLException:Trước khi bắt đầu tập kết quả

  3. Làm cách nào để lấy kiểu dữ liệu cột của bảng mysql?

  4. Làm cách nào để sử dụng giá trị chuỗi / cột làm hằng số khoảng ngày của mysql (NGÀY, THÁNG ...)?

  5. MySQL INT nghĩa