Я пытаюсь построить инвертированный индекс на уровне предложения на основе инвертированного индекса на уровне документа. У меня есть инвертированный индекс на уровне документа, например:
'aaa': [doc1, doc2, doc3]
'bbb': [doc1, doc3]
'ccc': [doc2]
......
, и набор документов с полными текстами, подобными этим:
doc1: ['this is a sentence containing aaa.', 'sentence containing bbb.', 'other sentence']
doc2: ['other sentence', 'sentence containing aaa', 'ccc']
doc3: ['aaa', 'bbb']
......
Мой желаемый инвертированный индекс на уровне предложения - :
'aaa': [doc1-sent0, doc2-sent1, doc3-sent0]
'bbb': [doc1-sent1, doc3-sent1]
'ccc': [doc2-sent2]
.......
Сначала я запрашиваю все связанные слова документа, возьмем doc1
в качестве примера:
doc1: ['aaa', 'bbb']
Затем я повторяю каждое предложение для каждого документа, используя выражение регулярного выражения :
for doc in documents:
result = {}
for i, sent in enuermate(doc.sentences):
s = re.search('|'.join(related_word_list), sent)
if s is not None:
result[i] = s.group(0)
Этот код работает нормально, но работает очень медленно (~ 3 секунды на документ, документы - это научная c литература, содержащая в среднем 8 ~ 9К слов). Могу ли я сделать это быстрее? Было бы неплохо достичь скорости ~ 10 документов в секунду.
Я не использовал многопроцессорность, но могу ли я повысить производительность без него?