Простая программа на PYTHON для граматического анализа слов и фрагментов текста

от автора

Зачем это нужно

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


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *