ошибка python в проверке орфографии с использованием двоичного поиска

#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])