https://habrahabr.ru/post/324832/Зачем это нужно
При переводах текстов удобно иметь программу, которая не только находит грамматические ошибки, но и предлагает варианты замены неправильно написанного слова. В отличии от известных текстовых процессоров такая программа должна иметь простую и быструю смену языков проверки при их достаточном количестве. Нужно также предусмотреть фильтр для исключения непереводимых обозначений. Всё перечисленное можно реализовать на Python, Для этого нужно скачать библиотеку PyEnchant, например здесь[1]. Настроить эту библиотеку и добавить словари для русского языка.
Код программы
Модули библиотеки и пустой словарь для названия языка.
# -*- coding: utf-8 -*-
import enchant
from enchant.checker import SpellChecker
from enchant.tokenize import EmailFilter, URLFilter
Передача данных при выборе языка в программу.
def get(event):
t=str(l.get(event.widget.curselection()))
w['key']=0
w['key']=t
lab = tk.Label(root, text="", font="Arial 12")
lab.grid_remove()
lab = tk.Label(root, text= "Выбран язык -%s--Ввод: поля 1-текст,2-слово. Вывод поле 3-результат"%t, font="Arial 12")
lab.grid(row=0, column=0)
Проверка правописания одного слова.
def pravopus():
t=w['key']
d = enchant.Dict(t)
tex=txt_0.get(1.0, END).strip()
if len(tex)!=0:
m=d.check(tex)
if m:
txt.insert(END, "Слово-%s-написано правильно\n"%tex)
else:
txt.insert(END, "Слово--%s- написано не правильно, нужно так-%s- \n"%(tex,str(d.suggest(tex))))
elif len(tex)==0:
txt.insert(END, "Введите слово!!!\n")
Проверка правописания фрагмента текста с исключением Email и URL.
def tokenise():
try:
t=w['key']
txt.delete(1.0, END)
p= enchant.Dict(t)
d= SpellChecker(t,filters=[EmailFilter,URLFilter])
tex=txt_1.get(1.0, END).strip()
d.set_text(tex)
k=0
for err in d:
k=k+1
txt.insert(END, "ERROR:",err.word, p.suggest(err.word))
txt.insert(END, "\n")
if k==0:
txt.insert(END, 'Предложение написано правильно\n')
except:
txt.insert(END, "Ошибка ввода!!!\n")
pass
Очистка полей и интерфейс tkinter.
def clearn():
txt_0.delete(1.0, END)
txt_1.delete(1.0, END)
txt.delete(1.0, END)
import tkinter as tk
from tkinter import *
root = tk.Tk()
main_menu = Menu(root)
root.config(menu=main_menu)
file_menu = Menu(main_menu)
main_menu.add_cascade(label="Орфография", menu=file_menu)
file_menu.add_command(label="Проверка блока текста", command=tokenise)
file_menu.add_command(label="Очистка всех полей", command=clearn)
file_menu.add_command(label="Выход", command=root.destroy)
lab = tk.Label(root, text="Выбирите язык", font="Arial 12")
l = tk.Listbox(root,takefocus=True, width=6,height=5,font="Arial 12")
txt = tk.Text(root, width=64,height=5,font="Arial 12",wrap=WORD)
txt_0 = tk.Text(root, width=64,height=1,font="Arial 12",wrap=WORD)
txt_1 = tk.Text(root, width=64,height=5,font="Arial 12",wrap=WORD)
but = tk.Button(root,text="Проверить слово",command=pravopus)
lab.grid(row=0, column=0)
txt_1.grid(row=1, column=0)
txt_0.grid(row=2, column=0)
txt.grid(row=3, column=0)
l.grid(row=3, column=1)
but.grid(row=4, column=0)
l.insert(END,'en_AU', 'en_GB', 'en_US', 'de_DE', 'fr_FR', 'ru_RU', 'uk_UA')
l.bind("<<ListboxSelect>>", get)
root.tk.mainloop()
Работа программы
Пример работы с русскими словами.
Пример работы с английским предложением.
Пример работы с немецким предложением.
1. Python проверка орфографии (windows, linux) — PyEnchant
xn--80afqpaigicolm.xn--p1ai/python/python-proverka-orfografii-windows-linux-pyenchant