比较字符串时出现索引错误-Python
我在使用一些Python代码时遇到了一些问题。我有一个名为“big.txt”的大文本文件。我在代码中对它进行了迭代,将每个单词排序到一个数组(或列表)中,然后再次迭代以删除字母表中没有的任何字符。我还有一个名为比较字符串时出现索引错误-Python,python,string,text,indexing,autocorrect,Python,String,Text,Indexing,Autocorrect,我在使用一些Python代码时遇到了一些问题。我有一个名为“big.txt”的大文本文件。我在代码中对它进行了迭代,将每个单词排序到一个数组(或列表)中,然后再次迭代以删除字母表中没有的任何字符。我还有一个名为worddistance的函数,它查看两个单词的相似程度,然后返回一个分数。我有另一个函数叫做自动更正。我想给这个函数传递一个拼写错误的单词,然后打印一个“你的意思是…”句子,其中的单词在worddistance函数中得分较低(每当发现差异时,该函数向计数器添加1,分数越低,越相似)。 奇
worddistance
的函数,它查看两个单词的相似程度,然后返回一个分数。我有另一个函数叫做自动更正
。我想给这个函数传递一个拼写错误的单词,然后打印一个“你的意思是…”
句子,其中的单词在worddistance
函数中得分较低(每当发现差异时,该函数向计数器添加1,分数越低,越相似)。
奇怪的是,我一直在犯错误:
“索引错误:字符串索引超出范围”
我对正在发生的事感到不知所措
我的代码如下
提前感谢您的回复,塞缪尔·诺顿
f = open("big.txt", "r")
words = list()
temp_words = list()
for line in f:
for word in line.split():
temp_words.append(word.lower())
allowed_characters = 'abcdefghijklmnopqrstuvwxyz'
for item in temp_words:
temp_new_word = ''
for char in item:
if char in allowed_characters:
temp_new_word += char
else:
continue
words.append(temp_new_word)
list(set(words)).sort()
def worddistance(word1, word2):
counter = 0
if len(word1) > len(word2):
counter += len(word1) - len(word2)
new_word1 = word1[:len(word2) + 1]
for char in range(0, len(word2) + 1) :
if word2[char] != new_word1[char]:
counter += 1
else:
continue
elif len(word2) > len(word1):
counter += len(word2) - len(word1)
new_word2 = word2[:len(word1) + 1]
for char in range(0, len(word1) + 1):
if word1[char] != word2[char]:
counter += 1
else:
continue
return counter
def autocorrect(word):
word.lower()
if word in words:
print("The spelling is correct.")
return
else:
suggestions = list()
for item in words:
diff = worddistance(word, item)
if diff == 1:
suggestions.append(item)
print("Did you mean: ", end = ' ')
if len(suggestions) == 1:
print(suggestions[0])
return
else:
for i in range(0, len(suggestions)):
if i == len(suggestons) - 1:
print("or " + suggestions[i] + "?")
return
print(suggestions[i] + ", ", end="")
return
在worddistance()
中,范围(0,len(word1)+1)中的字符的看起来应该是:
for char in range(len(word1)):
for char in range(len(word2)):
words = sorted(set(words))
对于范围(0,len(word2)+1)中的字符,:
应为:
for char in range(len(word1)):
for char in range(len(word2)):
words = sorted(set(words))
顺便说一下,list(set(words)).sort()是对临时列表进行排序,这可能不是您想要的。应该是:
for char in range(len(word1)):
for char in range(len(word2)):
words = sorted(set(words))
如其他注释中所述,您应该range(len(word1))
除此之外:
-您应该考虑Word1和Word具有相同长度的情况<代码>>LEN(Word2)== LeN(Word1)< /C>
-您还应该注意命名。在wordDistance函数的第二个条件中
if word1[char] != word2[char]:
您应该与new\u word2
if word1[char] != new_word2[char]:
-在自动更正中,应将lower分配给word=word.lower()
下一次,尝试使用Python内置函数,例如,为了避免在范围(list)
中使用fori,然后使用list[i]
,len代替counter。。等
例如:
你的距离函数可以这样写,或者更简单
def distance(word1, word2):
counter= max(len(word1),len(word2))- min(len(word1),len(word2))
if len(word1) > len(word2):
counter+= len([x for x,z in zip (list(word2), list(word1[:len(word2) + 1])) if x!=z])
elif len(word2) > len(word1):
counter+= len([x for x,z in zip (list(word1), list(word2[:len(word1) + 1])) if x!=z])
else:
counter+= len([x for x,z in zip (list(word1), list(word2)) if x!=z])
return counter
您在哪一行获得此错误