将语料库中的名称部分匹配到 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 根据另一个数据框中的匹配列填充新的数据框列

遍历 pandas 数据框中的行并匹配列表中的元组并创建一个新的 df 列

在使用数字列表搜索列后返回数据框中的所有行 - Python/Pandas

如何将 3 个 Pandas 数据帧合并到第 4 个数据帧以匹配列值名称?