Проверка орфографии в NLTK работает некорректно

#python #nlp #nltk #wordnet

#python #nlp #nltk #wordnet

Вопрос:

Я хочу проверить написание предложения на python с помощью NLTK . Встроенная spell checker функция работает некорректно. Оно выдает with и ‘and’ как неправильное написание.

 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 amp; 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)
  

Кто-нибудь может назвать мне причину?

Ответ №1:

Оно выдает неправильные варианты написания, потому что они stopwords отсутствуют в wordnet (проверьте часто задаваемые вопросы)

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

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

Комментарии:

1. Я вижу, что такие слова, как «could», «upon», «which», все еще считаются неправильно написанными