【发布时间】:2021-09-16 07:10:00
【问题描述】:
我正在尝试确定“McDonald”一词是否在单元格中。但是,我希望忽略“McDonald”之前的单词有一个像“Kevin McDonald”这样的第一个大写字母的情况。有什么建议可以通过 pandas 数据框中的正则表达式来解决吗?
data = {'text':["Kevin McDonald has bought a burger.",
"The best burger in McDonald is cheeze buger."]}
df = pd.DataFrame(data)
long_list = ['McDonald', 'Five Guys']
# matching any of the words
pattern = r'\b{}\b'.format('|'.join(long_list))
df['count'] = df.text.str.count(pattern)
text
0 Kevin McDonald has bought a burger.
1 The best burger in McDonald is cheeze buger.
预期输出:
text count
0 Kevin McDonald has bought a burger. 0
1 The best burger in McDonald is cheeze buger. 1
【问题讨论】:
-
您可以找到此特定模式的正则表达式,但如果您想区分人名与其他专有名称,请使用更合适的名称:使用单词/标记列表,或者更好,加载一个命名实体识别器(NER)
-
您的意思是应用 NER 来删除类似“Kevin McDonald”的细胞?唔。这是一个非常有趣的想法。 @alexis
-
或多或少。你没有解释你试图做出这种区分的原因,但无论你的目标是什么,在不久的将来你可能需要更多的规则,并且有比整句正则表达式更好的方法......