2014-07-09 9 views
5

क्या पाइथन 2.7 में NLTK का उपयोग करके शब्द प्राप्त करने के लिए कोई तरीका नहीं है और अतिरिक्त प्रारूपण नहीं है जिसमें "synset" और कोष्ठक और "n.01" आदि शामिल हैं?पायथन एनएलटीके का उपयोग करके वर्डनेट सिंकसेट में केवल शब्द को कैसे मुद्रित किया जाए?

उदाहरण के लिए अगर मैं

 wn.synsets('dog') 

मेरे परिणाम कैसे दिखते हैं:

[Synset('dog.n.01'), Synset('frump.n.01'), Synset('dog.n.03'), Synset('cad.n.01'), Synset('frank.n.02'), Synset('pawl.n.01'), Synset('andiron.n.01'), Synset('chase.v.01')] 

मैं कैसे बजाय इस प्रकार की सूची प्राप्त कर सकते हैं?

dog 
frump 
cad 
frank 
pawl 
andiron 
chase 

वहाँ NLTK का उपयोग कर ऐसा करते हैं या मैं regular expressions उपयोग करने के लिए करने के लिए एक तरीका है? क्या मैं एक पाइथन लिपि के भीतर regular expressions का उपयोग कर सकता हूं?

+0

प्रति नियम के रूप में '" synset "और कोष्ठक और" n.01 "' 'frank' और' chase' का हिस्सा नहीं होना चाहिए शामिल वांछित आउटपुट? – Braj

+0

प्रश्न से असंबंधित है लेकिन 'फ्रैंक' 'फ्रैंकफर्टर' के लिए समानार्थी/लघुरूप है जो 'हॉट डॉग' या 'कुत्ते' का समानार्थी है। इसी प्रकार 'कुत्ते' को क्रिया का अर्थ है 'पीछा करना'। – aelfric5578

+0

मैं सूक्ष्म रूप से विडंबनात्मक रंगों को पूरा करने के लिए एक बेहद विडंबनापूर्ण विफलता देखता हूं ... – JonathanHayward

उत्तर

3

यदि आप नियमित अभिव्यक्तियों के बिना ऐसा करना चाहते हैं, तो आप एक सूची समझ का उपयोग कर सकते हैं।

[synset.name.split('.')[0] for synset in wn.synsets('dog') ] 

आप यहां क्या कर रहे हैं यह कह रहा है कि प्रत्येक synset अवधि के पहले पहले शब्द को वापस कर देता है।

+0

नाम के बजाय नाम() का उपयोग करना सुनिश्चित करें, एनएलटीके ने इस समारोह को थोड़ा बदल दिया है। – frogbandit

3

इस प्रयास करें:

for synset in wn.synsets('dog'): 
    print synset.lemmas[0].name 

तुम कुत्ते के लिए प्रत्येक synset से अधिक पुनरावृति करना चाहते हैं, और फिर synset की headword प्रिंट आउट। ध्यान रखें कि कई शब्दों के एक ही synset से संलग्न कर सकता रखें, ताकि आप कुत्ते के लिए सभी synsets के साथ जुड़े सभी शब्द प्राप्त करना चाहते हैं, तो आप कर सकता है:

for synset in wn.synsets('dog'): 
    for lemma in synset.lemmas: 
     print lemma.name 
+0

अलास, पहली बार फिसल गया 'examplemethod' ऑब्जेक्ट सबस्क्रिप्ट करने योग्य नहीं है 'और दूसरा स्निपेट' टाइप एरर: 'instancemethod' ऑब्जेक्ट फेंकने योग्य नहीं है 'एनएलटीके 3.0 – duhaime

+2

@duhaime के साथ पहले गुण क्या तरीके बन गए थे। आपको 'synset.lemmas() [0] .name() ' – rlms

+0

करने के लिए बहुत कुछ करने की आवश्यकता है! – duhaime

1

लेम्मा नाम का उपयोग करना काम हो सकता है लेकिन वहाँ है एक Synset वस्तु के लिए synset नाम के लिए विहित चर, कोशिश:

>>> from nltk.corpus import wordnet as wn 
>>> wn.synset('dog.n.1') 
Synset('dog.n.01') 
>>> wn.synset('dog.n.1').name 
'dog.n.01' 
>>> wn.synset('dog.n.1').name.partition('.')[0] 
'dog' 
>>> for ss in wn.synsets('dog'): 
...  print ss.name.partition('.')[0] 
... 
dog 
frump 
dog 
cad 
frank 
pawl 
andiron 
chase 
+0

क्या आपको पता है कि एनएलटीके 3.0 में एक समान विधि उपलब्ध है या नहीं? मुझे विभाजन रेखा '' फ़ंक्शन 'ऑब्जेक्ट चलाने में त्रुटि हो रही है, कोई विशेषता नहीं है' विभाजन ' – duhaime

+3

@duhaime,' wn.synset ('dog.n.1') का उपयोग करें। नाम() 'क्योंकि एनएलटीके ने सिन्सेट गुणों को बदल दिया इसके बजाय कार्यों को पाने के लिए। https://github.com/alvations/pywsd/issues/6 – alvas

+0

उत्कृष्ट देखें! यह काफी मदद करता है - धन्यवाद! – duhaime

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