Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

php (अस्पष्ट) खोज मिलान

दुर्भाग्य से, PHP में ऐसा करना निषेधात्मक रूप से महंगा है (उच्च CPU और मेमोरी उपयोग।) हालांकि, आप निश्चित रूप से छोटे डेटा सेट पर एल्गोरिथ्म लागू कर सकते हैं।

आप सर्वर मेल्टडाउन कैसे बना सकते हैं, इस पर विशेष रूप से विस्तार करने के लिए:कुछ अंतर्निहित PHP फ़ंक्शन स्ट्रिंग्स के बीच "दूरी" निर्धारित करेंगे:levenshtein और समान_पाठ

डमी डेटा:(दिखाओ कि वे समाचारों की सुर्खियाँ हैं)

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

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

इस समय, $titles सिर्फ तार की एक सरणी होना चाहिए। अब, एक मैट्रिक्स बनाएं और समानता के लिए प्रत्येक शीर्षक की तुलना हर दूसरे शीर्षक से करें। दूसरे शब्दों में, 5 हेडलाइन के लिए, आपको 5 x 5 मैट्रिक्स (25 प्रविष्टियां) मिलेगा। यहीं पर सीपीयू और मेमोरी सिंक होता है।

इसलिए यह विधि (PHP के माध्यम से) हजारों प्रविष्टियों पर लागू नहीं की जा सकती। लेकिन अगर आप चाहते हैं:

$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  );
}

इस बिंदु पर आपके पास मूल रूप से "पाठ दूरी" वाला मैट्रिक्स है। अवधारणा में (वास्तविक डेटा में नहीं) यह नीचे दी गई तालिका की तरह दिखता है। ध्यान दें कि कैसे 0 मानों का एक सेट है जो तिरछे जाते हैं - इसका मतलब है कि मिलान लूप में, दो समान शब्द हैं - ठीक है, समान।

       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

वास्तविक $matches सरणी इस तरह दिखती है (छोटा हुआ):

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

    [Apples] => Array
        (
      ...

किसी भी तरह, यह आप पर निर्भर करता है कि (प्रयोग द्वारा) यह निर्धारित करें कि एक अच्छी संख्यात्मक दूरी कटऑफ ज्यादातर मेल खा सकती है - और फिर इसे लागू करें। अन्यथा, स्फिंक्स-खोज पर पढ़ें और इसका उपयोग करें - क्योंकि इसमें PHP पुस्तकालय हैं।

ऑरेंज आपको खुशी है कि आपने इसके बारे में पूछा?



  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 नेस्टेड SP एक अड़चन हो सकता है?

  2. स्ट्रिंग का चयन करने की क्वेरी कुछ वर्ण के साथ समाप्त होती है

  3. MySQL पिछले 7 दिनों का चयन करें

  4. विंडोज 7 पर mysql सर्वर को पुनरारंभ करें

  5. mysql आदेश द्वारा, पहले अशक्त, और बाद में डीईएससी