Как сравнить пользовательский ввод с ключами словаря?

Я пытаюсь понять, как сравнить мой ввод с ключами словаря. Я хочу распечатать совпадающие слова со словарем и их значение. Было бы неплохо, если бы кто-нибудь мог потратить некоторое время, чтобы помочь мне с моей проблемой:

dictionary = {"nice":"0.5012", "awesome":"0.5766", "thankfull":"0.5891"}

def PNV(saysomething):
    for token in nlp(saysomething):
        while True:
            if token in dictionary:
                print("the word", key, "is same as" + str(token) + 'with the value' + dictionary[value])

person Yedolin    schedule 26.12.2018    source источник


Ответы (2)


dictionary = {"nice":"0.5012", "awesome":"0.5766", "thankfull":"0.5891"}

def PNV(saysomething):
    for token in nlp(saysomething):        
       if token in dictionary:
            key = str(token)
            value = str(dictionary[token])

            print("the word", key, "is same as" + str(token) + 'with the value' + value)

ИЗМЕНИТЬ На основе комментариев OP

dictionary = {"nice":"0.5012", "awesome":"0.5766", "thankfull":"0.5891"}

def nlp(x):
    return x.split()

def PNV(saysomething):
    for token in nlp(saysomething):
        if token in dictionary:
            key = token
            value = dictionary[token]            

            print("the word '{key}' is same as '{token}' with the value {value}".format(key = key, token = token, value = value))


PNV('trying to get a nice result, this is awesome')

производит

the word 'nice' is same as 'nice' with the value 0.5012
the word 'awesome' is same as 'awesome' with the value 0.5766
person caverac    schedule 26.12.2018
comment
Спасибо за ваш быстрый ответ Caverac. К сожалению, я не получаю результат, когда я пытаюсь это сделать - person Yedolin; 26.12.2018
comment
@Yedolin Что ты получишь? - person caverac; 26.12.2018
comment
Ввожу PNV(пытаюсь получить результат) в шелле но ничего не происходит. Я импортирую NLP и spacy, если это имеет значение! - person Yedolin; 26.12.2018
comment
@Yedolin Что должна делать функция nlp? - person caverac; 26.12.2018
comment
Это разбивает предложение на отдельные токены - person Yedolin; 26.12.2018
comment
@Yedolin Я вижу, вы ничего не получаете, потому что введенная вами строка не содержит ни одного из токенов, которые вы ищете. Попробуйте что-нибудь вроде PNV('trying to get an nice result, this is awesome') - person caverac; 26.12.2018
comment
благодарю вас. Я тоже пробовал, но все равно результата нет - person Yedolin; 26.12.2018
comment
хорошо, тогда что-то не так с моей импортированной функцией. Большое спасибо! - person Yedolin; 26.12.2018

Теперь я предполагаю, что nlp() возвращает список слов, таких как строки, и что вы просто смотрите, есть ли в переданной фразе слово, для которого ваш внутренний скрипт имеет другое значение/значение. Поправьте меня, если это не так.

С предыдущими предположениями вы можете сделать следующее:

dictionary = {"nice":"0.5012", "awesome":"0.5766", "thankfull":"0.5891"}

def PNV(saysomething):
    for token in nlp(saysomething):
        if token in dictionary:
          #because token is the key I removed the dupplication in print
          print("The word", token, "for me has the following value" + dictionary[token])

text = input("Write some interessting facts: ")
PNV(text)

Однако, если вы хотите сказать, что некоторые слова/токены для вашей программы имеют некоторые эквиваленты, которые являются ключами в словаре, простого условного оператора недостаточно. Простой подход в этом конкретном случае будет состоять в том, чтобы использовать другой словарь с эквивалентами/синонимами и сначала проверить этот, чтобы получить синонимы и использовать их для печати следующим образом.

dictionary = {"nice":"0.5012", "awesome":"0.5766", "thankfull":"0.5891"}

def getSynonyms(word):
  """Takes a word and returns some synonyms that the program knows"""
  knowledge = {"fantastic":["awesome","wonderful"],
              "good": ["nice","normal"]}

  if word in knowledge: #the word is present
    return knowledge[word]
  else:
    return None

def PNV(saysomething):
    for token in saysomething.split(" "): #using split to simulate npl()
      synonyms = getSynonyms(token)
      words = [token]
      if synonyms:
        words.extend(synonyms) #words and its synonyms
      for word in words:
        if word in dictionary: 
          print("The word", token, "is same as " + word + " with the value " + dictionary[word])

PNV("Hi good day")

Очевидно, что у этого простого подхода есть некоторые недостатки, но для простого использования он подойдет.

person Iulian    schedule 26.12.2018