#python #spell-checking
#python #проверка орфографии
Вопрос:
я написал следующий код для проверки орфографии с использованием двоичного поиска на python, и он работает должным образом, но результат обратный .. например, я написал «hwllo world», а результат был world hello, тогда как он должен быть «hello world»
мой код выглядит следующим образом :
import difflib
#L=[]
ch=[]
def binarySearch(alist, item):
first = 0
last = len(alist) - 1
while first <= last:
midpoint = (first last) // 2
if alist[midpoint] == item:
return True
else:
if item < alist[midpoint]:
last = midpoint - 1
else:
first = midpoint 1
return False
f = open('wordlist.txt', 'r').read().splitlines()
v=str(input("enter your sentence : ")).split()
for i in range(len(v)):
if binarySearch(f, v[i]) == True:
ch.append(v[i])
elif binarySearch(f, v[i]) == False:
sugg = []
for word in f:
if difflib.SequenceMatcher(None, v[i], word).ratio() >= 0.8:
sugg.append(word)
print(sugg)
for j in range (len(sugg)):
print( "if you mean ",(sugg[j]),"press",(j))
x=int(input())
ch.append(sugg[x])
print (' '.join(ch))
Ответ №1:
Это проблематично, потому что вы добавляете все предложения в конце, а не по мере нахождения слов с ошибками.
Вместо:
for i in range(len(v)):
if binarySearch(f, v[i]) == True:
ch.append(v[i])
elif binarySearch(f, v[i]) == False:
sugg = []
for word in f:
if difflib.SequenceMatcher(None, v[i], word).ratio() >= 0.8:
sugg.append(word)
print(sugg)
for j in range (len(sugg)):
print( "if you mean ",(sugg[j]),"press",(j))
x=int(input())
ch.append(sugg[x])
Попробуйте:
for i in range(len(v)):
if binarySearch(f, v[i]):
ch.append(v[i])
elif not binarySearch(f, v[i]):
sugg = []
for word in f:
if difflib.SequenceMatcher(None, v[i], word).ratio() >= 0.8:
sugg.append(word)
print(sugg)
for j in range (len(sugg)):
print( "if you mean ",(sugg[j]),"press",(j))
x=int(input())
ch.append(sugg[x])