2009-05-25 12 views
9

मुझे दो स्थानों के बीच भौतिक दूरी को मापने की आवश्यकता है जिनके नाम स्ट्रिंग के रूप में प्रदान किए जाते हैं। चूंकि कभी-कभी नाम थोड़ा अलग तरीके से लिखे जाते हैं, इसलिए मैं एक पुस्तकालय की तलाश में था जो मुझे अंतर को मापने में मदद कर सकता था और फिर सही मैचों का चयन करने के लिए अक्षांश और देशांतर के माप के साथ गठबंधन कर सकता था। पसंदीदा भाषाएं: जावा या PHP।दो स्थानों के बीच शारीरिक दूरी

कोई सुझाव?

+0

हे, मैं उलझन में था और गलत फोकस पर जोर देने के लिए शीर्षक संपादित किया था - प्रश्न शायद आखिरकार एक स्ट्रिंग दूरी एक है, जैसा कि स्वीकार किए गए उत्तर से पता चलता है। – icedwater

उत्तर

6

Levenshtein distance पर एक नज़र डालें। यह मापने का एक तरीका है कि एक दूसरे से दो तार अलग-अलग होते हैं।

उम्मीद है कि मैं आपके प्रश्न को सही ढंग से समझ गया हूं; "अक्षांश और देशांतर" के रूप में एक ही वाक्य में "दूरी" का उपयोग भ्रमित हो सकता है!

+0

मेरी गलती .. "दूरी" का उपयोग कर भ्रमित है। जहां तक ​​लेट और लम्बे संबंध हैं, मैं वास्तव में फिजिकल दूरी का मतलब था। जहां तक ​​तारों का संबंध है, मेरा मतलब है कि दो तारों के बीच "मतभेद"। लेवेनशेटिन दूरी intresting लगता है, यह सही होगा अगर दूरी मापने के लिए "उपयोग करने के लिए तैयार" पुस्तकालय था ... – PieroP

+3

PHP में एक लेवेनशेटिन दूरी का फ़ंक्शन है: http://www.php.net/manual/en/function.levenshtein.php –

+0

इनपुट – PieroP

4

हालांकि सी (पायथन और टीसीएल बाइंडिंग के साथ) में लिखा गया है, libdistance स्ट्रिंग/डेटा पर कई दूरी मीट्रिक लगाने के लिए एक उपकरण होगा।

मेट्रिक्स में शामिल हैं:

  • खिलने
  • damerau
  • यूक्लिड
  • हैमिंग
  • Jaccard
  • Levenshtein
  • मैनहट्टन
  • मिंकोवस्की
  • needleman_wunsch
0

मैं जावा में SumMetrics मिला, लेकिन यह उपयोग नहीं किया है।

+0

इनपुट के लिए धन्यवाद मैंने अपने लेवेनशेटिन कार्यान्वयन की जांच की, और मुझे लगता है कि मैं एक मेरी पोस्ट में प्रदान की गई कम स्मृति का उपयोग करती है (हालांकि यह छोटी तारों के साथ एक समस्या से कम है)। –

0

मैंने जावा कोड में लेवेनशेटिन दूरी की गणना करने के लिए लिखे गए सी # कोड के एक टुकड़े का अनुवाद करने की स्वतंत्रता ली है। यह केवल दो एकल-आयाम सरणियों कि एक बड़ा दांतेदार सरणी के बजाय वैकल्पिक उपयोग करता है:

public static int getDifference(String a, String b) 
{ 
    // Minimize the amount of storage needed: 
    if (a.length() > b.length()) 
    { 
     // Swap: 
     String x = a; 
     a = b; 
     b = x; 
    } 

    // Store only two rows of the matrix, instead of a big one 
    int[] mat1 = new int[a.length() + 1]; 
    int[] mat2 = new int[a.length() + 1]; 

    int i; 
    int j; 

    for (i = 1; i <= a.length(); i++) 
     mat1[i] = i; 

    mat2[0] = 1; 

    for (j = 1; j <= b.length(); j++) 
    { 
     for (i = 1; i <= a.length(); i++) 
     { 
      int c = (a.charAt(i - 1) == b.charAt(j - 1) ? 0 : 1); 

      mat2[i] = 
       Math.min(mat1[i - 1] + c, 
       Math.min(mat1[i] + 1, mat2[i - 1] + 1)); 
     } 

     // Swap: 
     int[] x = mat1; 
     mat1 = mat2; 
     mat2 = x; 

     mat2[0] = mat1[0] + 1; 
    } 

    // It's row #1 because we swap rows at the end of each outer loop, 
    // as we are to return the last number on the lowest row 
    return mat1[a.length()]; 
} 

यह कठोर परीक्षण नहीं है, लेकिन यह ठीक काम कर रहा है। यह एक विश्वविद्यालय अभ्यास के लिए किए गए पायथन कार्यान्वयन पर आधारित था। उम्मीद है की यह मदद करेगा!

1

थोड़ा मिस्पेल्ड नाम खोजने के लिए आपको phonetic algorithm का उपयोग करके कुछ अच्छे परिणाम मिल सकते हैं।

इसके अलावा, यदि आप अधिक यांत्रिक संपादन दूरी का उपयोग करते हैं, तो आप संभवतः एक भारित फ़ंक्शन का उपयोग करके बेहतर परिणाम देखेंगे जो कीबोर्ड ज्यामिति के लिए खाते हैं (यानी भौतिक रूप से करीबी कुंजी दूर से दूर करने के लिए "सस्ता" हैं)। यह एक पेटेंट विधि है btw, इसलिए सावधान रहें जो बहुत लोकप्रिय हो जाता है;)

+0

इस तरह का एक सरल (लेकिन शानदार) विचार पेटेंट कैसे किया जा सकता है? : पी या कीबोर्ड मैपिंग का सम्मान करने के लिए यह सही तकनीक थी? –

+0

क्योंकि कुछ कानूनी रूप से पिछड़े क्षेत्राधिकारों में सॉफ़्टवेयर एल्गोरिदम को पेटेंट किया जा सकता है :) मैं सिर्फ एक इंजीनियर हूं इसलिए मैंने कंपनी के कानूनी सलाहकारों पर भरोसा करते हुए, विवरणों को देखने के लिए कभी भी परेशान नहीं किया है। – Christoffer

+0

फोनेटिक एल्गोरिदम का विचार बहुत अच्छा है। क्या इस सुविधा को लागू करने के लिए कोई पुस्तकालय है? – PieroP

संबंधित मुद्दे