在字符串Python中搜索like和not like keywords

时间:2017-10-26 02:47:06

标签: python string

我有一个列表,其中列出了每个实体都有一些喜欢而不是映射到它的关键字。例如:

实体 -batteries plus
喜欢关键字 - %batteri%pl% 不喜欢的关键字 - %interstate batteri%|%el toro water%|%osibatteries%

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

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

我的输入字符串平均长度为8个字,99个字数少于10个字,我需要知道事务中存在哪些实体。如何在时间复杂度方面有效地做到这一点。

修改

输入字符串示例:购买batteri xx02 pl jacksonville Fl

预期输出:电池加

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

1 个答案:

答案 0 :(得分:0)

我会用目前正在使用的方法回答它:

使用键创建一个倒置的dict,就像我们在关键字文件中的所有单词一样,并将值作为元组(如关键字,而不是关键字,实体名称),所以对于一个有问题的例子,它将是

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

现在将输入字符串拆分为空格并将每个单词搜索到此倒置字典中,对于每个匹配,获取完整的关键字,完全不像关键字,并对其进行完整的正则表达式搜索。如果存在类似关键字但不喜欢不存在即成功匹配,则返回相应的标识。

时间复杂度:由于输入字符串几乎总是少于10个字,因此它将具有~10个dict get操作。之后,它是输入字符串集(基于空间分割)等之间的集合交集。不喜欢首次成功时具有退出机制的关键字。