西安电子科技大学Python程序设计上机实验——简单的拼写检查程序
整个程序包括3部分:
① 在第一部分中,写一个函数,用来比较2个字符串,然后根据条件分别返回值 0,1,2。
② 在第二部分中,写一个函数,检查一个字符串是否能够在插入或者删除一个字符的情况下,和另外一个字符串匹配。
③ 在第三部分中,写一个函数,通过一个正确单词的列表,对一个句子(字符串)进行拼写检查。
具体步骤如下:
(1) 在第一部分中,写一个函数,函数名为find_mismatch,接收2个字符串为参数并返回:
0: 如果2个字符串完全匹配。
1: 如果2个字符串有相同的长度,并且只有一个字符不匹配。
2: 如果2个字符串长度不相同或者有2个及以上的字符不匹配。
不区分大小写,也就是同一个字符的大小写认为是匹配的。下面是一些例子:
(1) 在第二部分中,写一个函数,函数名为 single_insert_or_delete,接收2个字符串为参数并返回:
0: 如果2个字符串完全匹配;
1: 如果第一个字符串能够通过插入或删除一个字符后,和第二个字符串完全匹配。注意:插入或者删除一个字符跟替换一个字符并不是一回事;这里不考虑替换;
2: 其他情况。
不区分大小写,也就是同一个字符的大小写认为是匹配的。下面是一些例子:
上图中,函数返回的仅仅是数字,()里面只是解释,并不是函数的返回值。
(2) 在第三部分中,写一个函数,函数名为 spelling_corrector ,接收2个参数。第一个参数为一个句子 (string),第二个参数为正确单词的列表。函数检查句子中的每一个单词是否跟拼写正确的单词列表中的单词匹配,并返回一个字符串: a.如果句子中的单词跟列表中的某个单词完全匹配,那么句子中的单词应该按照原样输出;b.如果句子中的单词通过替换,插入,或者删除一个字符后,跟列表中的单词匹配,那么句子中的单词应该被列表中的正确单词替换;c.如果句子中的单词不满足上面两种情况,那么句子中的单词应该原样输出。
注意:
l 不要对句子中只有1个或者2个字符的单词进行检查,原样输出;
l 为了避免出现2种以上匹配情况,请使用单词列表中第一个匹配的单词;
l 忽略大小写;
l 函数的返回值字符串,所有单词均小写输出;
l 假设句子中只包括26个大写英文字母和小写英文字母;(a-z and A-Z)
l 将句子中单词之间多余的空格去掉;
l 将函数返回值字符串首位多余的空格去掉。
示例:
第三部分的函数要调用第一部分和第二部分的函数。
请注意,这个程序只是一个练习,真实的拼写检查程序要比这个复杂得多,需要更多的功能。
def find_mismatch(s1, s2):
cnt, lst1, lst2 = 0, [], []
for i in s1.lower():
lst1.append(i)
for i in s2.lower():
lst2.append(i)
if s1.lower() == s2.lower():
return 0
if len(s1) == len(s2):
for i in range(len(s1)):
if lst1[i] != lst2[i]:
cnt += 1
if cnt == 1:
return 1
if cnt >= 2:
return 2
else:
return 2
def single_insert_or_delete(m, n):
mlist, nlist = [], []
for i in m.lower():
mlist.append(i)
for i in n.lower():
nlist.append(i)
if len(m) == len(n):
for i in range(len(m)):
if mlist[i] != nlist[i]:
return 2
return 0
if abs(len(m) - len(n)) == 1:
for t in range(10):
for i in mlist:
for j in nlist:
if i == j:
try:
mlist.remove(i)
nlist.remove(j)
except Exception:
continue
if abs(len(mlist) - len(nlist)) and (len(mlist) == 0 or len(nlist) == 0) == 1:
return 1
return 2
if abs(len(m) - len(n)) != 0 and abs(len(m) - len(n)) != 1:
return 2
def spelling_corrector(string, lst):
words, word_list, s = string.lower().split(' '), [], ''
for i in lst:
word_list.append(i.lower())
for i in range(len(words)):
for j in word_list:
if find_mismatch(words[i], j) == 1 or single_insert_or_delete(words[i], j) == 1:
words[i] = j
for i in words:
s += i
s += ' '
return s
# print(find_mismatch('Python', 'Java')) # 2
# print(find_mismatch('Hello there', 'helloothere')) # 1
# print(find_mismatch('dog', 'Dog')) # 0
# print(single_insert_or_delete('Python', 'Java')) # 2
# print(single_insert_or_delete('book', 'boot')) # 2
# print(single_insert_or_delete('sin', 'sink')) # 1
# print(single_insert_or_delete('Dog', 'dog')) # 0
# print(single_insert_or_delete('poke', 'spoke')) # 1
print(spelling_corrector('Thes is the Firs cas', ['that', 'first', 'case', 'car']))
print(spelling_corrector('programing is fan and eesy', ['programming', 'this', 'fun', 'easy', 'book']))
print(spelling_corrector('Thes is vary essy', ['this', 'is', 'very', 'very', 'easy']))
print(spelling_corrector('Wee lpve Pythen', ['we', 'Live', 'In', 'Python']))
is vary essy’, [‘this’, ‘is’, ‘very’, ‘very’, ‘easy’]))
print(spelling_corrector(‘Wee lpve Pythen’, [‘we’, ‘Live’, ‘In’, ‘Python’]))