Как эффективно построить инвертированный индекс на уровне предложения? - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь построить инвертированный индекс на уровне предложения на основе инвертированного индекса на уровне документа. У меня есть инвертированный индекс на уровне документа, например:

'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 документов в секунду.

Я не использовал многопроцессорность, но могу ли я повысить производительность без него?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...