Создать словарь слов и синонимов

#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 уверен, что я добавлю объяснение сейчас