2016-10-22 5 views
3

Я хочу проверить написания предложения в python, используя NLTK. Встроенный spell checker работает неправильно. Он дает with и 'и' как неправильное написание.Проверка орфографии NLTK работает некорректно

def tokens(sent): 
     return nltk.word_tokenize(sent) 

def SpellChecker(line): 
     for i in tokens(line): 
      strip = i.rstrip() 
      if not WN.synsets(strip): 
       print("Wrong spellings : " +i) 
      else: 
       print("No mistakes :" + i) 

def removePunct(str): 
     return "".join(c for c in str if c not in ('!','.',':',',')) 

l = "Attempting artiness With black & white and clever camera angles, the movie disappointed - became even more ridiculous - as the acting was poor and the plot and lines almost non-existent. " 
noPunct = removePunct(l.lower()) 
if(SpellChecker(noPunct)): 
     print(l) 
     print(noPunct) 

Может ли кто-нибудь объяснить мне причину?

ответ

3

Это дает неправильные варианты написания, потому что те stopwords, которые не содержатся в WordNet (проверьте FAQs)

Таким образом, вы можете использовать вместо игнорируемых слов из NLTK корпуса для проверки таких слов.

#Add these lines: 
import nltk 
from nltk.corpus import wordnet as WN 
from nltk.corpus import stopwords 
stop_words_en = set(stopwords.words('english')) 

def tokens(sent): 
     return nltk.word_tokenize(sent) 

def SpellChecker(line): 
    for i in tokens(line): 
     strip = i.rstrip() 
     if not WN.synsets(strip): 
      if strip in stop_words_en: # <--- Check whether it's in stopword list 
       print("No mistakes :" + i) 
      else: 
       print("Wrong spellings : " +i) 
     else: 
      print("No mistakes :" + i) 


def removePunct(str): 
     return "".join(c for c in str if c not in ('!','.',':',',')) 

l = "Attempting artiness With black & white and clever camera angles, the movie disappointed - became even more ridiculous - as the acting was poor and the plot and lines almost non-existent. " 

noPunct = removePunct(l.lower()) 
if(SpellChecker(noPunct)): 
     print(l) 
     print(noPunct) 
Смежные вопросы