在字符串Python中搜索like和not like关键字



我有一个列表,列出了每个实体映射到它的相似和不相似关键字的位置。例如:

实体-电池加
类似关键字-%batteri%pl%不喜欢关键词-%州际电池%|%el toro-water%|%osibatters%

现在,这个列表总共有2000个实体,每个实体平均有3-4个喜欢的关键词,只有一些没有喜欢的关键字,平均有2-3个。

这些关键字由|分隔,单个关键字中的单词之间的%表示它们不需要连续。%在开头和结尾意味着关键字可以在输入字符串中的任何位置。

我的输入字符串平均长度为8个单词,99%的时间小于10个单词,我需要了解事务中存在哪些实体。就时间复杂性而言,我如何才能有效地做到这一点。

编辑

输入字符串样本:购买batteri xx02 pl jacksonville Fl

预期输出:电池加

解释:由于like关键字存在于输入字符串中,而不存在非like关键字,因此我们可以说该实体是电池加

我将用目前正在使用的方法来回答这个问题:

创建一个反向dict,其关键字为关键字文件中的所有单词,值为的元组(如关键字,非关键字,实体名称),因此对于一个有问题的示例,它将是

{'batteri':('%batteri%pl%,'%interstate batteri%|%el toro water%|%osibatteries%','batteries plus'),
'pl': ('%batteri%pl%','%interstate batteri%|%el toro water%|%osibatteries%','batteries plus')}

现在,在空格上拆分输入字符串,将每个单词搜索到这个倒置的dict中,对于每个匹配,获取full-like关键字、full-not-like关键字,并在此基础上进行完整的regex搜索。如果存在like关键字而不存在not like,即匹配成功,则返回相应的标识。

时间复杂性:由于输入字符串几乎总是少于10个单词,因此它将有大约10个dict-get操作。之后是输入字符串集合(基于空间分割)等之间的集合交集&不像第一次成功时具有退出机制的关键字。

最新更新