2017-07-11 3 views
0

J'ai une liste de chaînes:Comment trouver un synonymes dans une liste de chaînes en utilisant les synsets NLTK?

words1 = ['feds', 'move', 'to', 'require', 'cartocar', 'safety', 'communication'] 

Je veux trouver un synsets pour chacun des mots que l'aide NLTK WordNet synsets. Premièrement, j'utilise une chaîne dans ma liste. Voici mon code:

from nltk.corpus import wordnet as wn 

word = ['feds'] 

data1 = ' '.join(word) 

def getSynonyms(data1): 
    synonymList1 = [] 
    wordnetSynset1 = wn.synsets(data1) 

    for synset1 in wordnetSynset1: 
     for synWords1 in synset1.lemma_names(): 
      synonymList1.append(synWords1) 
    print synonymList1 

print "list of synonyms : ", getSynonyms(data1) 

et il fonctionne. Voici le résultat:

list of synonyms : [u'Federal', u'Fed', u'federal_official', u'Federal_Reserve_System', u'Federal_Reserve', u'Fed', u'FRS'] 

mais quand j'utilise une liste de chaînes « words1 », il ne fonctionne et la sortie est pas comme ça >> [].

quelqu'un peut-il aider? merci

+0

Essayez ceci: https://gist.github.com/alvations/a4a6e0cc24d2fd9aff86 – alvas

+0

@alvas wow qui est génial, mais je dois utiliser package NLTK pour cette Synsets – sang

+0

Obtenez les noms de lemme synset à l'aide de l'interface NLTK Wordnet, utilisez l'algo ADM pour calculer la correspondance de chaîne. BTW, il existe de nombreux autres algorithmes de correspondance de chaînes aussi. ADM est juste l'un d'entre eux. – alvas

Répondre

1

Vous devez transmettre les mots individuellement et non après les avoir joints.

from nltk.corpus import wordnet as wn 


def getSynonyms(word1): 
     synonymList1 = [] 
     for data1 in word1: 
       wordnetSynset1 = wn.synsets(data1) 
       tempList1=[] 
       for synset1 in wordnetSynset1: 
       for synWords1 in synset1.lemma_names(): 
        tempList1.append(synWords1) 
       synonymList1.append(tempList1) 
     return synonymList1 


word1 = ['feds', 'move', 'to', 'require', 'cartocar', 'safety', 'communication'] 
print getSynonyms(word1) 
+1

wow merci beaucoup monsieur. Je pensais que synset ne pouvait pas lire une liste, car j'apprends de nombreux exemples qu'une entrée toujours une chaîne de caractères, donc je le change en chaînes – sang