我有下面的代碼文檔的索引的高效節能:其中一個詞彙表的單詞出現
def index(self):
"""
Build an index of the documents.
"""
print "Indexing..."
# ------------------------------------------------------------------
# TODO: Create an inverted index.
# Granted this may not be a linked list as in a proper
# implementation.
inv_index = collections.defaultdict(lambda: [])
tam = len(self.docs)
for word in self.vocab:
for i in xrange(tam):
if word in self.docs[i]:
inv_index[word].append(i)
print "End indexing..."
# ------------------------------------------------------------------
self.inv_index = inv_index
其全成索引,但過低(20左右〜分鐘),我怎麼能做到這一點的少於10秒?
- self.vocab:所有不同的列表(梗)詞語
- self.docs:列表的列表,其中第i個文件是
- self.docs [I] => [ 'word1','word2',...,'wordN']
self.vocab是我自己的詞彙表中的詞,我需要索引出現該詞的文檔數。
製作defaultdict的使用集看起來過於誇張,但只是循環遍歷文檔一次,並使用集交集絕對是正確的路要走。 – Midnighter
@Midnighter我看不出使用列表,它只會使追加和搜索更長。如果你正在創建倒排索引,問題是如果有東西在那裏,你會檢查很多次。在集合中檢查存在性更快,所以再次設置似乎是更好的選擇。 –
我不知道如何使用inv_index,你可能是正確的。 – Midnighter