2011-04-04 12 views
13

का उपयोग करके समानार्थी, परिभाषाएं और उदाहरण वाक्य खोजने के लिए मुझे एक शब्द के साथ एक इनपुट टेक्स्ट फ़ाइल लेने की आवश्यकता है। इसके बाद मुझे wordnet का उपयोग करके शब्द के synset के lemma_names, परिभाषा और उदाहरण खोजने की आवश्यकता है। मैं पुस्तक के माध्यम से गया हूं: "इस दिशा में मेरी सहायता के लिए" एनएलटीके 2.0 कुकबुक के साथ पायथन टेक्स्ट प्रोसेसिंग "और" एनएलटीके का उपयोग करके प्राकृतिक भाषा प्रसंस्करण "भी। हालांकि मुझे समझ में आया है कि यह टर्मिनल का उपयोग करके कैसे किया जा सकता है, मैं टेक्स्ट एडिटर का उपयोग करके ऐसा करने में सक्षम नहीं हूं।वर्डनेट

उदाहरण के लिए, यदि इनपुट पाठ शब्द "हैरत में डाला हुआ" है, उत्पादन इस फैशन में होने की जरूरत है:

हैरत में डाला हुआ (क्रिया) हैरत में डालना, संदेह, पर कटोरा - विस्मय के साथ काबू पाने; "यह दिमाग को चकमा देता है!" (विशेषण) डंबफॉल्ड, डमफॉल्ड, फ्लैबबर्गस्टेड, बेवकूफ, थंडरस्ट्रक, डंबस्ट्रुक, डंबस्ट्रिकन - जैसे कि आश्चर्य और आश्चर्य के साथ गूंगा मारा; "दुर्घटना को देखने से इनकार करने से पुलिस का एक चक्र डूब गया था"; "flabbergasted aldermen भाषणहीन थे"; "उनके पदोन्नति की खबरों से आंधी थी"

synsets, परिभाषाएं और उदाहरण वाक्यों को WordNet से सीधे प्राप्त किया जाता है!

मैं कोड का निम्न भाग:


from __future__ import division 
import nltk 
from nltk.corpus import wordnet as wn 


tokenizer = nltk.data.load('tokenizers/punkt/english.pickle') 
fp = open("inpsyn.txt") 
data = fp.read() 

#to tokenize input text into sentences 

print '\n-----\n'.join(tokenizer.tokenize(data))# splits text into sentences 

#to tokenize the tokenized sentences into words 

tokens = nltk.wordpunct_tokenize(data) 
text = nltk.Text(tokens) 
words = [w.lower() for w in text] 
print words  #to print the tokens 

for a in words: 
    print a 

syns = wn.synsets(a) 
print "synsets:", syns 

for s in syns: 
    for l in s.lemmas: 
     print l.name 
    print s.definition 
    print s.examples 

मैं निम्नलिखित उत्पादन:


flabbergasted 

['flabbergasted'] 
flabbergasted 
synsets: [Synset('flabbergast.v.01'), Synset('dumbfounded.s.01')] 
flabbergast 
boggle 
bowl_over 
overcome with amazement 
['This boggles the mind!'] 
dumbfounded 
dumfounded 
flabbergasted 
stupefied 
thunderstruck 
dumbstruck 
dumbstricken 
as if struck dumb with astonishment and surprise 
['a circle of policement stood dumbfounded by her denial of having seen the accident', 'the flabbergasted aldermen were speechless', 'was thunderstruck by the news of his promotion'] 

वहाँ लेम्मा नामों में से समूह के साथ भाषण का भाग प्राप्त करने के लिए एक तरीका है?

+1

तुम वापस में करने के लिए हां, तो आप एंड्री के स्वीकार करना चाहिए लॉग इन करते हैं जवाब, esp। चूंकि उन्होंने न केवल उत्तर दिया, बल्कि आपकी मदद करने के लिए आपकी टिप्पणियों का भी जवाब दिया। –

उत्तर

22
def synset(word): 
    wn.synsets(word) 

कुछ भी वापस नहीं करता है तो डिफ़ॉल्ट रूप से आप None

मिल आप

def synset(word): 
    return wn.synsets(word) 

निकाला जा रहा है लेम्मा नाम लिखना चाहिए:

from nltk.corpus import wordnet 
syns = wordnet.synsets('car') 
syns[0].lemmas[0].name 
>>> 'car' 
[s.lemmas[0].name for s in syns] 
>>> ['car', 'car', 'car', 'car', 'cable_car'] 


[l.name for s in syns for l in s.lemmas] 
>>>['car', 'auto', 'automobile', 'machine', 'motorcar', 'car', 'railcar', 'railway_car', 'railroad_car', 'car', 'gondola', 'car', 'elevator_car', 'cable_car', 'car'] 
+0

आपको बहुत बहुत धन्यवाद !! :) क्या एक मूर्ख गलती है! – aks

+0

क्या कोई तरीका है जिसमें मैं केवल synset से शब्द निकाल सकता हूं और इसे पैरामीटर के रूप में पास कर सकता हूं? उदाहरण के लिए flabbergasted शब्द के लिए, आपको Synset ('flabbergast.v.01') और सिन्ससेट ('dumbfounded.s.01') मिलता है। मैं lemma_name फ़ंक्शन पर पैरामीटर के रूप में कैसे पास कर सकता हूं? – aks

+1

nltk.corpus आयात से Wordnet SYNs = wordnet.synsets ('कार') >>> [ 'कार' [s.lemmas [0] SYNs में रों लिए .name], 'कार', ' कार ',' कार ',' केबल_car '] – Andrey

5

यहाँ मैं एक मॉड्यूल बनाया है जो आसानी से उपयोग किया जा सकता है (आयातित), और एक स्ट्रिंग को पारित किया जा रहा है, सभी लेम्मा शब्दों को वापस कर देगा स्ट्रिंग का

मॉड्यूल:

#!/usr/bin/python2.7 
''' pass a string to this funciton (eg 'car') and it will give you a list of 
words which is related to cat, called lemma of CAT. ''' 
from nltk.corpus import wordnet as wn 
import sys 
#print all the synset element of an element 
def lemmalist(str): 
    syn_set = [] 
    for synset in wn.synsets(str): 
     for item in synset.lemma_names: 
      syn_set.append(item) 
    return syn_set 

उपयोग:

नोट: मॉड्यूल का नाम "लेम्मा आयात lemmalist से" इसलिए lemma.py है

>>> from lemma import lemmalist 
>>> lemmalist('car') 
['car', 'auto', 'automobile', 'machine', 'motorcar', 'car', 'railcar', 'railway_car', 'railroad_car', 'car', 'gondola', 'car', 'elevator_car', 'cable_car', 'car'] 

चीयर्स!

+0

त्रुटि मिली 'कोई आयात त्रुटि नहीं: कोई मॉड्यूल नाम नहीं है lmma ' –

0
synonyms = [] 
for syn in wordnet.synsets("car"): 
    for l in syn.lemmas(): 
     synonyms.append(l.name()) 
print synonyms 
+0

कृपया अधिक जानकारी शामिल करने के लिए अपना उत्तर संपादित करें। कोड-केवल और "इसे आज़माएं" उत्तर निराश हैं क्योंकि उनमें कोई खोज योग्य सामग्री नहीं है, और यह समझाएं कि किसी को "इसे आजमाएं" क्यों चाहिए। – BrokenBinary

0

NLTK 3.0 में, lemma_names विधि के लिए विशेषता से बदल दिया गया है।तो अगर आप कह कोई त्रुटि मिलती है:

TypeError: 'method' object is not iterable 

आप का उपयोग कर इसे ठीक कर सकते हैं:

>>> from nltk.corpus import wordnet as wn 
>>> [item for sysnet in wn.synsets('car') for item in sysnet.lemma_names()] 

हो जाएगा ताकि उत्पादन:

>>> [ 
     'car', 'auto', 'automobile', 'machine', 'motorcar', 'car', 
     'railcar', 'railway_car', 'railroad_car', 'car', 'gondola', 
     'car', 'elevator_car', 'cable_car', 'car' 
    ] 
संबंधित मुद्दे