使用 python 检查字符串中的任何单词是否出现在列表中
Checking if any word in a string appears in a list using python
我有一个 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)
代码将我的数据框中的每条评论都标记为 'Other',尽管我已经仔细检查过很多评论都包含我列表中的一个或多个单词。关于如何更正我的代码的任何想法?非常感谢您的帮助。
这个简化版本(没有正则表达式)行不通吗?
if any(word in sentence.lower() for word in retirement_words_list):
使用一组 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 ....
您的代码只是检查 retirement_words_list
中的任何单词是否是句子的子字符串,但实际上您必须寻找 whole-word 匹配项,否则包含 'matching'
和 'retirement'
在列表中,因为 'match'
和 '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
列中每一行的内容。
我有一个 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)
代码将我的数据框中的每条评论都标记为 'Other',尽管我已经仔细检查过很多评论都包含我列表中的一个或多个单词。关于如何更正我的代码的任何想法?非常感谢您的帮助。
这个简化版本(没有正则表达式)行不通吗?
if any(word in sentence.lower() for word in retirement_words_list):
使用一组 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 ....
您的代码只是检查 retirement_words_list
中的任何单词是否是句子的子字符串,但实际上您必须寻找 whole-word 匹配项,否则包含 'matching'
和 'retirement'
在列表中,因为 'match'
和 '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
列中每一行的内容。