defedits1(word):
splits=[]# 将单词切成a,b两部分,并传入splits# 如:the: ('',the) (t,he) (th,e) (the,'')for i inrange(len(word)+1):
splits.append((word[:i],word[i:]))# word[:i]切片第i个元素之前所有元素# word[i:]切片第i个元素及之后所有元素# word[a:b]切片[a,b)# 单词少写一个字母的可能性
deletes=[a+b[1:]for a,b in splits if b]# 单词多写一个字母的可能性
inserts=[a+c+b for a,b in splits for c in alphabet]# 单词写错一个字母的可能性
replaces=[a+c+b[1:]for a,b in splits for c in alphabet if b]# 单词相邻字母顺序写错的可能性
transposes=[a+b[1]+b[0]+b[2:]for a,b in splits iflen(b)>1]# 返回一个无序的写错单词的可能性集合(编辑距离为1)returnset(deletes+transposes+replaces+inserts)
defknown_edits2(word):# 返回一个无序的写错单词的可能性集合,并包含在语料库中(在1的基础上,编辑距离为2)returnset(e2 for e1 in edits1(word)for e2 in edits1(e1)if e2 in NWORDS)
defknown(words):# 乱序返回包含在语料库中的所有单词returnset(w for w in words if w in NWORDS)