排除包含以下单词的列表中存在的值

问题描述

我有一个商家类别列表:

[
  'General Contractors–Residential and Commercial','Air Conditioning,Heating and Plumbing Contractors','Electrical Contractors',....,'Insulation,Masonry,Plastering,Stonework and Tile Setting Contractors'
] 

如果 df['merchant_category'].str.contains() 任何此类商家类别,我想从我的数据框中排除商家。

但是,我不能保证我的数据框中的值与商家类别列表中的名称一样长。可能是我的数据框值只是 air conditioning

因此,df = df[~df['merchant_category'].isin(list_of_merchant_category)] 将不起作用。

解决方法

如果您可以收集一长串正面示例(您肯定要保留的类别)和负面示例(您肯定要排除的类别),您可以尝试训练一个文本分类器那个数据。

然后它就可以查看新文本,并根据它们与示例的相似性,合理猜测您是否希望将它们包含或排除。

因此,当您使用 Python 工作时,我建议您查找使用 Scikit-Learn 的“二进制文本分类”在线教程和示例。

虽然有多种可能的方法来表示/矢量化您的文本,然后学习从这些矢量进行分类,但您可能会成功使用一些在介绍示例中常用的非常简单的方法。例如,您可以使用词袋和/或字符-n-gram(词片段)表示来表示您的文本类别。然后尝试 NaiveBayes 或 SVC 分类器(以及其他,如果您需要试验可能的结果)。

其中一些甚至会报告对其预测的某种“信心” - 因此您可能会接受强预测,但突出显示弱预测以供人工审核。当人类随后查看一个明确规定的新“类别”字符串时——因为它被突出显示为不确定的预测,或被视为错误,然后您可以通过以下方式改进整个系统:

  • 将其添加到根据精确字面比较自动包含/排除的已知集合中
  • 重新训练系统,以便它有更好的机会让其他新的类似字符串正确

(我知道这是一个非常高级的答案,但是一旦您根据其他介绍性教程进行了一些尝试,并且遇到数据问题,您就可以在此处提出更具体的问题 SO解决任何具体问题。)