python

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

  • воскресенье, 26 марта 2017 г. в 03:15:07
https://habrahabr.ru/post/324832/
  • 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