为了账号安全,请及时绑定邮箱和手机立即绑定

使用 python 检查字符串中的任何单词是否出现在列表中

使用 python 检查字符串中的任何单词是否出现在列表中

天涯尽头无女友 2023-06-27 16:19:39
我有一个 pandas 数据框,其中包含一列数千条评论。我想遍历列中的每一行,检查评论是否包含我创建的单词列表中找到的任何单词,如果评论包含我的列表中的单词,我想将其标记为一个单独的列。到目前为止,这是我的代码中的内容:retirement_words_list = ['match','matching','401k','retirement','retire','rsu','rrsp']def word_checker(row):    for sentence in df['comments']:         if any(word in re.findall(r'\w+', sentence.lower()) for word in retirement_words_list):            return '401k/Retirement'        else:            return 'Other'df['topic'] = df.apply(word_checker,axis=1)    该代码将我的数据框中的每一条评论标记为“其他”,即使我已经仔细检查许多评论包含我的列表中的一个或多个单词。关于如何纠正我的代码有什么想法吗?我非常感谢你的帮助。
查看完整描述

2 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

拥有一个集合版本retirements_word_list(为了有效地包括测试)然后循环句子中的单词,检查该集合中的包含情况可能更方便,而不是相反:


retirement_words_list = ['match','matching','401k','retirement','retire','rsu','rrsp']


retirement_words_set = set(retirement_words_list)

进而


    if any(word in retirement_words_list for word in sentence.lower().split()):

            # .... etc ....

您的代码只是检查 in 中的任何单词是否retirement_words_list是句子的子字符串,但实际上您必须寻找整个单词匹配,否则将 and 包含'matching'在'retirement'列表中是没有意义的,因为'match'and'retire'已经包含在内。因此使用split- 以及我们也可以反转逻辑的原因。


注意:您可能需要进行一些进一步的更改,因为您的函数word_checker有一个名为的参数row,但它不使用该参数。可能你想做的事情是这样的:


def word_checker(sentence):

    if any(word in retirement_words_list for word in sentence.lower().split()):

        return '401k/Retirement'

    else:

        return 'Other'

和:


df['topic'] = df['comments'].apply(word_checker,axis=1)    

其中sentence是该列中每一行的内容comments。


查看完整回答
反对 回复 2023-06-27
?
FFIVE

TA贡献1797条经验 获得超6个赞

这个简化版本(没有正则表达式)不起作用吗?

if any(word in sentence.lower() for word in retirement_words_list):


查看完整回答
反对 回复 2023-06-27
  • 2 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信