2013-06-25 8 views
5

के लिए अजीब परिणाम लौटा रहा है मैं पाइथन nltk के wordnet का उपयोग करके दो शब्दों के बीच समानता खोजने की कोशिश कर रहा हूं। दो नमूना कीवर्ड 'गेम' और 'लियोनार्डो' है। सबसे पहले मैंने इन दो शब्दों के सभी synsets निकाले हैं और प्रत्येक समानता को खोजने के लिए प्रत्येक synset को पार कर मिलान किया है।पायथन एनएलटीके वर्डनेट समानता माप

game.n.01 नियमों के साथ एक प्रतियोगिता एक विजेता leonardo.n.01 इतालवी चित्रकार और मूर्तिकार और इंजीनियर और वैज्ञानिक निर्धारित करने के लिए: यहाँ मेरी कोड

from nltk.corpus import wordnet as wn 

xx = wn.synsets("game") 
yy = wn.synsets("leonardo") 
for x in xx: 
    for y in yy: 
     print x.name 
     print x.definition 
     print y.name 
     print y.definition 
     print x.wup_similarity(y) 
     print '\n' 

यहाँ कुल उत्पादन किया जाता है और वास्तुकार; इतालवी पुनर्जागरण के सबसे बहुमुखी प्रतिभा (1452-1519) 0,285714285714

game.n.02 एक खेल या अन्य प्रतियोगिता leonardo.n.01 इतालवी चित्रकार और मूर्तिकार और इंजीनियर और वैज्ञानिक और वास्तुकार की एक ही खेल ; इतालवी पुनर्जागरण के सबसे बहुमुखी प्रतिभा (1452-1519) 0,285714285714

game.n.03 एक मनोरंजन या शगल leonardo.n.01 इतालवी चित्रकार और मूर्तिकार और इंजीनियर और वैज्ञानिक और वास्तुकार; इतालवी पुनर्जागरण के सबसे बहुमुखी प्रतिभा (1452-1519) 0,25

game.n.04 पशु भोजन या खेल leonardo.n.01 इतालवी चित्रकार और मूर्तिकार और इंजीनियर और वैज्ञानिक और वास्तुकार के लिए शिकार किया; इतालवी पुनर्जागरण के सबसे बहुमुखी प्रतिभा (1452-1519) 0,923076923077

game.n.05 (टेनिस) जिसके दौरान एक खिलाड़ी में कार्य करता है leonardo.n.01 इतालवी चित्रकार और मूर्तिकार और इंजीनियर और खेलने का एक प्रभाग वैज्ञानिक और वास्तुकार; इतालवी पुनर्जागरण (1452-1519) 0,222222222222

game.n.06 (खेल) एक खास बिंदु पर स्कोर या स्कोर के सबसे बहुमुखी प्रतिभा जरूरत leonardo.n.01 इतालवी चित्रकार और मूर्तिकार जीतने के लिए और इंजीनियर और वैज्ञानिक और वास्तुकार; इतालवी नवजागरण के सबसे बहुमुखी प्रतिभा (1452-1519) 0,285714285714

game.n.07 जंगली जानवरों का मांस है कि भोजन leonardo.n.01 इतालवी चित्रकार और मूर्तिकार और इंजीनियर और वैज्ञानिक के लिए प्रयोग किया जाता है और वास्तुकार; इतालवी पुनर्जागरण की सबसे बहुमुखी प्रतिभा (1452-1519) 0,5

plot.n.01 कुछ करने के लिए एक गुप्त योजना (विशेष रूप से कुछ अंडरहैंड या अवैध) इतालवी चित्रकार और मूर्तिकार और leonardo.n.01 इंजीनियर और वैज्ञानिक और वास्तुकार; इतालवी पुनर्जागरण (1452-1519) 0,2

game.n.09 की सबसे बहुमुखी प्रतिभा खेल के क्रम में आवश्यक उपकरण एक विशेष खेल leonardo.n.01 इतालवी चित्रकार और मूर्तिकार और इंजीनियर और वैज्ञानिक खेलने के लिए और वास्तुकार; इतालवी पुनर्जागरण (1452-1519) 0,666666666667

game.n.10 अपने व्यवसाय या काम leonardo.n की लाइन का सबसे बहुमुखी प्रतिभा।01 इतालवी चित्रकार और मूर्तिकार और इंजीनियर और वैज्ञानिक और वास्तुकार; इतालवी पुनर्जागरण के सबसे बहुमुखी प्रतिभा (1452-1519) इतालवी चित्रकार और मूर्तिकार और इंजीनियर और वैज्ञानिक और वास्तुकार leonardo.n.01 0,25

game.n.11 तुच्छ या तुच्छ व्यवहार; सबसे इतालवी पुनर्जागरण के बहुमुखी प्रतिभा (1452-1519) 0,222222222222

bet_on.v.01 जगह leonardo.n.01 इतालवी चित्रकार और मूर्तिकार और इंजीनियर और वैज्ञानिक और वास्तुकार पर एक शर्त; की सबसे बहुमुखी प्रतिभा इतालवी पुनर्जागरण (1452-1519) -1

crippled.s.01 पैर या पैर leonardo.n.01 इतालवी चित्रकार और मूर्तिकार और इंजीनियर और वैज्ञानिक और वास्तुकार में अक्षम; इतालवी पुनर्जागरण के सबसे बहुमुखी प्रतिभा (1452-1519) -1

game.s.02 इतालवी चित्रकार और मूर्तिकार और इंजीनियर और वैज्ञानिक और वास्तुकार leonardo.n.01 खतरे का सामना करने के लिए तैयार; इतालवी पुनर्जागरण (1452-1519) -1

लेकिन game.n.04 और leonardo.n.01 के बीच समानता की सबसे बहुमुखी प्रतिभा वास्तव में अजीब है। मुझे लगता है कि समानता (0.923076923077) इतनी ऊंची नहीं होनी चाहिए।

game.n.04

पशु भोजन या खेल के लिए शिकार

leonardo.n.01

इतालवी चित्रकार और मूर्तिकार और इंजीनियर और वैज्ञानिक और वास्तुकार; इतालवी पुनर्जागरण (1452-1519)

0,923076923077

की सबसे बहुमुखी प्रतिभा वहाँ मेरी अवधारणा के साथ किसी भी समस्या है?

उत्तर

8
the docs के अनुसार

, wup_similarity() विधि रिटर्न ...

... स्कोर को संकेतित कैसे समान दो शब्द होश कर रहे हैं, वर्गीकरण में दो इंद्रियों के गहराई पर आधारित है और की है कि उनके कम आम सब्सक्राइबर (सबसे विशिष्ट पूर्वजों नोड)।

... और ...

>>> from nltk.corpus import wordnet as wn 
>>> game = wn.synset('game.n.04') 
>>> leonardo = wn.synset('leonardo.n.01') 
>>> game.lowest_common_hypernyms(leonardo) 
[Synset('organism.n.01')] 
>>> organism = game.lowest_common_hypernyms(leonardo)[0] 
>>> game.shortest_path_distance(organism) 
2 
>>> leonardo.shortest_path_distance(organism) 
3 

... जिसके कारण यह सोचता है कि वे इसी तरह कर रहे हैं, हालांकि मैं मिलता है ...

>>> game.wup_similarity(leonardo) 
0.7058823529411765 

... जो किसी कारण से अलग है।


अद्यतन

मैं कुछ माप जो कि विषमताओं ('खेल', 'chess') दिखाएगा चाहते बहुत ज्यादा विषमताओं ('खेल', 'लियोनार्डो') से भी कम है

कैसे कुछ इस तरह के बारे में ...

from nltk.corpus import wordnet as wn 
from itertools import product 

def compare(word1, word2): 
    ss1 = wn.synsets(word1) 
    ss2 = wn.synsets(word2) 
    return max(s1.path_similarity(s2) for (s1, s2) in product(ss1, ss2)) 

for word1, word2 in (('game', 'leonardo'), ('game', 'chess')): 
    print "Path similarity of %-10s and %-10s is %.2f" % (word1, 
                  word2, 
                  compare(word1, word2)) 

... जो प्रिंट ...

Path similarity of game  and leonardo is 0.17 
Path similarity of game  and chess  is 0.25 
+0

स्पष्टीकरण के लिए धन्यवाद। लेकिन क्या गणना उनकी मूल/अनुमानित असमानता दिखाएगी? – qmaruf

+0

@QuaziMarufurRahman इस बात पर निर्भर करता है कि आप "असमानता" को कैसे परिभाषित करते हैं। आपको 'path_distance()' विधि के साथ बेहतर परिणाम मिल सकते हैं, लेकिन यह इस बात पर निर्भर करता है कि आप वास्तव में मापने की कोशिश कर रहे हैं। – Aya

+0

असल में मुझे कुछ माप चाहिए जो दिखाएगा कि असमानता ('गेम', 'शतरंज') असमानता ('गेम', 'लियोनार्डो') – qmaruf

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