Зачем это нужно
При переводах текстов удобно иметь программу, которая не только находит грамматические ошибки, но и предлагает варианты замены неправильно написанного слова. В отличии от известных текстовых процессоров такая программа должна иметь простую и быструю смену языков проверки при их достаточном количестве. Нужно также предусмотреть фильтр для исключения непереводимых обозначений. Всё перечисленное можно реализовать на 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
ссылка на оригинал статьи https://habrahabr.ru/post/324832/
Добавить комментарий