我有一个关键字列表,这些关键字存储在电子表格中,然后通过单列“关键字”转换为数据框。我正在使用此数据框检查存储在其中的关键字是否存在于其他数据框(“文本数据框”)中的文本中。
1) keywords dataframe
keywords
1 ice cream
2 ice cone
3 truck
4 Ice cream truck
2) text dataframe
text
1 ice cream truck just arrived
2 can I have some ice?
3 Ice quickly melts
我目前拥有的功能是检查文本数据框中是否仅存在特定的关键字/短语
def check_keyword():
keyword = text_dataframe[(text_dataframe.text.apply(lambda x: any(term in x for term in keywords_dataframe['keywords'])))]
if len(keyword) == 0:
return pd.DataFrame(columns=['c1', 'c2', 'c3'], index=[])
else:
return keyword
但是,问题是check_keyword函数还会标记包含不想标记的单词的句子。例如,代替仅标记确切的短语(“冰淇淋”,“冰锥”等),它还标记单词“ ice”和“ Ice”。解决此问题的最佳方法是什么?
答案 0 :(得分:1)
使用带有Series.str.extract
的单词边界作为第一个匹配关键字:
pat = '|'.join(r"\b{}\b".format(x) for x in keywords_dataframe['keywords'])
text_dataframe['flag'] = (text_dataframe['text'].str.extract('('+ pat + ')', expand=False)
.fillna('no match'))
print (text_dataframe)
text flag
1 ice cream truck just arrived ice cream
2 can I have some ice? no match
3 Ice quickly melts no match