EDIT: ошибка фиксированнойDefaultdict() правильный выбор?
Идея заключается в том, чтобы читать текст из файла, очистить его, и пару последовательных слов (не permuations):
file = f.read()
words = [word.strip(string.punctuation).lower() for word in file.split()]
pairs = [(words[i]+" " + words[i+1]).split() for i in range(len(words)-1)]
Тогда для каждой пары, создать список из всех возможных отдельных слов, которые могут следовать за этой парой по всему тексту. ДИКТ будет выглядеть
[ConsecWordPair]:[listOfFollowers]
Таким образом, ссылаясь на словарь для данной пары будет возвращать все слова, которые могут следовать этой паре. Например.
wordsThatFollow[('she', 'was')]
>> ['alone', 'happy', 'not']
Мой алгоритм для достижения этой цели предполагает defaultdict (список) ...
wordsThatFollow = defaultdict(list)
for i in range(len(words)-1):
try:
# pairs overlap, want second word of next pair
# wordsThatFollow[tuple(pairs[i])] = pairs[i+1][1]
EDIT: wordsThatFollow[tuple(pairs[i])].update(pairs[i+1][1][0]
except Exception:
pass
Я не так беспокоюсь об ошибке значения я должен обойти с «примерочных, за исключением '(если только я не буду). Проблема заключается в том, что алгоритм только успешно возвращает один из последователей:
wordsThatFollow[('she', 'was')]
>> ['not']
К сожалению, если этот пост вреден для сообщества я выяснить вещи, как я иду ^^
вы хотите изменить 'wordsThatFollow [кортеж (пары [я])] = пар [г + 1] [1]' to 'wordsThatFollow [кортеж (пары [i])] .append (пары [i + 1] [1]) '<- вы хотите добавить в список, который является значением пары, а не переопределять его значение на каждой итерации – inspectorG4dget