У меня есть текстовый файл, где каждая строка содержит кучу текста. (В самом файле нет номера строк), как это:мой инверсный индекс очень медленный любые предложения?
line#: text: 0 This is some text 1 More text 2 whats for lunch
Я хочу функцию, которая возвращает словарь отображения каждого слово его номер строки вхождения в основном проектировании inverseindex.
т.е. {'This':{1}, 'text':{0,1}, 'for':{2} ... }
После сканирования текстового файла (это занимает .18 секунд) Я положил строки в список списков, таким образом, что каждая позиция в списке сохраняет разделительную линию. т.е .:
[['This', 'is', 'some', 'text'], ['More', ...] ...]
После чего я использую enumerate()
извлечь позицию и создать словарь. У меня уже есть решение, но оно настолько уродливое, и мне потребовалось столько времени, что я хочу увидеть еще одно элегантное решение.
Для справки мой алгоритм работает в течение 882,28 секунд, т. Е. 15 минут на 1099 строк ислов. Другими словами, явно не пифонов.
def invidx(strlist):
# return algoritm execution time
start = time.time()
f = open(strlist, 'r')
wordLoc = []
for line in f:
s = line.split()
wordLoc.append(list(s))
f.close()
# benchmark
print 'job completed in %.2fs' % (time.time() - start)
try:
q = {}
for a, b in enumerate(wordLoc):
l = set()
for w in b :
if w not in q:
l = {a for a, b in enumerate(wordLoc) if w in b}
q[w] = l
except KeyboardInterrupt:
print 'Interrupt detected: aborting...'
print 'Failed to complete indexing, ran for %.2fs' % \
(time.time() - start)
exit(0)
return q
РЕДАКТИРОВАТЬ:
согласно запросу код выше. Поймите меня, ребята.
код проводки не рекомендуется, это обязательно. Как мы будем помогать вам оптимизировать алгоритм, который мы не можем прочитать? –
Это было бы более уместно при просмотре кода http://codereview.stackexchange.com/ Предполагая, что вы действительно публикуете свой код;) – That1Guy
спасибо, ребята. выше. Иногда у вас просто странное чувство, что ваш код плохой ... это один из тех времен. – franklin