将字符串拆分为所有可能的搜索字符

时间:2015-10-09 23:26:09

标签: python string algorithm

我希望将所有可能的搜索匹配存储在数据库中,以便我可以远离执行LIKE %term%查询。有没有办法拆分下面的字符串?

STRING = LG_THELASTWITCHHUNTER_PREORDERTRAILER_HD_2CH_EN_PTBRSUB_16X9_240_2398_DIGITAL_FINAL.mov

第一部分将在我们拆分子词的每个单词分隔符上。所以我们有:

SUBWORDS = 'LG', 'THELASTWITCHHUNTER', ...

第二部分将获得该单词的所有可能的连续字母组合。例如:

LG ==> 'L', 'G', 'LG
THELASTWITCHHUNTER ==> 'T', 'TH', 'THE', 'H', 'HE', 'HEL', etc.

有没有办法做到这一点,或者可能是我上面使用的更好的方法。要提供上下文,使用LIKE搜索需要大约15秒来处理我拥有的所有路径 -

enter image description here

最终目标是提取所有单词字符串。那就是:

LG, THE, LAST, WITCH, HUNTER, PREORDER, TRAILER, HD, 2CH, EN, PTBR, SUB, 16X8, 2398, DIGITAL, FINAL, MOV

2 个答案:

答案 0 :(得分:2)

关于分解字符串,你可以使用

STRING.split('_')

获取所有子串:

title = 'cats'
substrings = {title[a:a+k] for k in range(1,1+len(title)) 
             for a in range(1+len(title)-k)}                                                             

这给出了:

['c','a','t','s','ca','at','ts','cat','ats','cats']

对于长度为n的字符串,您将获得(n + 1)n / 2个非空子串。

编辑:更改为设置理解而不是列表理解以消除重复。对于孤独的标题,我们至少可以期待重复的单字母和双字母字符串,并且我们想要剔除唯一的子字符串。

答案 1 :(得分:1)

第1部分:分词

wordlist = string.split('_')

这假设您希望每个单词由_

分隔

第2部分:提取所有单词字符串

这可能是很多不同的词,所以我会小心记忆但是......

splitlist = []
for word in wordlist:
  for i in range(len(word)):
    for j in range(i+1,len(word)+1):
      splitlist.append(word[i:j])

我建议检查以确保新添加的内容尚未包含在拆分列表中,但是这基本上就是你需要的“#/ p>