您可以通過將句子映射到散列來構建可分片數據庫,然後您可以在潛在位置查找數據。
from collections import defaultdict
from cStringIO import StringIO
DATA = """applachian
rocky mountains
andes
sierra nevada
long mountain ranges of the world"""
def normalize(sentence):
return "".join(sentence.lower().strip())
def create_db(inf):
db = defaultdict(list)
offset = 0
for line in inf:
l = len(line)
db[hash(normalize(line))].append((offset, l))
offset += l
return db
def main():
db = create_db(StringIO(DATA))
# save this db, and in a different script, load it to retrieve:
for needle in ["rocky", "sierra nevada"]:
key = hash(normalize(needle))
for offset, length in db.get(key, []):
print "possibly found at", offset, length
if __name__ == '__main__':
main()
這證明了主意:你建立一個數據庫(店作爲例如泡菜)所有標準化的搜索鍵映射到的位置,這些地方被發現。然後,您可以快速檢索偏移和長度,並在實際文件中尋找該位置,從而進行基於==的比較。
你要買什麼呢?是「單詞」還是「字母」或「短語」? –
你關心文件中的句子排序嗎? –
下一個:你在做這一次嗎?數百次循環?爲了響應網絡請求? –