2009-02-27 17 views
18

मुझे स्वचालित रूप से उत्पाद नामों (कैमरे, लैपटॉप, टीवी-एस आदि) से मेल खाते हैं जो विभिन्न स्रोतों से डेटाबेस में एक कैनोलिक नाम में आते हैं।उत्पाद नामों का फ़ज़ी मिलान

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

मुख्य समस्या यह है कि प्रासंगिक कीवर्ड में एकल अक्षर परिवर्तन भी एक बड़ा अंतर डाल सकता है, लेकिन यह पता लगाना आसान नहीं है कि प्रासंगिक कीवर्ड कौन से हैं। उदाहरण के तीन उत्पाद नामों के लिए पर विचार करें:
Lenovo T400
लेनोवो R400
नई Lenovo T400, कोर 2 डुओ
पहले दो किसी भी मानक से हास्यास्पद समान तार कर रहे हैं (ठीक है, soundex मदद कर सकता है इस मामले में टी और आर को विचलित करने के लिए, लेकिन नाम 400T और 400R भी हो सकते हैं), पहला और तीसरा एक दूसरे से तारों के रूप में काफी दूर है, लेकिन एक ही उत्पाद है।

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

कोई भी विचार या संदर्भ बहुत सराहना कर रहा है

उत्तर

0

आप तर्क यह है कि पत्र/मॉडल संख्या की संख्या संयोजन पर ध्यान नहीं देता है (क्योंकि वे हमेशा समीप अत्यंत समान हैं) बनाने के लिए चाहते हो सकता है।

0

Spell checking एल्गोरिदम दिमाग में आते हैं।

हालांकि मुझे अच्छा नमूना कार्यान्वयन नहीं मिला, मुझे विश्वास है कि आप संतोषजनक परिणामों के साथ आने के लिए मूल वर्तनी जांच एल्गोरिदम को संशोधित कर सकते हैं। यानी एक चरित्र के बजाय शब्दों के साथ एक इकाई के रूप में काम करते हैं।

बिट और टुकड़े मेरी स्मृति में छोड़ दिया:

  1. पट्टी बाहर सभी आम शब्द (एक, एक, नया)। संदर्भ पर "आम" क्या निर्भर करता है।
  2. प्रत्येक शब्द और इसकी लंबाई का पहला अक्षर लें और इसे एक शब्द कुंजी बनाएं।
  3. जब कोई संदिग्ध शब्द आता है, तो शब्दों को समान या समान शब्द कुंजी के साथ दिखता है।

यह अपनी समस्याओं सीधे हल नहीं सकता है ... लेकिन आप सही कहते हैं कि तुम विचारों के लिए देख रहे थे?

:-)

4

मुझे लगता है कि इस नए भूसा जैसे से इस तरह के के रूप में कुंजी शब्द भेद करने के लिए नीचे उबल पड़ेगी लेनोवो

मैं कुंजी शब्दों की पहचान करने के लिए नामों के डेटाबेस पर कुछ विश्लेषण चलाऊंगा। आप एक शब्द क्लाउड उत्पन्न करने के लिए उपयोग किए गए कोड का उपयोग कर सकते हैं।

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

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

किसी भी खिंचाव से एक सही समाधान नहीं है, लेकिन मुझे नहीं लगता कि आप एक की उम्मीद कर रहे हैं?

0

इस प्रकार की समस्या के साथ कोई अनुभव नहीं है, लेकिन मुझे लगता है कि एक बहुत ही निष्पक्ष कार्यान्वयन खोज शब्द को टोकन करना होगा, और किसी भी टोकन को होने वाले मैचों की खोज करना होगा।

"कैनन PowerShot A20 है", उदाहरण के लिए, में tokenizes:

  • Powershot
  • A20
  • है

    • कैनन

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

    एक और रणनीति "कीवर्ड" जैसे "कैमरा", "कैनन", "डिजिटल कैमरा", और मिलान करने वाले कीवर्ड वाले आइटमों के आधार पर खोजना होगा। इसके अतिरिक्त, यदि आपने निर्माता, ब्रांड इत्यादि जैसे अन्य विशेषताओं को संग्रहीत किया है, तो आप इनमें से प्रत्येक पर खोज सकते हैं।

  • 3

    edg का उत्तर सही दिशा में है, मुझे लगता है - आपको फ्लफ से महत्वपूर्ण शब्दों को अलग करने की आवश्यकता है।

    संदर्भ मायने रखता है। अपना उदाहरण लेने के लिए, कोर 2 डुओ एक टी 400 के दो उदाहरणों को देखते समय फ्लफ है, लेकिन एक CPU OEM पैकेज को देखते समय नहीं।

    यदि आप अपने डेटाबेस में चिह्नित कर सकते हैं तो उत्पाद नाम के कैनोलिक रूप के कौन से हिस्से अधिक महत्वपूर्ण हैं और उत्पाद की पहचान करने के लिए एक रूप में या किसी अन्य रूप में दिखाई देना चाहिए, आपको यह करना चाहिए। शायद कुछ प्रकार के अर्थपूर्ण मार्कअप के उपयोग के माध्यम से? क्या आप डेटाबेस को मानव चिन्हित कर सकते हैं?

    आप "T400", "T400", "टी 400" आदि नहीं नियमों का एक सेट की तरह चीजें हैं जो कहते हैं कि के लिए समानक वर्गों को परिभाषित करने के लिए कोशिश कर सकते हैं "संख्या उन संख्याओं से जुड़ी पत्र की तुलना में अधिक दृढ़ता से बाँध।"

    निर्माता, मॉडल संख्या आदि के आधार पर मामलों में तोड़ना एक अच्छा दृष्टिकोण हो सकता है। मैं अनुशंसा करता हूं कि आप टर्म स्पॉटिंग के लिए तकनीकों को देखें और पूरा करने के लिए तकनीकों को देखें: http://www.worldcat.org/isbn/9780262100854

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

    0

    यह वही समस्या है जो मैं अपने खाली समय में काम कर रहा हूं।क्या मैं के साथ आया है: इस मामले में

    आप कुछ पदानुक्रम हो सकता था: कीवर्ड पर खोज के दायरे को सीमित करने में आधारित

    प्रकार -> कंपनी -> मॉडल

    ताकि आप

    कंपनी के लिए "कैनन" के लिए "डिजिटल कैमरा" से मिलान करेंगे और वहां आपको खोज के लिए बहुत कम दायरे के साथ छोड़ दिया जाएगा।

    आप उत्पाद लाइनों आदि को पेश करके इसे और भी नीचे काम कर सकते हैं लेकिन मुख्य बिंदु यह है कि इसे संभवतः किया जाना चाहिए।

    +0

    क्या यह दृष्टिकोण आपके लिए काम करता है या आप किसी अन्य दिशा में जाते हैं? –

    2

    आप इसके लिए trigram search का उपयोग करने में सक्षम हो सकते हैं। मुझे स्वीकार करना होगा कि मैंने कभी भी इंडेक्स को लागू करने के लिए एल्गोरिदम नहीं देखा है, लेकिन इसे फ़ार्मास्यूटिकल अनुप्रयोगों में काम करना देखा है, जहां यह वास्तव में बुरी तरह गलत मिस्ड दवाओं के नाम से बहुत अच्छी तरह से copes। आप इस समस्या के लिए एक ही तरह के तर्क लागू करने में सक्षम हो सकते हैं।

    4

    यहां की मुख्य समझ यह है कि आपके पास उचित दूरी मीट्रिक है। वास्तव में यह आपकी समस्या नहीं है। आपकी समस्या वर्गीकरण में है।

    मुझे आपको एक उदाहरण दें। मान लें कि आपके पास Foo Y1 के लिए Foo X1 और 20 के लिए 20 प्रविष्टियां हैं। आप सुरक्षित रूप से मान सकते हैं कि वे दो समूह हैं। दूसरी ओर, यदि आपके पास बार वाई 1 के लिए बार X1 और 1 के लिए 39 प्रविष्टियां हैं, तो आपको उन्हें एक समूह के रूप में व्यवहार करना चाहिए।

    अब, दूरी X1 < -> वाई 1 दोनों उदाहरणों में समान है, तो वर्गीकरण में कोई अंतर क्यों है? ऐसा इसलिए है क्योंकि बार वाई 1 एक बाहरी है, जबकि फू वाई 1 नहीं है।

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

    अब इस पेड़ के खिलाफ कैनोलिक नामों को मानचित्र करें। आप जल्दी से देखेंगे कि प्रत्येक एक संपूर्ण उप-मिलान से मेल खाता है। अब, उस प्रविष्टि के लिए दूरी कटऑफ चुनने के लिए इन पेड़ों के बीच की दूरी का उपयोग करें। यदि आपके पास डेटाबेस में Foo X1 और Foo Y1 दोनों उत्पाद हैं, तो कट-ऑफ दूरी को प्रतिबिंबित करने के लिए कम होना आवश्यक होगा।

    -1

    हम मिलान उत्पादों के लिए Datadecision service का उपयोग कर सकते हैं।

    यह आपको सांख्यिकीय एल्गोरिदम का उपयोग करके स्वचालित रूप से अपने उत्पाद डेटा से मिलान करने की अनुमति देगा। यह ऑपरेशन आत्मविश्वास के दहलीज स्कोर को परिभाषित करने के बाद किया जाता है।

    सभी डेटा जिन्हें स्वचालित रूप से मिलान नहीं किया जा सकता है उन्हें समर्पित उपयोगकर्ता इंटरफ़ेस के माध्यम से मैन्युअल रूप से समीक्षा की जानी चाहिए।

    ऑनलाइन सेवा समानार्थियों के साथ-साथ आपके मैन्युअल मिलान इतिहास को संग्रहीत करने के लिए लुकअप टेबल का उपयोग करती है। अगली बार जब आप नया डेटा आयात करते हैं तो यह आपको डेटा मिलान करने वाले स्वचालन में सुधार करने की अनुमति देता है।

    0

    यह record linkage की समस्या है। dedupe python library एक पूर्ण कार्यान्वयन प्रदान करता है, लेकिन यदि आप अजगर का उपयोग नहीं करते हैं, तो दस्तावेज़ में good overview of how to approach this problem है।

    संक्षेप में, मानक प्रतिमान के भीतर, यह कार्य तीन चरणों

    1. में बाँटा गया है क्षेत्रों की तुलना करें, इस मामले में सिर्फ नाम पर। आप इसके लिए एक या अधिक तुलनित्र का उपयोग कर सकते हैं, उदाहरण के लिए लेवेनशेटिन दूरी या कोसाइन दूरी जैसी कुछ संपादन दूरी जो सामान्य शब्दों की संख्या की तुलना करती है।
    2. एक संभावना है कि रिकॉर्ड की एक जोड़ी एक ही बात
    3. क्लस्टर अभिलेखों के समूह में उन जोड़ो में संभावना स्कोर संभावना है कि सभी एक ही बात का उल्लेख के बारे में वास्तव में कर रहे हैं में दूरी स्कोर के लिए एक सरणी कर दें।
    संबंधित मुद्दे