2009-05-19 19 views
12

में अनुमानित स्ट्रिंग का मिलान करना मुझे वर्तमान में लिखने वाले मूल डेटा एप्लिकेशन के साथ एक छोटी सी समस्या है। मेरे पास दो differents मॉडल, संदर्भ और peristent स्टोर हैं। एक मेरे ऐप डेटा के लिए है, दूसरा एक वेबसाइट के लिए प्रासंगिक इंफोस के साथ है।कोर डेटा स्टोर

अधिकांश समय, मैं अपने ऐप से दूसरे रिकॉर्ड से दूसरे रिकॉर्ड में बिल्कुल एक रिकॉर्ड से मेल खाता हूं। कभी-कभी, मुझे दो रिकॉर्ड जोड़ने के लिए फ़ज़ी स्ट्रिंग मिलान पर फ़ॉलबैक करना पड़ता है। मैं गीत शीर्षक से मिलान करने की कोशिश कर रहा हूं। मेरे स्थानीय शीर्षक हो सकता है (बना) "The French Idealist is in your pensée" और दूरदराज के शीर्षक गीत हो सकता है "01 - 10 - French idealist in in you're pensee, The (dub remix, feat. DJ Objective-C)"

मैं खोज ढेर अतिप्रवाह, गूगल, कोको प्रलेखन, और मैं नहीं है कि कैसे एक फजी मिलान करने के लिए पर कोई स्पष्ट उत्तर नहीं मिल सकता है ऐसे मामलों में। मेरे तार कुछ भी शुरू कर सकते हैं, विशेष पात्रों का एक गुच्छा है, आमतौर पर यादृच्छिक के साथ समाप्त होता है या वर्णों को अनदेखा किया जाता है।

रेगेक्सपी नहीं करेगा, न ही एनएसपीडिकेटेट्स, साउंडएक्स विदेशी नामों के साथ अच्छी तरह से काम नहीं करता है, और शायद लेवेनशेटिन पर्याप्त नहीं होगा (या यह होगा?)।

मैं लगभग एक दर्जन संभावित मैचों के सेट में एक शीर्षक की तलाश में हूं, लेकिन मैं इस ऑपरेशन को बहुत कुछ करने के लिए तैयार हूं। 100% सटीकता लक्ष्य नहीं है।

मैं अनदेखा शब्दों को हटाने, कीवर्ड (उदाहरण के लिए, "फ्रेंच, आदर्शवादी, पेन्सी") को निकालने, और उन्हें लेवेनशेटिन दूरी का उपयोग करने के बारे में सोच रहा था (गीत शीर्षक में शब्द एक ही क्रम में होना चाहिए)।

मेरे विशेष मामले में, क्या यह काम करेगा? इस समस्या के बारे में उद्योग मानक क्या है (मैं दुनिया में एकमात्र ऐसा नहीं हो सकता जो थोड़ा अलग गीत नामों से मेल खाना चाहता हो) क्या कोर डेटा, कोको या उद्देश्य-सी मेरी मदद कर सकता है?

बहुत बहुत धन्यवाद।

उत्तर

3

आप चाहते हैं कि आपकी खोज पेन्सी में 'é' और 'ई' में पेन्से से मेल खाने के लिए असंवेदनशील हो। विशेषता के बाद [डी] जोड़कर आप इसे प्राप्त करते हैं। इस तरह:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(songTitle like[cd] %@)", yourSongSubstring];
[सीडी] में 'सी' मामले असंवेदनशीलता के लिए है।

के बाद से अपने स्ट्रिंग स्ट्रिंग आप खोज रहे हैं में किसी भी क्रम में दिखाई दे सकता है, तो आप अपने खोज स्ट्रिंग tokenize सकता है ([... componentsByString: @ ""]) तो

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(songTitle like[cd] %@) and (songTitle like[cd] %@)", songToken1, songToken2];
की तरह यही वाक्य रचना के ऊपर विधेय गठबंधन करने के लिए कर सकते हैं एक विधेय बनाने स्मृति से जा रहे हो जाओ।

+0

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

2

मुझे विश्वास है कि आप जिस उपकरण का उपयोग करना चाहते हैं वह SearchKit है। मैं कहता हूं कि जैसे मैंने अभी अपना काम आसान बना दिया है .... मेरे पास नहीं है, लेकिन इसमें आपके पास सफल होने के लिए आवश्यक टूल होना चाहिए। एलएनसी अभी भी अपने SearchKit Podcast मुफ्त में (बहुत अच्छा) पेश कर रहा है।

प्रत्येक ट्रैक इस मामले में एक दस्तावेज़ होगा, और आपको उन्हें पहचानने के लिए उपयोग किए जाने वाले पहचानकर्ता के साथ अनुक्रमणित करने के लिए एक अच्छा तरीका आना होगा। फिर आप उन्हें मेटाडेटा के साथ लोड कर सकते हैं, और उन्हें खोज सकते हैं। शायद दस्तावेज़ में "शीर्षक" शीर्षक डालने से समानता खोज (kSKSearchOptionFindSimilar) के उपयोग को सुविधाजनक बनाने के लिए यहां सहायक होगा। यह वास्तव में अच्छी तरह से काम कर सकता है या नहीं भी हो सकता है।

आपने जो सवाल पूछा है वह एक अच्छा है, लेकिन इसके लिए निश्चित रूप से कोई उद्योग मानक नहीं है क्योंकि कोई भी जो इस समस्या को हल करता है (यानी हर प्रमुख खोज इंजन) अपने एल्गोरिदम को बहुत गुप्त रखता है। यह एक कठिन समस्या है; कोई भी अपना जवाब देने के लिए तैयार नहीं है।

+0

सर्चकिट। मैं पूरी तरह से इस एपीआई के बारे में भूल गया। मैंने डॉक्टर पर बहुत मेहनत की, मैंने इसके लिए अपने ऐप में तत्काल उपयोग देखा, लेकिन मुझे लगता है कि यह एक स्ट्रिंग और एक अन्य स्ट्रिंग के बीच एक मैच को अपनाने के लिए भी शामिल है। – damdamdam

1

क्यू-ग्राम पर विचार करें, जो लंबाई q (Gravano et al., 2001) के सबस्ट्रिंग हैं।

आप दो तार एस 1 और एस 2 के लिए, इसी छोटी से छोटी संपादित दूरी के साथ s2 की क्ष ग्राम एस 1 से प्रत्येक q-ग्राम के लिए निर्धारित कर सकते हैं। फिर उन सभी दूरी को जोड़ें और आप एक मीट्रिक के साथ समाप्त हो जाते हैं जो शब्दों और अतिरिक्त पात्रों के क्रमपरिवर्तन के लिए बहुत मजबूत है। (क्यू के साथ प्रयोग = 3, 4, 5 ...)

आम तौर पर, क्ष आपकी समस्या डोमेन के लिए अनुकूलित किया जाना चाहिए।

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