Это прозвучало в другом вопросе, но я решил, что лучше задать этот вопрос отдельно. Дан большой список предложений (порядка 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 минут. Мне почему-то кажется, что это распространенная проблема, но я не могу найти никаких ссылок о том, как решить ее эффективно. Есть предложения, как к этому подступиться?