将语料库中的名称部分匹配到 Pandas 数据框中另一列中的名称
Posted
技术标签:
【中文标题】将语料库中的名称部分匹配到 Pandas 数据框中另一列中的名称【英文标题】:Partial Matching of name in a corpus to names in another column in a Pandas dataframe 【发布时间】:2021-12-16 16:31:19 【问题描述】:我有一个这样的数据框
Name Corpus
0 James Bond Junior Bristleback Agent James Bond went missing
1 Batman Bin Superman Superman saves the day again
2 Thor S/O Odin Loki was last seen in March 2020
我希望得到这个输出。
Name Corpus Value
0 James Bond Junior Bristleback Agent James Bond went missing True
1 Batman Bin Superman Superman saves the day again True
2 Thor S/O Odin Loki was last seen in March 2020 False
我之前尝试过正则表达式,但似乎无法获得所需的输出。反正有没有用正则表达式或其他一些库/包来实现这一点?
【问题讨论】:
你只是想判断两列之间是否有共同词? 例如,如果 James Bond 这个词与 name 列中的第一行(即 James Bond Junior Bristleback)有部分匹配,它应该返回一个 True 值 应该像“这是邦德詹姆斯”这样的句子匹配吗? “詹姆士债券”呢? 即使在“他与詹姆斯建立了联系”的上下文中? (是的,文本分析很棘手) 相信我,我曾经在邮件服务器上设置了一个包含特定字符集的过滤器,不太可能出现在合法电子邮件中,我意识到它阻止接收具有此特定字符的 PDF 文件以十六进制表示的字符串。总是期待文本的意外;) 【参考方案1】:不确定这是否完全符合您的需求。它本质上是将每个句子转换为一组单词,并检查是否有任何重叠:
df.Name.str.split().apply(set) & df.Corpus.str.split().apply(set)
输出:
0 True
1 True
2 False
dtype: bool
【讨论】:
我会有类似的方法 +1 ;) 是的,这是我的第一直觉,但我感觉这可能不是 OP 想要的。这有点hacky,tbh:D 那么 OP 应该使条件更明确;) 技术上,没有任何条件df['Value'] = [True, True, False]
是有效的。我认为您的解决方案非常公平:p以上是关于将语料库中的名称部分匹配到 Pandas 数据框中另一列中的名称的主要内容,如果未能解决你的问题,请参考以下文章
python将多个excel中的所有工作表附加到pandas数据框中的有效方法
遍历 pandas 数据框中的行并匹配列表中的元组并创建一个新的 df 列