私は、ファイル数が(50-100万文字)のファイルを持っています。私が必要とするのは、これらの行を特定のクエリで高速に検索することです。今、私のコードは次のようになります。Python - 高速ファイル検索
def similarity(haystack, needle):
words = re.findall(r'\w+', haystack.lower()) # replacing by split with separators reduces time by about 4 seconds
for word in words:
if word == needle:
return 10
for word in words:
if word.startswith(needle):
return 10 ** (len(needle)/len(word))
if needle in haystack:
return 1
return 0
def search(text):
text = text.lower()
lines = [(similarity(x, text), x) for x in lines]
return [x[1] for x in sorted(lines, reverse = True)[:15]]
それは(ほとんどすべての時間がsimilarity()
機能である)私のPCでファイルの例では約15秒を実行し、私はそれが数秒で、ほとんどすぐに実行したいです。これはどうすればできますか?
インデックス作成は役に立ちますが、その可能な構造については考えていないと思います。可能であれば、検索を「より曖昧」にしたいと思います。 Nグラムやそれに類するもので。しかし、主な関心は今やスピードです。
UPD:
同じlines
を複数回通って検索されます。
needle
は常に1語です。
「More fuzzy」は、needle
が誤って入力されていても、行が見つかることを意味します。それは、 "S" と "t" があることははっきりしない今のよう10 ** (len(t)/len(word))
あなたは、より良い変数名が必要になります。
[Sphinx](http://sphinxsearch.com/)のような専用の全文検索エンジンを使用しないでください。 – georg