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