速読ソフトの概要およびコード
https://gyazo.com/b2c8cc4758f784266d4ed1b2eb861825
code:速読ソフトの概要テキスト
本アプリケーション「スピードリーディングアプリ」は、読書におけるサッカード(眼球運動)を自動化し、ユーザーの読書速度を劇的に向上させることを目指したツールです。このアプリは、読書中に視線を迅速に移動させるという自然な人間の行動を支援し、一度に複数の単語を認識し、理解する能力を強化します。
使い方は非常にシンプルです。まず、アプリ上部にある「読み込み」ボタンをクリックして、読みたいテキストファイルを選択します。テキストファイルがアプリに読み込まれると、それが表示エリアに表示されます。ここで、右側のスライダーを使用して読書のスピード(単語/分)を調整し、その下の「単語表示数」から一度に表示する単語数を選択します。
準備が整ったら、「スタート・ストップ」ボタンをクリックして読書を開始します。画面の中央に単語が表示され、選択したスピードで更新されます。表示される単語は、選択したテキストファイルの内容に基づいています。テキストは左から右に進み、一度に表示される単語数は設定によります。これにより、視線の移動が最小化され、一度に複数の単語を認識するトレーニングが可能になります。
また、読書中に一時停止したい場合、または読み始めたい場合は、いつでも「スタート・ストップ」ボタンをクリックできます。もし読み返したい部分があれば、「20単語戻る」ボタンをクリックすることで瞬時に戻ることが可能です。
「スピードリーディングアプリ」は、読書のスピードを向上させ、情報の吸収速度を高めることを目指す全ての人にとって有益なツールです。読書のスピードが上がれば、情報の消化量も増え、それにより知識の獲得が早まると言えます。このアプリを使用することで、サッカードを最小限に抑え、より効率的な読書体験を実現できます。それでは、より良い読書体験のために、この「スピードリーディングアプリ」をぜひご利用ください。
code:sokudokusoft_20230530_python
import os
import tkinter as tk
from tkinter import filedialog, ttk
from tkinter.scrolledtext import ScrolledText
from janome.tokenizer import Tokenizer
import pygame
import time
from threading import Thread
class SpeedReadingApp:
def __init__(self, master):
self.master = master
self.master.title("Speed Reading Application")
self.file_path = ""
self.speed = 1
self.reading = False
self.texts = []
self.index = 0
self.text_highlighted = ""
self.word_count = tk.IntVar(value=1)
self.control_frame = tk.Frame(master)
self.control_frame.pack(pady=20)
# ファイル名表示ラベル
self.file_label = tk.Label(self.control_frame, text="NoDate", font=("Arial", 10), fg="gray")
self.file_label.pack(side=tk.TOP, fill="x")
# ファイル選択ボタン
self.file_button = tk.Button(self.control_frame, text="読み込み", command=self.load_file, font=("Arial", 10))
self.file_button.pack(side=tk.LEFT, padx=10)
# 単語表示数の切り替えボタン
self.word_count_switch = tk.OptionMenu(self.control_frame, self.word_count, *1, 2, 3) self.word_count_switch.pack(side=tk.LEFT, padx=10)
# 20単語戻るボタン
self.back_button = tk.Button(self.control_frame, text="20単語戻る", command=self.back_20_words, state="disabled", font=("Arial", 10))
self.back_button.pack(side=tk.LEFT, padx=10)
# スタート、ストップボタン
self.restart_button = tk.Button(self.control_frame, text="始めから再生", command=self.restart_reading, state="disabled", font=("Arial", 10))
self.restart_button.pack(side=tk.LEFT, padx=10)
# スピード調節スライダー
self.speed_slider = tk.Scale(self.control_frame, from_=1, to=9, orient="horizontal", label="Speed", length=200)
self.speed_slider.pack(side=tk.LEFT, padx=10)
# 進行状況バー
self.progress = ttk.Progressbar(self.control_frame, length=200, mode='determinate')
self.progress.pack(side=tk.LEFT, padx=10)
# 速読テキスト表示エリア
self.reading_area = tk.Label(self.master, text="", font=("UD デジタル 教科書体 NK-B", 60), wraplength=1500)
self.reading_area.pack(pady=10)
# 読み込みテキスト表示エリア
self.text_area_frame = tk.Frame(self.master)
self.text_area_frame.pack(pady=20)
# スタート/ストップボタン
self.start_stop_button = tk.Button(self.text_area_frame, text="スタート\nストップ", command=self.start_stop_reading, state="disabled", font=("Arial", 20), width=8, height=2)
self.start_stop_button.pack(side=tk.LEFT, padx=10)
# ショートカットキーの説明
self.shortcut_label = tk.Label(self.text_area_frame, text="space key", font=("Arial", 10), fg="gray") self.shortcut_label.pack(side=tk.LEFT, padx=5)
# 読み込みテキスト表示エリア
self.text_area = ScrolledText(self.text_area_frame, width=70, height=30, wrap=tk.WORD, font=("Arial", 10))
self.text_area.pack(side=tk.LEFT, padx=10)
pygame.init()
# ショートカットキーの設定
self.master.bind('<space>', self.space_key)
def space_key(self, event):
self.start_stop_reading()
def load_file(self):
if self.file_path != "":
with open(self.file_path, "r", encoding="utf-8") as file:
text = file.read()
self.texts = list(Tokenizer().tokenize(text, wakati=True))
self.text_area.insert("1.0", text)
self.text_area.tag_config("highlight", background="yellow")
self.file_label.config(text=os.path.basename(self.file_path)) # ファイル名をラベルに表示します。
self.start_stop_button.config(state="normal")
self.restart_button.config(state="normal")
self.back_button.config(state="normal")
def start_stop_reading(self):
if self.reading:
self.reading = False
self.start_stop_button.config(text="スタート\nストップ")
else:
self.reading = True
self.start_stop_button.config(text="ストップ")
self.read_thread = Thread(target=self.read_texts)
self.read_thread.start()
def back_20_words(self):
if self.index >= 20:
self.index -= 20
def restart_reading(self):
self.index = 0
self.text_area.tag_remove("highlight", "1.0", "end")
self.start_stop_reading()
def read_texts(self):
while self.reading and self.index < len(self.texts):
start_index = self.index - self.word_count.get() if self.index - self.word_count.get() >= 0 else 0
# 表示エリアに改行を空白文字に置換して表示
self.reading_area.config(text=" ".join(current_word).replace("\n", " "))
self.progress"value" = (self.index / len(self.texts)) * 100 pygame.time.wait(int(500/self.speed_slider.get()))
start_index = "1.0+"+str(sum(len(s) for s in self.texts:start_index))+"c" end_index = "1.0+"+str(sum(len(s) for s in self.texts:self.index))+"c" self.text_area.tag_remove("highlight", "1.0", "end")
self.text_area.tag_add("highlight", start_index, end_index)
self.index += 1
# スクロールする
self.text_area.see(end_index)
self.start_stop_button.config(text="スタート\nストップ")
if __name__ == "__main__":
root = tk.Tk()
app = SpeedReadingApp(root)
root.mainloop()
code:copyright
© 2023 hitsujimochi
個人利用、非商用でご使用ください。プログラムの不具合があればChatGPTに聞いてください。