2013-06-10 23 views
36

के लिए सिमेंटिक समानता स्कोर वहाँ वाक्य की एक जोड़ी के लिए कंप्यूटिंग अर्थ समानता स्कोर के लिए किसी भी लाइब्रेरी?पायथन: स्ट्रिंग्स

मुझे वर्डनेट के अर्थात् डेटाबेस के बारे में पता है, और मैं 2 शब्दों के लिए स्कोर कैसे उत्पन्न कर सकता हूं, लेकिन मैं उन पुस्तकालयों की तलाश में हूं जो पोर्ट-स्टेमिंग जैसे सभी प्री-प्रोसेसिंग कार्यों को रोकते हैं, शब्द हटाने को रोकते हैं, आदि पूरे वाक्यों और दो वाक्यों से संबंधित के लिए स्कोर आउटपुट करता है।

मैं एक work का कार्य प्रगति पर जो .NET रूपरेखा है कि पूर्व संसाधन चरणों की एक सरणी का उपयोग कर स्कोर गणना करता है का उपयोग करते हुए लिखा है पाया। क्या कोई ऐसी परियोजना है जो इसे पायथन में करती है?

मैं संचालन में मदद मिलेगी कि मुझे लगता है स्कोर (के रूप में here के लिए कहा जाता है)
मैं अपने दम पर प्रत्येक चरण को लागू करने या अलग पुस्तकालयों से गोंद कार्यों में खुशी होगी, के अनुक्रम के लिए नहीं देख रहा हूँ ताकि यह वाक्य जोड़े के लिए काम करता है, लेकिन मुझे डेटा पर संदर्भों का परीक्षण करने के लिए इसे एक उपकरण के रूप में अधिकतर चाहिए।


संपादित करें: मैं NLTK का उपयोग करने और दो वाक्यों से अधिक दोहराया शब्द के हर जोड़ी के लिए स्कोर की गणना, और फिर परिणाम का मानक विचलन से अनुमान आकर्षित विचार कर रहा था, लेकिन मैं नहीं जानता कि यदि यह समानता का एक वैध अनुमान है। इसके अलावा, इसमें लंबे तारों के लिए बहुत समय लगेगा।
फिर से, मैं उन परियोजनाओं/पुस्तकालयों की तलाश में हूं जो पहले से ही समझदारी से लागू कर रहे हैं। मुझे कुछ ऐसा कर देता है कि: अजगर के लिए

import amazing_semsim_package 
str1='Birthday party ruined as cake explodes' 
str2='Grandma mistakenly bakes cake using gunpowder' 

>>similarity(str1,str2) 
>>0.889 
+0

वेक्टर आधार अर्थ मॉडल या मैट्रिक्स अपघटन मॉडल वाक्य समानता की तुलना करने के लिए पर विचार करें। आप lesk की तरह कोज्या पर वापस गिर सकता है यदि नहीं, कि पहली vectorize एक वाक्य calculate 2 वैक्टर – alvas

+0

के बीच कोज्या आप एक कटऑफ के रूप में कुछ वजन करने के लिए देख या सख्त रहे हैं स्कोर की जरूरत है, NLTK के wup समानता पर विचार करें। टाइप (क्रिया, संज्ञा, adj; आदि) प्राप्त करने के लिए आपको CLIPS पैटर्न जैसे कुछ उपयोग करने की आवश्यकता होगी।आप वास्तव में जेएसईएम/एलडीए के लिए श्रेणियों की सही संख्या को खोजने के लिए इसका उपयोग कर सकते हैं जैसा कि जेन्सिम या केमैन के एक अस्पष्ट/कोसाइन कार्यान्वयन में पाया गया है। –

उत्तर

37

सबसे अच्छा पैकेज मैं इस के लिए देखा है Gensim है, Gensim Homepage पर पाया जाता है। मैंने इसे कई बार इस्तेमाल किया है, और समग्र रूप से उपयोग की आसानी से बहुत खुश हूं; यह पायथन में लिखा गया है, और आपको शुरू करने के लिए tutorial का पालन करना आसान है, जो 9 तारों की तुलना करता है। इसे पीआईपी के माध्यम से स्थापित किया जा सकता है, इसलिए आपको इसे स्थापित करने में बहुत परेशानी नहीं होगी।

कौन सा अंक कलन विधि को आप का उपयोग आपकी समस्या के संदर्भ पर निर्भर है, लेकिन मैं LSI कार्यक्षमता के साथ शुरू करने की अगर आप कुछ बुनियादी चाहते सुझाव देना चाहेंगे। (यही कारण है कि ट्यूटोरियल आप के माध्यम से चलता है है।)

आप gensim के लिए ट्यूटोरियल के माध्यम से जाना है, यह आप दो तार की तुलना, समानता समारोह का उपयोग कर के माध्यम से चलना होगा। यह आपको यह देखने की अनुमति देगा कि आपके डंक एक दूसरे के साथ तुलना करते हैं, या किसी अन्य स्टिंग के साथ, उनके पाठ के आधार पर।

आप यह कैसे काम करता पीछे विज्ञान में रुचि रखते हैं, this paper.

+0

यह बहुत ही आशाजनक दिखता है। जस्टिन को इंगित करने के लिए धन्यवाद। – user8472

-4

सबसे शक्तिशाली NLP-लिब AFAIK http://nltk.org/

+3

एनएलटीके में शब्द अवधारणाओं की एक जोड़ी के बीच अर्थपूर्ण समानता के लिए कुछ 6 अंक हैं, लेकिन मैं दो तारों (कई, शायद सैकड़ों शब्दों, शब्दों) की तुलना करना चाहता हूं – user8472

0

दुर्भाग्य की जाँच, मैं PY के साथ मदद नहीं कर सकता, लेकिन आप शब्दकोशों का उपयोग करता है सिमेंटिक तुलना पूरा करने के लिए मेरे पुराने परियोजना पर एक नज़र लग सकता है वाक्यों के बीच (जिसे बाद में वेक्टर-स्पेस विश्लेषण को कार्यान्वित करने वाले पीवाई में कोड किया जा सकता है)। यह जावा से पीवाई में अनुवाद करने के लिए कोडिंग के कुछ ही घंटे होना चाहिए। https://sourceforge.net/projects/semantics/

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