如果你只是想制作一个单词列表,包括单词本身、前面的单词和后面的单词,则可以使用以下方法:
text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.".split(" ")
unique_set = set(text)
context_key = {}
for i,j in enumerate(unique_set):
if i in (0, len(text)-1):
continue
indices = [i for i, x in enumerate(text) if x == j]
contexts = []
for index in indices:
this_context = []
word = j
word_before = text[i-1]
word_after = text[i+1]
this_context.append(word_before)
this_context.append(word)
this_context.append(word_after)
contexts.append(this_context)
context_key[j] = contexts
print(context_key)
输出:
{'consectetur': [['Lorem', 'consectetur', 'dolor']], 'proident,': [['ipsum', 'proident,', 'sit']], 'quis': [['dolor', 'quis', 'amet,']], 'labore': [['sit', 'labore', 'consectetur']], 'esse': [['amet,', 'esse', 'adipiscing']], 'ex': [['consectetur', 'ex', 'elit,']], 'ea': [['adipiscing', 'ea', 'sed']], 'aliqua.': [['elit,', 'aliqua.', 'do']], 'aute': [['sed', 'aute', 'eiusmod']], 'reprehenderit': [['do', 'reprehenderit', 'tempor']], 'amet,': [['eiusmod', 'amet,', 'incididunt']], 'veniam,': [['tempor', 'veniam,', 'ut']], 'Duis': [['incididunt', 'Duis', 'labore']], 'pariatur.': [['ut', 'pariatur.', 'et']], 'est': [['labore', 'est', 'dolore']], 'commodo': [['et', 'commodo', 'magna']], 'id': [['dolore', 'id', 'aliqua.']], 'voluptate': [['magna', 'voluptate', 'Ut']], 'cupidatat': [['aliqua.', 'cupidatat', 'enim']], 'velit': [['Ut', 'velit', 'ad']], 'sit': [['enim', 'sit', 'minim']], 'elit,': [['ad', 'elit,', 'veniam,']], 'dolore': [['minim', 'dolore', 'quis'], ['minim', 'dolore', 'quis']], 'consequat.': [['veniam,', 'consequat.', 'nostrud']], 'cillum': [['quis', 'cillum', 'exercitation']], 'minim': [['nostrud', 'minim', 'ullamco']], 'exercitation': [['exercitation', 'exercitation', 'laboris']], 'magna': [['ullamco', 'magna', 'nisi']], 'sunt': [['laboris', 'sunt', 'ut']], 'sint': [['nisi', 'sint', 'aliquip']], 'eu': [['ut', 'eu', 'ex']], 'nulla': [['aliquip', 'nulla', 'ea']], 'laborum.': [['ex', 'laborum.', 'commodo']], 'nostrud': [['ea', 'nostrud', 'consequat.']], 'in': [['commodo', 'in', 'Duis'], ['commodo', 'in', 'Duis'], ['commodo', 'in', 'Duis']], 'incididunt': [['consequat.', 'incididunt', 'aute']], 'ut': [['Duis', 'ut', 'irure'], ['Duis', 'ut', 'irure']], 'culpa': [['aute', 'culpa', 'dolor']], 'mollit': [['irure', 'mollit', 'in']], 'laboris': [['dolor', 'laboris', 'reprehenderit']], 'ipsum': [['in', 'ipsum', 'in']], 'Lorem': [['reprehenderit', 'Lorem', 'voluptate']], 'Excepteur': [['in', 'Excepteur', 'velit']], 'deserunt': [['voluptate', 'deserunt', 'esse']], 'aliquip': [['velit', 'aliquip', 'cillum']], 'tempor': [['esse', 'tempor', 'dolore']], 'ullamco': [['cillum', 'ullamco', 'eu']], 'Ut': [['dolore', 'Ut', 'fugiat']], 'enim': [['eu', 'enim', 'nulla']], 'anim': [['fugiat', 'anim', 'pariatur.']], 'fugiat': [['nulla', 'fugiat', 'Excepteur']], 'irure': [['pariatur.', 'irure', 'sint']], 'occaecat': [['Excepteur', 'occaecat', 'occaecat']], 'nisi': [['sint', 'nisi', 'cupidatat']], 'officia': [['occaecat', 'officia', 'non']], 'dolor': [['cupidatat', 'dolor', 'proident,'], ['cupidatat', 'dolor', 'proident,']], 'non': [['non', 'non', 'sunt']], 'do': [['proident,', 'do', 'in']], 'et': [['sunt', 'et', 'culpa']], 'eiusmod': [['in', 'eiusmod', 'qui']], 'sed': [['culpa', 'sed', 'officia']], 'ad': [['qui', 'ad', 'deserunt']], 'adipiscing': [['officia', 'adipiscing', 'mollit']]}
编辑:
你提供的代码问题在于enumerate
中的索引来自集合,这与它在文本中的索引不一定相同。这意味着你的单词并不总是出现在context
中,因为该上下文中的单词按照你的集合中字母顺序排列,而不是按照text
中单词列表的顺序排列。
希望这有些意义 :)
if any(word)
可能是一个更好的解决方案,对吗? - Sebastian Goslin