#python-3.x #dictionary #wordnet
#python-3.x #словарь #wordnet
Вопрос:
Я новичок в Python, и у меня есть словарь слов, как показано ниже:
thisdict ={ "Animal", "Metal", "Car"}
И я получаю их наборы, как показано ниже:
syns = {w : [] for w in thisdict}
for k, v in syns.items():
for synset in wordnet.synsets(k):
for lemma in synset.lemmas():
v.append(lemma.name())
print(syns)
На данный момент вывод syn для Animal является:
{'Animal': ['animal']}
{'Animal': ['animal', 'animate_being']}
{'Animal': ['animal', 'animate_being', 'beast']}
{'Animal': ['animal', 'animate_being', 'beast', 'brute']}
{'Animal': ['animal', 'animate_being', 'beast', 'brute', 'creature']}
{'Animal': ['animal', 'animate_being', 'beast', 'brute', 'creature', 'fauna']}
{'Animal': ['animal', 'animate_being', 'beast', 'brute', 'creature', 'fauna', 'animal']}
{'Animal': ['animal', 'animate_being', 'beast', 'brute', 'creature', 'fauna', 'animal', 'carnal']}
{'Animal': ['animal', 'animate_being', 'beast', 'brute', 'creature', 'fauna', 'animal', 'carnal', 'fleshly']}
{'Animal': ['animal', 'animate_being', 'beast', 'brute', 'creature', 'fauna', 'animal', 'carnal', 'fleshly', 'sensual']}
Мой вопрос в том, есть ли способ создать словарь, в котором каждая строка содержит слово и его синоним, например:
Animal: 'animal', 'animate_being', 'beast', 'brute', 'creature', 'fauna', 'animal', 'carnal', 'fleshly', 'sensual'
Cat: ...
Редактировать
Благодаря DannyMoshe я добавил ключ if not.lower() == lemma.name (): перед добавлением и теперь имеем следующий вывод:
['animate_being']
['animate_being', 'beast']
['animate_being', 'beast', 'brute']
['animate_being', 'beast', 'brute', 'creature']
['animate_being', 'beast', 'brute', 'creature', 'fauna']
['animate_being', 'beast', 'brute', 'creature', 'fauna', 'carnal']
['animate_being', 'beast', 'brute', 'creature', 'fauna', 'carnal', 'fleshly']
['animate_being', 'beast', 'brute', 'creature', 'fauna', 'carnal', 'fleshly', 'sensual']
Есть ли способ выбрать последнюю строку [‘animate_being’, ‘beast’, ‘brute’, ‘creature’, ‘fauna’, ‘carnal’, ‘fleshly’, ‘sensual’] и сопоставить ее с Animal в этом указателе?
Комментарии:
1. Разве это не то, что вы уже создали? Или я неправильно понимаю, чего вы хотите достичь.
2. Я пытаюсь создать список только синонимов, поэтому animate_being, beast и т.д. Вместо {‘Animal’: [‘animal’, ‘animate_being’, ‘beast’, ‘brute’, ‘creature’, ‘fauna’, ‘animal’, ‘carnal’, ‘fleshly’, ‘sensual’]}. Идея в том, что я хочу создать словарь (или даже фрейм данных), где в одном столбце содержится список слов, а в следующем столбце синонимы каждого слова отображаются по строке по горизонтали, если это имеет смысл
3. Итак, в приведенном вами примере вы хотите удалить animal из списка?
4. Да, и сохраните только последнюю строку, содержащую все синонимы, которые я хочу сопоставить с Animal в этом документе.
5. Итак, прежде чем добавлять, просто добавьте оператор if:
if not k.lower() == lema.name(): v.append(lemma.name())
. Я думаю, это должно дать вам желаемый результат..
Ответ №1:
Я думаю, что это полный ответ, который вы ищете:
syns = {w : [] for w in thisdict}
for k, v in syns.items():
for synset in wordnet.synsets(k):
for lemma in synset.lemmas():
if not k.lower() == lemma.name():
syns[k].append(lemma.name())
print(syns['Animal'])
или, если вы просто хотите синонимы в виде строки:
print ' '.join(syns['Animal'])
Ответ №2:
Что происходит в вашем коде, так это то, что вы печатаете sysn
после добавления каждого элемента, потому что ваша инструкция print находится внутри всех циклов for, что приводит к печати sysn
при каждом добавлении элемента.
Чтобы получить результат, какой вам нужен, оператор print должен находиться вне всех циклов, чтобы оператор print печатался после завершения добавления элементов
thisdict = {"Animal","Metal","Car"}
syns = {w : [] for w in thisdict}
for k, v in syns.items():
for synset in wordnet.synsets(k):
for lemma in synset.lemmas():
v.append(lemma.name())
print(syns)
Комментарии:
1. Здравствуйте, добро пожаловать в SO, можете ли вы дать краткое описание того, как ваш ответ должен помочь OP?
2. @JamesWong-Переустановите Monica уверен, что я добавлю объяснение сейчас