Автодополнение в Python с использованием Tkinter и NLTK
Приветствую! В сегодняшней статье мы рассмотрим, как создать простой интерфейс для автодополнения с использованием Tkinter и NLTK.
Задача
Мы создадим поле ввода, где пользователь будет вводить текст, и пока он вводит первые символы, ему будут предлагаться подсказки из ближайших к нему слов в корпусе NLTK.
Код программы
import tkinter as tk
from tkinter import StringVar, Listbox
from nltk.corpus import words
from difflib import get_close_matches
# Скачиваем корпус слов, если еще не скачивали
# import nltk
# nltk.download('words')
class AutoCompleteApp:
def __init__(self, root):
self.root = root
self.root.title("AutoComplete на Tkinter + NLTK")
# Список слов
self.word_list = words.words() # Используем корпус слов из NLTK
# Строковая переменная для отслеживания ввода
self.input_var = StringVar()
self.input_var.trace("w", self.show_suggestions)
# Поле ввода
self.entry = tk.Entry(root, textvariable=self.input_var, font=("Arial", 14))
self.entry.pack(padx=10, pady=10)
# Список для отображения подсказки
self.suggestions_box = Listbox(root, height=6, font=("Arial", 12))
self.suggestions_box.pack(padx=10, pady=5)
self.suggestions_box.bind("<<ListboxSelect>>", self.select_word)
def show_suggestions(self, *args):
""" Отображает подсказки для ввода пользователя. """
input_text = self.input_var.get()
self.suggestions_box.delete(0, tk.END) # Очищаем список
if input_text:
matches = get_close_matches(input_text, self.word_list, n=5, cutoff=0.5)
for match in matches:
self.suggestions_box.insert(tk.END, match)
def select_word(self, event):
""" Вставляет выбранное слово из списка в поле ввода. """
selection = self.suggestions_box.curselection()
if selection:
selected_word = self.suggestions_box.get(selection[0])
self.input_var.set(selected_word)
# Запуск приложения
if __name__ == "__main__":
root = tk.Tk()
app = AutoCompleteApp(root)
root.mainloop()
Как это работает?
-
Корпус слов: Мы используем встроенный в библиотеку NLTK список английских слов.
-
Tkinter: Создаем интерфейс с полем ввода и списком для подсказок.
-
get_close_matches: Функция из модуля difflib находит ближайшие совпадения по введенному тексту.
Таким образом, мы получили простое и удобное приложение для автодополнения текста. Попробуйте создать свою версию, добавив, например, подсказки на русском языке или дополнительные функции!
Если вы хотите глубже разобраться в работе с Python, рекомендуем начать с курса Программирование на Python с Нуля до Гуру
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.