Ich versuche, Synsets von Strings innerhalb einer Liste zu finden. hier ist mein Code:Wie bekomme ich einen Synsets für nur einen String in einer String-Liste?
from nltk.corpus import wordnet as wn
from nltk import pos_tag
word1 = ['orange','man','bench']
def getSynonyms(word1):
synonymList1 = []
for data1 in word1:
wordnetSynset1 = wn.synsets(data1)
tempList1=[]
for synset1 in wordnetSynset1:
synLemmas = synset1.lemma_names()
for i in xrange(len(synLemmas)):
word = synLemmas[i].replace('_',' ')
if pos_tag(word.split()) not in tempList1:
tempList1.append(pos_tag(word.split()))
synonymList1.append(tempList1)
return synonymList1
print getSynonyms(word1)
print
und hier ist das Ergebnis:
[[[(u'orange', 'NN')], [(u'orangeness', 'NN')], [(u'orange', 'NN'),
(u'tree', 'NN')], [(u'Orange', 'NN')], [(u'Orange', 'NNP'), (u'River',
'NNP')], [(u'orangish', 'JJ')]], [[(u'man', 'NN')], [(u'adult', 'NN'),
(u'male', 'NN')], [(u'serviceman', 'NN')], [(u'military', 'JJ'), (u'man',
'NN')], [(u'military', 'JJ'), (u'personnel', 'NNS')], [(u'homo', 'NN')],
[(u'human', 'JJ'), (u'being', 'VBG')], [(u'human', 'NN')], [(u'valet',
'NN')], [(u'valet', 'NN'), (u'de', 'IN'), (u'chambre', 'NN')],
[(u'gentleman', 'NN')], [(u"gentleman's", 'NN'), (u'gentleman', 'NN')],
[(u'Man', 'NN')], [(u'Isle', 'NNP'), (u'of', 'IN'), (u'Man', 'NNP')],
[(u'piece', 'NN')], [(u'world', 'NN')], [(u'human', 'JJ'), (u'race', 'NN')],
[(u'humanity', 'NN')], [(u'humankind', 'NN')], [(u'human', 'JJ'),
(u'beings', 'NNS')], [(u'humans', 'NNS')], [(u'mankind', 'NN')]],
[[(u'bench', 'NN')], [(u'terrace', 'NN')], [(u'judiciary', 'NN')],
[(u'workbench', 'NN')], [(u'work', 'NN'), (u'bench', 'NN')], [(u'Bench',
'NN')]]]
aber was, wenn ich will nur ein Synsets einer Zeichenfolge bekommen?
für Beispiele, wenn ich ein Synsets für 'orange'
bekommen, werde ich nur und Druck erhalten:
[(u'orange', 'NN')], [(u'orangeness', 'NN')], [(u'orange', 'NN'),
(u'tree', 'NN')], [(u'Orange', 'NN')], [(u'Orange', 'NNP'), (u'River',
'NNP')], [(u'orangish', 'JJ')]
wenn ich ein Synsets für 'man'
bekommen, werde ich nur bekommen und Druck:
[(u'man', 'NN')], [(u'adult', 'NN'),
(u'male', 'NN')], [(u'serviceman', 'NN')], [(u'military', 'JJ'), (u'man',
'NN')], [(u'military', 'JJ'), (u'personnel', 'NNS')], [(u'homo', 'NN')],
[(u'human', 'JJ'), (u'being', 'VBG')], [(u'human', 'NN')], [(u'valet',
'NN')], [(u'valet', 'NN'), (u'de', 'IN'), (u'chambre', 'NN')],
[(u'gentleman', 'NN')], [(u"gentleman's", 'NN'), (u'gentleman', 'NN')],
[(u'Man', 'NN')], [(u'Isle', 'NNP'), (u'of', 'IN'), (u'Man', 'NNP')],
[(u'piece', 'NN')], [(u'world', 'NN')], [(u'human', 'JJ'), (u'race', 'NN')],
[(u'humanity', 'NN')], [(u'humankind', 'NN')], [(u'human', 'JJ'),
(u'beings', 'NNS')], [(u'humans', 'NNS')], [(u'mankind', 'NN')]
und so für 'bench'
Ich habe versucht print getSynonyms(word1[0])
, aber das Ergebnis ist wirklich seltsam.
Jeder kann helfen? Danke
wow Dank, Herr, Es klappt. Wo ist die Out-Schleife in meiner Funktion, die ich entfernen muss? – sang
Überprüfen Sie die Bearbeitung - es entfernt im Grunde genommen 'für Daten1 in Wort1:' und korrigiert die Einzüge. Dann sollten Sie in der Lage sein, eine einzige Zeichenfolge zu übergeben 'getSynonyms (" orange ")' –
danke Sir für die zusätzlichen Informationen. aber mein Programm ist es, eine Synsets für eine Liste von Strings zu finden, die zuerst in Token umgewandelt wurden. und als nächstes wird es sein, jeden Strings von 'word1' und' word2' jeweils wie 'i1 -> i2',' i1 -> j2', 'i2 -> j1' und' i2 -> j2' zu vergleichen, um zu finden, ob Es gibt ähnliche Synsets, dann gibt es 'True' zurück. aber noch einmal, vielen Dank, mein Herr – sang