दो शब्दों के बीच समानता


15

मैं एक पायथन लाइब्रेरी की तलाश कर रहा हूं जो मुझे दो शब्दों या वाक्यों के बीच समानता की पहचान करने में मदद करती है।

मैं ऑडियो टू टेक्स्ट रूपांतरण कर रहा हूं, जिसके परिणामस्वरूप एक अंग्रेजी शब्दकोश या गैर शब्दकोश शब्द होगा (यह एक व्यक्ति या कंपनी का नाम हो सकता है) उसके बाद, मुझे इसकी तुलना किसी ज्ञात शब्द या शब्दों से करने की आवश्यकता है।

उदाहरण:

1) टेक्स्ट टू ऑडियो रिजल्ट: अमेरिका एक्सप्रेस को कॉल करने के लिए धन्यवाद अमेरिकन एक्सप्रेस की तुलना में किया जाएगा ।

दोनों वाक्य किसी तरह समान हैं लेकिन समान नहीं हैं।

लगता है कि मुझे यह देखने की आवश्यकता है कि वे कितने चार्ट साझा करते हैं। कोई भी विचार महान होगा। Google खोज जैसी कार्यक्षमता दिखती है "क्या आपका मतलब" सुविधा है।

जवाबों:


14

निकटतम ऐसा होगा जैसे जनवरी ने इनइस उत्तर का उल्लेख किया है, लेवेनस्टीन की दूरी (जिसे लोकप्रिय रूप से संपादित दूरी भी कहा जाता है)।

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

यह समान शब्दों की पहचान के लिए एक बहुत ही सामान्य रूप से उपयोग किया जाने वाला मीट्रिक है। Nltk में पहले से ही संपादित दूरी मीट्रिक के लिए एक कार्यान्वयन है, जिसे निम्नलिखित तरीके से लागू किया जा सकता है:

import nltk
nltk.edit_distance("humpty", "dumpty")

उपरोक्त कोड वापस आ जाएगा 1, क्योंकि दोनों शब्दों के बीच केवल एक अक्षर अलग है।


1
Lavenshtien की दूरी सबसे खराब एल्गोरिथ्म है जिसका उपयोग आप कर सकते हैं यदि एनएलपी वह है जो आप करना चाहते हैं। यदि 2 समानार्थक शब्द का एक अलग वर्ण सेट है, तो एलडी उन मामलों में बहुत खराब प्रदर्शन करेगा।
यह

8

यहाँ बहुत अच्छी प्रतिक्रियाओं के अलावा, आप डिफरेंट पाइथन लाइब्रेरी में SequenceMatcher आज़मा सकते हैं।

https://docs.python.org/2/library/difflib.html

import difflib

a = 'Thanks for calling America Expansion'
b = 'Thanks for calling American Express'

seq = difflib.SequenceMatcher(None,a,b)
d = seq.ratio()*100
print(d) 
### OUTPUT: 87.323943

अब नीचे दिए गए कोड पर विचार करें:

a = 'Thanks for calling American Expansion'
b = 'Thanks for calling American Express'

seq = difflib.SequenceMatcher(None,a,b)
d = seq.ratio()*100
print(d)
### OUTPUT: 88.88888

अब आप समानता का मूल्यांकन करने के लिए d मान की तुलना कर सकते हैं।


1
अगर आपको लगता है कि seq.ratio () धीमा है, तो आप seq.quick_ratio ()
Nabin

6

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

लेव (बिल्ली का बच्चा, बैठे) = 3

  • k itten -> एस इटेन
  • sitt e n -> sitt i n
  • sittin -> सिटिन g

यहाँ विकीबूक पर कुछ पायथन लागू हैं।

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


(+1) लेव के लिए। दूरी मीट्रिक। nltk एक तैयार किए गए कार्यान्वयन के साथ आता है। कोसाइन समानता एक अच्छा स्ट्रिंग-समानता उपाय IMHO :) नहीं है
Dawny33

मैं मानता हूं कि यह लेवेंसाइटिन दूरी से बहुत खराब है, लेकिन अगर आपको लाखों के 2 डेटासेट के बीच फजी मिलान की आवश्यकता है, तो यह वास्तव में ऐसा कर सकता है कि कुछ चालों के साथ-साथ मैट्रिक्स गुणन की आवश्यकता के कारण उचित समय में
जन वैन डेर वेजट

1
@ Dawny33 मैं असहमत होगा। न केवल कॉस्मिक समानता ने मेरे लिए बहुत तेज़ी से काम किया है, बल्कि यह भी बहुत सटीक रूप से दिया गया है कि सही एन-ग्राम का उपयोग किया गया था।
मोहित मोटवानी

3

तुलना के लिए एक पुरानी और प्रसिद्ध तकनीक है साउंडेक्स एल्गोरिदम है। विचार यह है कि शब्दों की तुलना स्वयं नहीं की जाती है, लेकिन उनका उच्चारण कैसे किया जाता है। यह वास्तव में मेरे द्वारा ज्ञात परिणामों की गुणवत्ता में किस हद तक सुधार करता है।

हालाँकि, स्पीच-टू-टेक्स्ट रिकग्निशन इंजन के परिणामों के लिए साउंडेक्स जैसी किसी चीज़ को लागू करना थोड़ा अजीब लगता है। पहले आप इस बारे में जानकारी निकालते हैं कि शब्दों का उच्चारण कैसे किया जाता है, फिर आप इसे फिर से जोड़ने की कोशिश करते हैं। इन दो चरणों को संयोजित करना बेहतर होगा।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.