Как эффективно использовать коррекцию орфографии для большого корпуса текста в Python - PullRequest
0 голосов
/ 09 июля 2020

Рассмотрим следующее для исправления орфографии:

from autocorrect import spell
import re

WORD = re.compile(r'\w+')
def reTokenize(doc):
    tokens = WORD.findall(doc)
    return tokens

text = ["Hi, welcmoe to speling.","This is jsut an exapmle, but cosnider a veri big coprus."]
def spell_correct(text):
    sptext = []
    for doc in text:
        sptext.append(' '.join([spell(w).lower() for w in reTokenize(doc)]))      
    return sptext    

print(spell_correct(text)) 

Вот результат для вышеуказанного фрагмента кода:

введите описание изображения здесь

Как я могу остановить отображение вывода в блокноте jupyter? В частности, если у нас есть большое количество текстовых документов, будет много выходных данных.

Мой второй вопрос: как я могу улучшить скорость и точность (например, проверьте слово «вери» в выходных данных ) кода при применении к большим данным? Есть ли лучший способ сделать это? Я ценю ваш ответ и (альтернативные) решения с большей скоростью.

1 Ответ

1 голос
/ 09 июля 2020

Как сказал @khelwood в комментариях, вы должны использовать autocorrect.Speller:

from autocorrect import Speller
import re


spell=Speller(lang="en")
WORD = re.compile(r'\w+')
def reTokenize(doc):
    tokens = WORD.findall(doc)
    return tokens

text = ["Hi, welcmoe to speling.","This is jsut an exapmle, but cosnider a veri big coprus."]
def spell_correct(text):
    sptext = []
    for doc in text:
        sptext.append(' '.join([spell(w).lower() for w in reTokenize(doc)]))      
    return sptext    

print(spell_correct(text)) 

#Output
#['hi welcome to spelling', 'this is just an example but consider a veri big corpus']

В качестве альтернативы вы можете использовать понимание списка, чтобы, возможно, увеличить скорость, а также вы можете использовать библиотеку pyspellchecker, которая повышает точность слова 'veri' в этом случае:

from spellchecker import SpellChecker
import re

WORD = re.compile(r'\w+')
spell = SpellChecker()

def reTokenize(doc):
    tokens = WORD.findall(doc)
    return tokens

text = ["Hi, welcmoe to speling.","This is jsut an exapmle, but cosnider a veri big coprus."]

def spell_correct(text):
    sptext =  [' '.join([spell.correction(w).lower() for w in reTokenize(doc)])  for doc in text]    
    return sptext    

print(spell_correct(text)) 

Вывод:

['hi welcome to spelling', 'this is just an example but consider a very big corpus']
...