使用字典替换句子中的单词

use*_*796 2 python

我创建了一个字典,用来将各种单词带入其基本形式。

dictionary = {'sunny': 'sun', 'banking': 'bank'}

def stemmingWords(sentence, dictionary):
    for word in sentence.split():
        temp = []
        if word in dictionary:
            word = dictionary[word]
            temp.append(word)
    sentence = ' '.join(temp)
    return(sentence)
Run Code Online (Sandbox Code Playgroud)

现在,如果打印单独的单词,它似乎可以工作。但是,当我插入一个完整的句子并想要此句子的更新版本时,似乎出现了问题。例如,如果我这样做:

sentence = "the sun us shining"
new_sentence = stemmingWords(sentence, dictionary)
print(new_sentence)
Run Code Online (Sandbox Code Playgroud)

给我“闪闪发光”。当我在寻找“阳光照耀的阳光”时。

对这里出什么问题有任何想法吗?

Jea*_*bre 5

首先,您的字典是错误的方法,将其反转

dictionary = {'sunny': 'sun', 'banking': 'bank'}
Run Code Online (Sandbox Code Playgroud)

一种避免重复输入的简单方法是:

dictionary = {v:k for k,v in dictionary.items()}
Run Code Online (Sandbox Code Playgroud)

请注意,如果多个单词与同一个单词匹配,那么还原字典将不起作用,您必须首先解决歧义:因此,手动进行:

dictionary = {'sun', 'sunny': , 'sunn' : 'sunny', 'bank': 'banking'}
Run Code Online (Sandbox Code Playgroud)

然后使用列表推导和get访问权(如果不在词典中)返回原始值,从而拆分并重建字符串

def stemmingWords(sentence,dictionary):
    return " ".join([dictionary.get(w,w) for w in sentence.split()])

print(stemmingWords("the sun is shining",dictionary))
Run Code Online (Sandbox Code Playgroud)

结果:

the sunny is shining
Run Code Online (Sandbox Code Playgroud)

([])使用时请注意join。在这种情况下,显式传递列表理解要比生成器更快。