2009-09-07 8 views
6

आप एक्सेल में कार्यक्षमता को जानते हैं जब आप एक निश्चित पैटर्न के साथ 3 पंक्तियों को टाइप करते हैं और कॉलम को सभी तरह से खींचते हैं तो Excel आपके लिए पैटर्न जारी रखने का प्रयास करता है।एक्सेल जैसे समान पैटर्न कैसे स्पॉट और विश्लेषण करें?

उदाहरण

प्रकार के लिए ...

  • परीक्षण -1
  • परीक्षण -2
  • परीक्षण-3

Excel के साथ यह जारी रहेगा:

  • परीक्षण -4
  • परीक्षण -5
  • परीक्षण-एन ... इस तरह के दिनांक के रूप में और इतने पर कुछ अन्य पैटर्न के लिए

एक ही काम करता है।

मैं एक ऐसी ही बात को पूरा करने की कोशिश कर रहा हूँ, लेकिन मैं भी इस तरह के रूप में और अधिक असाधारण मामलों को संभालने के लिए चाहते हैं:

  • परीक्षण नीली somethingelse
  • परीक्षण पीले somethingelse
  • परीक्षण लाल -somethingelse

अब इस प्रविष्टियों मैं कहना चाहता हूँ के आधार पर उस पैटर्न है:

  • परीक्षण [DYNAMIC] -something

अन्य रंगों के साथ जारी रखें [DYNAMIC], एक और सौदा पूरी है कि मैं वास्तव में अभी के बारे में परवाह नहीं है। मैं पैटर्न में [DYNAMIC] भागों का पता लगाने में अधिक रुचि रखता हूं।

मुझे इसे बड़ी पूल प्रविष्टियों से पहचानने की आवश्यकता है। मान लें कि आपको इस तरह के पैटर्न के साथ 10.000 तार मिलते हैं, और आप इन स्ट्रिंग्स को समानता के आधार पर समूहित करना चाहते हैं और यह भी पता लगाते हैं कि पाठ का कौन सा हिस्सा लगातार बदल रहा है ([डायनामिक])।

दस्तावेज वर्गीकरण इस परिदृश्य में उपयोगी हो सकता है लेकिन मुझे यकीन नहीं है कि कहां से शुरू करना है।

अद्यतन:

मुझे लगता है कि यह भी एक से अधिक [DYNAMIC] पैटर्न बनाना संभव है उल्लेख करना भूल गया।

जैसे:

  • test_ [DYNAMIC] [DYNAMIC2]

मुझे नहीं लगता कि यह महत्वपूर्ण है, लेकिन मैं में यह लागू करने की योजना बना रहा हूँ।नेट लेकिन उपयोग करने के लिए एल्गोरिदम के बारे में कोई संकेत काफी मददगार होगा।

उत्तर

2

जैसे ही आप फार्म के पैटर्न के गतिशील भागों खोजने पर विचार शुरू: किसी अन्य मान्यताओं के बिना <const1><dynamic1><const2><dynamic2>.... तो आप नमूना तार आपके द्वारा दिए गए के longest common subsequence खोजने की आवश्यकता होगी। उदाहरण के लिए यदि मेरे पास test-123-abc और test-48953-defg है तो एलसीएस test- और - होगा। एलसीएस के परिणाम के बीच गतिशील भाग अंतराल होंगे। फिर आप एक उचित डेटा संरचना में अपने गतिशील भाग को देख सकते हैं।

2 से अधिक तारों के एलसीएस को खोजने की समस्या बहुत महंगा है, और यह आपकी समस्या का बाधा होगा। सटीकता की लागत पर आप इस समस्या को व्यवहार्य बना सकते हैं। उदाहरण के लिए, आप तारों के सभी जोड़ों के बीच एलसीएस कर सकते हैं, और समूह को समान एलसीएस परिणामों वाले तारों के सेट जोड़ सकते हैं। हालांकि, इसका मतलब है कि कुछ पैटर्न सही ढंग से पहचाने नहीं जाएंगे।

बेशक, अगर आप अपने तारों पर और प्रतिबंध लगा सकते हैं, तो यह सब टाला जा सकता है, जैसे कि एक्सेल ऐसा करता है जो केवल <const><dynamic> के पैटर्न की अनुमति देता है।

0

ढूंढना [गतिशील] सौदा का बड़ा हिस्सा नहीं है, आप इसे 2 स्ट्रिंग्स के साथ कर सकते हैं - बस शुरुआत में शुरू करें और जब वे समान नहीं होते हैं, तो अंत में वही करें, और वॉयला - आप

String s1 = 'asdf-1-jkl'; 
String s2= 'asdf-2-jkl'; 
int s1I = 0, s2I = 0; 
String dyn1, dyn2; 
for (;s1I<s1.length()&&s2I<s2.length();s1I++,s2I++) 
    if (s1.charAt(s1I) != s2.charAt(s2I)) 
    break; 
int s1E = s1.length(), s2E = s2.length; 
for (;s2E>0&&s1E>0;s1E--,s2E--) 
    if (s1.charAt(s1E) != s2.charAt(s2E)) 
    break; 
dyn1 = s1.substring(s1I, s1E); 
dyn2 = s2.substring(s2I, s2E); 

अपने 10k डेटा सेट्स के बारे में: - अपने [गतिशील]

कुछ की तरह (थोड़े स्यूडोकोड) मिला है। आपको अपने पैटन (10k x 10k कॉल) को समझने के लिए प्रत्येक संयोजन के साथ इसे (या शायद थोड़ा अधिक अनुकूलित संस्करण) कॉल करना होगा। और फिर पैटर्न द्वारा परिणाम क्रमबद्ध करें (यानी इन क्षेत्रों द्वारा प्रारंभ और समापन और क्रमबद्ध करें)

+0

10.000 विभिन्न पैटर्न के लिए? आप कैसे कह सकते हैं कि कौन सा दिखता है? आप भी नहीं जहां गतिशील है, शायद शुरू हो सकता है, शायद अंत हो सकता है, शायद बीच में शायद अस्तित्व में नहीं है। –

+0

एक्सेल 10k अलग पैटर्न के लिए यह नहीं कर रहा है। यह एक बहुत छोटा नमूना लेता है (= आपने जो चुना है) और उस से द्विपक्षीय भाग को आंकड़ा करता है (या नहीं: पी)। एक बार जब आपका गतिशील भाग हो तो आप इसे ज्ञात पैटर्न के विरुद्ध तुलना करना शुरू कर सकते हैं (यानी दोनों पूर्णांक और बढ़ रहे हैं; दोनों पूर्णांक और घट रहे हैं)। – Niko

+0

मुझे पता है कि एक्सेल सीमित नमूना का उपयोग करता है लेकिन जैसा कि मैंने दुर्भाग्य से सवाल में कहा है कि मेरे लिए काम नहीं करता है। मुझे ऐसा करने की ज़रूरत है 1000 स्ट्रिंग्स लेकिन संभावित रूप से अधिक कहें। Psuedocode के लिए धन्यवाद मेरे परीक्षणों में काफी आसान हो सकता है। –

0

मुझे लगता है कि आपको Levenshtein distance जैसे कुछ की गणना करने के लिए, समान तारों के समूह को खोजने के लिए, और फिर समान तारों के प्रत्येक समूह, आप एक विशिष्ट diff-like एल्गोरिदम में गतिशील भाग को indentify।

+0

यह अच्छा लगता है लेकिन AFAIK Levenshtein दूरी स्ट्रिंग की लंबाई को मेरे मामले में एक बड़ा अंतर के रूप में मानती है xxx-1323457980-yyy xxx-234-yyy के करीब होना चाहिए, लेकिन मैं इसे देख लूंगा। –

0

Google डॉक्स इस तरह की चीज़ के लिए एक्सेल से बेहतर हो सकता है, मान लीजिए या नहीं।

Google ने सेट पर भारी मात्रा में डेटा एकत्र किया है - उदाहरण के लिए आपने जो उदाहरण दिया है, वह सेट 'रंग' के हिस्से के रूप में नीले, लाल, पीले रंग को पहचान लेगा। एक्सेल की तुलना में इसमें कहीं अधिक पूर्ण पैटर्न मान्यता है, इसलिए पैटर्न को जारी रखने का एक बेहतर मौका खड़ा होगा।

+0

यह वास्तव में दिलचस्प है Google सेट्स - http://labs.google.com/sets को इस कार्यक्षमता को बढ़ाने के लिए ऑनलाइन उपयोग किया जा सकता है, हालांकि थोड़ा धीमा :) –

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