【问题标题】:Partial Matching of name in a corpus to names in another column in a Pandas dataframe将语料库中的名称部分匹配到 Pandas 数据框中另一列中的名称
【发布时间】: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 文件以十六进制表示的字符串。总是期待文本的意外;)

标签: python-3.x regex pandas dataframe nlp


【解决方案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
猜你喜欢
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 2021-11-10
  • 2018-02-03
相关资源
最近更新 更多