我创建了一个字典,用来将各种单词带入其基本形式。
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)
给我“闪闪发光”。当我在寻找“阳光照耀的阳光”时。
对这里出什么问题有任何想法吗?
首先,您的字典是错误的方法,将其反转
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。在这种情况下,显式传递列表理解要比生成器更快。