我有两个数据帧-一个包含自由流动的文本描述,另一个是主字典。我试图检查主词典中的单词是否以任何格式出现在文本描述中-例如,如果主关键字是123456789,它可以作为123456789或123456789出现在用户文本中。关键字既可以是数字,也可以是字母数字
我曾尝试删除文本描述中的空格,并在函数中使用进行检查,但这种方法也匹配噪音。例如,它也将匹配B123456789KLX。我只想在整个关键字被分割并作为多个单词给出,而不是在不同的单词之间进行匹配
我现在有:
def matcher(x,word_dict):
match=""
for i in list(dict.fromkeys(word_dict)):
if i.replace(" ", "").lower() in x.replace(" ", "").lower():
if(match==""):
match=i
else:
match=match+"_"+i
return match
import pandas as pd
df = pd.DataFrame({'ID' : ['1', '2', '3', '4','5'],
'Text' : ['sample 123 45 678 text','sample as123456 text','sample As123 456','sample bas123456 text','sample bas123 456ts text']},
columns = ['ID','Text'])
master_dict= pd.DataFrame({'Keyword' : ['12345678','as123456']},
columns = ['Keyword'])
df['Match']=df['Text'].apply(lambda x: matcher(x,master_dict.Keyword))
Expected Output
ID Text Match
0 1 sample 123 45 678 text 12345678
1 2 sample as123456 text as123456
2 3 sample As123 456 as123456
3 4 sample bas123456 text NA
4 5 sample bas123 456ts text NA
任何线索都会有帮助。提前谢谢
如果该字符串是另一个字符串的一部分,则使用in函数进行检查将得到true,我认为使用:
在处理空格后,将产生您想要的结果,因此如果结果与关键字不完全相等,则应返回False
让我知道我是否正确理解了你的要求,以及它是否有帮助
您可以使用myprevious solution的熊猫改编:
模式是
见regex demo。基本上,它是一个
\b(?:keyword1|keyword2|...|keywordN)\b
正则表达式,每个字符之间都有[\W_]*
(匹配任何零个或多个非字母数字字符)。由于\b
是单词边界,因此关键字仅作为整个单词匹配。它将适用于您的关键字,因为您确认它们是数字或字母数字演示输出:
相关问题 更多 >
编程相关推荐