Added thesaurus program
This commit is contained in:
parent
c9f2703e9f
commit
b54231cb44
5 changed files with 5366 additions and 2 deletions
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8" project-jdk-type="Python SDK" />
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8 (venv)" project-jdk-type="Python SDK" />
|
||||||
</project>
|
</project>
|
|
@ -4,7 +4,7 @@
|
||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="jdk" jdkName="Python 3.8 (venv)" jdkType="Python SDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
90
Tkinter/thesaurus/main.py
Normal file
90
Tkinter/thesaurus/main.py
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
import csv
|
||||||
|
import tkinter as tk
|
||||||
|
import os.path
|
||||||
|
import pickle
|
||||||
|
|
||||||
|
|
||||||
|
def word_from_list(event):
|
||||||
|
if synonym_list_box.curselection() == ():
|
||||||
|
return
|
||||||
|
word = synonym_list_box.get(synonym_list_box.curselection()).lower()
|
||||||
|
search_word.delete(0, tk.END)
|
||||||
|
search_word.insert(tk.END, string=word)
|
||||||
|
search_for_word()
|
||||||
|
|
||||||
|
|
||||||
|
def search_for_word():
|
||||||
|
word = search_word.get().lower()
|
||||||
|
word_list = thesaurus.get(word)
|
||||||
|
synonym_list_box.delete(0, tk.END)
|
||||||
|
if word_list is not None:
|
||||||
|
word_list = sorted(list(word_list))
|
||||||
|
for i, word in enumerate(word_list):
|
||||||
|
synonym_list_box.insert(i, word)
|
||||||
|
else:
|
||||||
|
synonym_list_box.insert(0, 'Not found')
|
||||||
|
|
||||||
|
|
||||||
|
def build_thesaurus():
|
||||||
|
d = {}
|
||||||
|
if os.path.exists('synonyms.pickle'):
|
||||||
|
# Load pickle file
|
||||||
|
with open('synonyms.pickle', 'rb') as pck:
|
||||||
|
data = pck.read()
|
||||||
|
d = pickle.loads(data)
|
||||||
|
else:
|
||||||
|
# Build dictionary d from synonyms.txt file,
|
||||||
|
# then save it to a pickle file
|
||||||
|
with open('synonyms.txt', 'rt') as file:
|
||||||
|
# First line is copyright info, so burn it
|
||||||
|
# Commented out code is for making list of lists without csv
|
||||||
|
#file.readline()
|
||||||
|
# read remainder of lines into a list
|
||||||
|
#all_words_list = file.readlines()
|
||||||
|
all_words_list = list(csv.reader(file))[:-1]
|
||||||
|
|
||||||
|
for words in all_words_list:
|
||||||
|
# Split words into list of words, remove newline from last word
|
||||||
|
#words_list = words.strip().split(',')
|
||||||
|
#print(words_list)
|
||||||
|
for word_key in words:
|
||||||
|
word_key = word_key.lower()
|
||||||
|
# If word not a key in dict, add to dict with value as empty set
|
||||||
|
if word_key.lower() not in d:
|
||||||
|
d[word_key] = set()
|
||||||
|
|
||||||
|
# Go through all words in words_list to add to value set as synonym
|
||||||
|
for synonym in words:
|
||||||
|
if word_key != synonym:
|
||||||
|
d[word_key].add(synonym)
|
||||||
|
# Pickle the dict
|
||||||
|
with open('synonyms.pickle', 'wb') as pck: # And the Warner sister, Dot!
|
||||||
|
pickle.dump(d, pck, protocol=pickle.HIGHEST_PROTOCOL)
|
||||||
|
|
||||||
|
# Return the thesaurus/dict (d)
|
||||||
|
return d
|
||||||
|
|
||||||
|
|
||||||
|
window = tk.Tk()
|
||||||
|
window.title('Thesaurus')
|
||||||
|
window.minsize(width=300, height=600)
|
||||||
|
|
||||||
|
thesaurus = build_thesaurus()
|
||||||
|
|
||||||
|
title_label = tk.Label(text='Thesaurus', font='Arial 24 bold italic')
|
||||||
|
title_label.pack(pady=(5, 15))
|
||||||
|
|
||||||
|
search_word = tk.Entry(width=30)
|
||||||
|
search_word.focus()
|
||||||
|
search_word.pack(pady=5)
|
||||||
|
|
||||||
|
search_button = tk.Button(text='Find Synonyms', command=search_for_word)
|
||||||
|
search_button.pack(pady=(5, 25))
|
||||||
|
|
||||||
|
synonym_list_box = tk.Listbox(height=25, width=40)
|
||||||
|
synonym_list_box.bind(sequence='<<ListboxSelect>>', func=word_from_list)
|
||||||
|
synonym_list_box.pack(pady=5)
|
||||||
|
|
||||||
|
|
||||||
|
# Always at the end
|
||||||
|
window.mainloop()
|
BIN
Tkinter/thesaurus/synonyms.pickle
Normal file
BIN
Tkinter/thesaurus/synonyms.pickle
Normal file
Binary file not shown.
5274
Tkinter/thesaurus/synonyms.txt
Normal file
5274
Tkinter/thesaurus/synonyms.txt
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue