【发布时间】:2018-12-08 02:01:56
【问题描述】:
我在数据库中有大量(例如 3000 万)概念字符串(每个字符串最多 13 个单词)。给定一个输入字符串(可能最多 3 个句子),我想从数据库中找到输入字符串中可用的所有概念。
我为此目的使用 python。将数据库中的所有概念加载到列表中。遍历概念列表并尝试查找该概念是否在输入字符串中可用。由于我必须按顺序搜索它,这个过程需要很长时间,而且我必须为数百个输入字符串进行搜索。
为了修剪一些迭代,我对输入字符串进行了标记,并尝试仅加载具有任何一个标记的概念,并且概念的长度必须小于或等于输入字符串的长度。它需要一个 sql 查询来将这些简短列出的概念加载到列表中。该列表仍然可能包含 2000 万个概念。这个过程并没有那么快。
知道如何提高这个过程的效率吗?
为了更好的可视化,我举了一个 Pythonic 的小例子:
inputString = "The cow is a domestic animal. It has four legs, one tail, two eyes"
#load concept list from the database that have any of the words in input string (after removing stop words). Assume the list is as follows.
concepts = ["cow", "domestic animal", "domestic bird", "domestic cat", "domestic dog", "one eye", "two eyes", "two legs", "four legs", "two ears"]
for c in concepts:
if c in inputString:
print ('found ' + c + ' in ' + inputString)
如果您能给我一些建议以提高效率,那就太好了。
【问题讨论】:
-
这可能不是您要寻找的答案,但
print语句非常耗费资源。删除您的打印语句,将其保存到列表中,然后在最后打印列表。它会明显更快。 -
感谢您的意见。非常感激。我只是出于示例目的展示了它,但我会记住。
-
没问题。我在处理大型数据集时遇到了类似的问题,当我删除 print 语句时,它的执行速度提高了大约 5-10 倍。
标签: python performance list search substring