Наиболее эффективный способ индексирования слов в документе?

Это прозвучало в другом вопросе, но я решил, что лучше задать этот вопрос отдельно. Дан большой список предложений (порядка 100 тысяч):

[
"This is sentence 1 as an example",
"This is sentence 1 as another example",
"This is sentence 2",
"This is sentence 3 as another example ",
"This is sentence 4"
]

как лучше всего закодировать следующую функцию?

def GetSentences(word1, word2, position):
    return ""

если даны два слова, word1, word2 и позиция position, то функция должна вернуть список всех предложений, удовлетворяющих этому ограничению. Например:

GetSentences("sentence", "another", 3)

должна вернуть предложения 1 и 3 в качестве индекса предложений. Мой текущий подход заключался в использовании такого словаря:

Index = defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: [])))

for sentenceIndex, sentence in enumerate(sentences):
    words = sentence.split()
    for index, word in enumerate(words):
        for i, word2 in enumerate(words[index:):
            Index[word][word2][i+1].append(sentenceIndex)

Но это быстро выводит все из строя на наборе данных размером около 130 МБ, так как моя оперативная память 48 ГБ исчерпывается менее чем за 5 минут. Мне почему-то кажется, что это распространенная проблема, но я не могу найти никаких ссылок о том, как решить ее эффективно. Есть предложения, как к этому подступиться?

7
задан Legend 5 November 2011 в 01:09
поделиться