2016-10-22 3 views
3

Ich möchte die Schreibweise eines Satzes in Python mit NLTK überprüfen. Das eingebaute spell checker funktioniert nicht richtig. Es gibt with und 'und' als eine falsche Schreibweise.NLTKs Rechtschreibprüfung funktioniert nicht richtig

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) 

Kann mir jemand den Grund geben?

Antwort

3

Es gibt falsche Schreibweisen, weil diejenigen stopwords sind, die in wordnet nicht enthalten sind (überprüfen FAQs)

Also, Sie anstelle von Stoppwörter NLTK corpus verwenden können für solche Worte zu überprüfen.

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