代码需求是,传入一句包含多个单词的话,判断这句话中是否包含了一个负面情绪的单词,若包含了,则标记“是”,否则标记“否”
原始代码
#定义负面情绪词典的位置
diswords_path = "负面情绪词典2.xlsx"
#读取词典表中的数据
diswords = pd.DataFrame(pd.read_excel(diswords_path))
# 此方法用户判断mytext中的单词是否包含负面情绪词
def dis_words(mytext):
#缓存一下这句话,用于输出
currentText = mytext
# 将mytext按照空格划分成一个单词数组
mytext = mytext.split(" ")
final_sen = []
#遍历单词数组,其中word是遍历时的当前单词
for word in mytext:
#判断当前单词是否出现在负面情绪表中
if word in diswords.values:
#存在,则标记为“是”
word = '是'
else:
#不存在,则标记为“否”
word = '否'
#将判断结果放入final_sen中
final_sen.append(word)
#结束循环
break
final_sen = " ".join(final_sen) # 将列表转化为字符串
print(currentText,"是否包含负面情绪词:", final_sen)
return final_sen
运行结果如下:
这个结果是不准确的
代码分析
这段代码存在的问题如下:
循环只会执行一次,最终执行完后,final_sen中的值为:
[否] 或者[是],这个结果是不准确的;只执行一次是因为break放在了循环体的内部,当if和else执行完毕后,会直接去执行break,就终止循环了;
代码改进
#定义负面情绪词典的位置
diswords_path = "负面情绪词典2.xlsx"
#读取词典表中的数据
diswords = pd.DataFrame(pd.read_excel(diswords_path))
# 此方法用户判断mytext中的单词是否包含负面情绪词
def dis_words(mytext):
#缓存一下这句话,用于输出
currentText = mytext
# 将mytext按照空格划分成一个单词数组
mytext = mytext.split(" ")
final_sen = []
#遍历单词数组,其中word是遍历时的当前单词
for word in mytext:
#判断当前单词是否出现在负面情绪表中
if word in diswords.values:
#存在,则标记为“是”
word = '是'
#将判断结果放入final_sen中
final_sen.append(word)
#结束循环
break
else:
#不存在,则标记为“否”
word = '否'
# 判断是否已经把 “否”放入了final_sen中
if not word in final_sen:
final_sen.append(word)
final_sen = " ".join(final_sen) # 将列表转化为字符串
print(currentText,"是否包含负面情绪词:", final_sen)
return final_sen
运行结果如下:
这段代码看起来已经满足需求了,但是代码量比较冗余,而且运行结果中包含了我们不需要的结果,可以接着改进
#定义负面情绪词典的位置
diswords_path = "负面情绪词典2.xlsx"
#读取词典表中的数据
diswords = pd.DataFrame(pd.read_excel(diswords_path))
# 此方法用户判断mytext中的单词是否包含负面情绪词
def dis_words(mytext):
#缓存一下这句话,用于输出
currentText = mytext
# 将mytext按照空格划分成一个单词数组
mytext = mytext.split(" ")
final_sen = []
#遍历单词数组,其中word是遍历时的当前单词
for word in mytext:
#判断当前单词是否出现在负面情绪表中
if word in diswords.values:
#存在,则标记为“是”
word = '是'
#将判断结果放入final_sen中
final_sen.append(word)
#结束循环
break
if len(final_sen) == 0:
final_sen.append('否')
final_sen = " ".join(final_sen) # 将列表转化为字符串
print(currentText,"是否包含负面情绪词:", final_sen)
return final_sen
最终执行结果如下:
这个结果就已经满足需要了