gpt4 book ai didi

python - 如何检查数据框中的文本列是否包含可能的模式列表,从而允许错误输入?

转载 作者:行者123 更新时间:2023-12-02 08:36:33 25 4
gpt4 key购买 nike

我的数据框中有一列名为“文本”的列,其中写了很多内容。我试图验证此列中是否存在模式列表中的任何字符串(例如模式 1、模式 2、模式 3)。我希望创建另一个 bool 列,说明是否找到了这些模式。

但是,重要的是在很少出现错误输入问题时匹配模式。例如,如果在我的模式列表中有“mickey”和“mouse”,我希望它也与“m0use”和“muckey”匹配,而不仅仅是完整的正确模式字符串。

我尝试了这个,使用正则表达式库:

import regex
list_of_patterns = ['pattern1','pattern2','pattern3','pattern4']
df['contains_any_pattern'] = df['text'].apply(lambda x: regex.search(pattern=('^(' + '|'.join(list_of_patterns) + ').${e<=2:[a-zA-Z]}'),string=x,flags=re.IGNORECASE))

我后来检查了文本,发现这不起作用。有没有人有更好的主意来解决这个问题?

这是一个简短的示例:

df = pd.DataFrame({'id':[1,2,3,4,5],
'text':['my name is mickey mouse',
'my name is donkey kong',
'my name is mockey',
'my surname is m0use',
'hey, its me, mario!'
]})

list_of_patterns = ['mickey','mouse']
df['contains_pattern'] = df['text'].apply(lambda x: regex.search(pattern=r'(?i)^('+ '|'.join(list_of_patterns) +'){s<=2:[a-zA-Z]}',string=x))

这是生成的 df:

id                       text      contains_pattern
1 my name is mickey mouse None
2 my name is donkey kong None
3 my name is mockey None
4 my surname is m0use None
5 hey,its me, mario None

最佳答案

您可以使用类似的方法修复代码

df['contains_any_pattern'] = df['text'].apply(lambda x: regex.search(r'(?i)\b(?:' + '|'.join(list_of_patterns) + r'){e<=2}\b', x))

或者,如果搜索词可能包含特殊字符,请使用

pat = r'(?i)(?<!\w)(?:' + '|'.join([re.escape(p) for p in list_of_patterns]) + r'){e<=2}(?!\w)'
df['contains_any_pattern'] = df['text'].apply(lambda x: regex.search(pat, x))

该模式看起来像 (?i)\b(?:mouse|mickey){e<=2}\b现在。根据您的需要进行调整,但确保量词位于组后面

re.IGNORECASE来自re包,您可以简单地使用内联修饰符, (?i) ,启用与当前 regex 不区分大小写的匹配图书馆。

如果您需要处理数百或数千个搜索词,您可以利用 Speed up millions of regex replacements in Python 3 中描述的方法。 .

关于python - 如何检查数据框中的文本列是否包含可能的模式列表,从而允许错误输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59570950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com