From 5d3c354d8f1904b4c0bc45216d48c284c55d9b4e Mon Sep 17 00:00:00 2001 From: david-ajax Date: Sun, 27 Jul 2025 21:39:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E9=80=94=E6=94=B9=E8=BF=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 +- README.md | 8 +- cache/voice/臣密言:臣以险衅, 夙遭闵凶..wav | Bin 24768 -> 0 bytes electron/陈情表.toml | 251 ++++++++++++++++++++ main.py | 15 +- nucleon/陈情表.toml | 15 ++ particles.py | 29 ++- puzzlemarkers.py | 0 testfield/blank_maker.py | 45 ++++ testfield/selection_maker.py | 45 ++++ todo.md | 3 + 11 files changed, 396 insertions(+), 20 deletions(-) delete mode 100644 cache/voice/臣密言:臣以险衅, 夙遭闵凶..wav create mode 100644 puzzlemarkers.py create mode 100644 testfield/blank_maker.py create mode 100644 testfield/selection_maker.py create mode 100644 todo.md diff --git a/.gitignore b/.gitignore index 83c4619..5841f3a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ .vscode -__pycache__/ \ No newline at end of file +.directory +__pycache__/ +scripts/ +.idea \ No newline at end of file diff --git a/README.md b/README.md index 25af91e..fccd98f 100644 --- a/README.md +++ b/README.md @@ -3,13 +3,17 @@ ## 概述 -"潜进" (HeurAMS, 中文含义: 启发式辅助记忆软件) 是一款为古诗词设计的记忆辅助软件, 集成记忆拟合算法、自然语音技术与生成式人工智能, 提供科学的记忆训练解决方案 +"潜进" (HeurAMS, 中文含义: 启发式辅助记忆软件) 是为习题册, 古诗词, 及其他问答/记忆/理解型题目设计的记忆辅助软件, 集成记忆拟合算法、自然语音技术与生成式人工智能, 提供优化的 ## 核心特性 ### 科学记忆拟合算法 -- 采用经实证的 SM-2 间隔重复算法 +- 采用经实证的 SM-2 间隔重复算法, 此算法亦用作 Anki 闪卡记忆软件的默认闪卡调度器 +> TODO: 将添加 FSRS 算法 (Anki 的新可选闪卡调度器) 与一种 SM-15 变体算法作为后续替代 +> 参考 https://github.com/slaypni/SM-15 +> 为什么使用 SM-15 的变体? +> SM-2 后续算法仅有论文, 无具体方程, SM-15 是基于 SM-15 描述实现的变体算法 - 动态优化每首诗词的记忆间隔时间表 - 实时跟踪记忆曲线,最大化长期记忆保留率与稳定性 diff --git a/cache/voice/臣密言:臣以险衅, 夙遭闵凶..wav b/cache/voice/臣密言:臣以险衅, 夙遭闵凶..wav deleted file mode 100644 index a0ad0ece8e4e1db4cf65306a9536885ceeedf809..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24768 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 S`0VAeU;QgS`?vXD>c0Yzgz2{c diff --git a/electron/陈情表.toml b/electron/陈情表.toml index e69de29..670bb85 100644 --- a/electron/陈情表.toml +++ b/electron/陈情表.toml @@ -0,0 +1,251 @@ +["臣密言:臣以险衅, 夙遭闵凶."] +efactor = 2.5 +real_rept = 2 +rept = 0 +interval = 1 +last_date = 11 +next_date = 12 +is_activated = 1 + +["生孩六月, 慈父见背;行年四岁, 舅夺母志."] +efactor = 2.5 +real_rept = 2 +rept = 0 +interval = 1 +last_date = 11 +next_date = 12 +is_activated = 1 + +["祖母刘愍臣孤弱, 躬亲抚养."] +efactor = 2.5 +real_rept = 2 +rept = 0 +interval = 1 +last_date = 11 +next_date = 12 +is_activated = 1 + +["臣少多疾病, 九岁不行, 零丁孤苦, 至于成立."] +efactor = 2.5 +real_rept = 2 +rept = 0 +interval = 1 +last_date = 11 +next_date = 12 +is_activated = 1 + +["既无伯叔, 终鲜兄弟, 门衰祚薄, 晚有儿息."] +efactor = 2.5 +real_rept = 11 +rept = 0 +interval = 1 +last_date = 11 +next_date = 12 +is_activated = 1 + +["外无期功强近之亲, 内无应门五尺之僮, 茕茕孑立, 形影相吊."] +efactor = 2.5 +real_rept = 2 +rept = 0 +interval = 1 +last_date = 11 +next_date = 12 +is_activated = 1 + +["而刘夙婴疾病, 常在床蓐, 臣侍汤药, 未曾废离."] +efactor = 2.5 +real_rept = 2 +rept = 0 +interval = 1 +last_date = 11 +next_date = 12 +is_activated = 1 + +["逮奉圣朝, 沐浴清化."] +efactor = 2.5 +real_rept = 2 +rept = 0 +interval = 1 +last_date = 11 +next_date = 12 +is_activated = 1 + +["前太守臣逵察臣孝廉;后刺史臣荣举臣秀才."] +efactor = 2.5 +real_rept = 2 +rept = 0 +interval = 1 +last_date = 11 +next_date = 12 +is_activated = 1 + +["臣以供养无主, 辞不赴命."] +efactor = 2.5 +real_rept = 2 +rept = 0 +interval = 1 +last_date = 11 +next_date = 12 +is_activated = 1 + +["诏书特下, 拜臣郎中, 寻蒙国恩, 除臣洗马."] +efactor = 2.5 +real_rept = 2 +rept = 0 +interval = 1 +last_date = 11 +next_date = 12 +is_activated = 1 + +["猥以微贱, 当侍东宫, 非臣陨首所能上报."] +efactor = 2.5 +real_rept = 2 +rept = 0 +interval = 1 +last_date = 11 +next_date = 12 +is_activated = 1 + +["臣具以表闻, 辞不就职."] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 + +["诏书切峻, 责臣逋慢;郡县逼迫, 催臣上道;州司临门, 急于星火."] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 + +["臣欲奉诏奔驰, 则刘病日笃, 欲苟顺私情, 则告诉不许."] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 + +["臣之进退, 实为狼狈."] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 + +["伏惟圣朝以孝治天下, 凡在故老, 犹蒙矜育, 况臣孤苦, 特为尤甚."] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 + +["且臣少仕伪朝, 历职郎署, 本图宦达, 不矜名节."] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 + +["今臣亡国贱俘, 至微至陋, 过蒙拔擢, 宠命优渥, 岂敢盘桓, 有所希冀!"] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 + +["但以刘日薄西山, 气息奄奄, 人命危浅, 朝不虑夕."] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 + +["臣无祖母, 无以至今日, 祖母无臣, 无以终余年."] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 + +["母孙二人, 更相为命, 是以区区不能废远."] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 + +["臣密今年四十有四, 祖母今年九十有六, 是臣尽节于陛下之日长, 报养刘之日短."] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 + +["乌鸟私情, 愿乞终养."] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 + +["臣之辛苦, 非独蜀之人士及二州牧伯所见明知, 皇天后土, 实所共鉴."] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 + +["愿陛下矜悯愚诚, 听臣微志, 庶刘侥幸, 保卒余年."] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 + +["臣生当陨首, 死当结草."] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 + +["臣不胜犬马怖惧之情, 谨拜表以闻."] +efactor = 2.5 +real_rept = 0 +rept = 0 +interval = 0 +last_date = 0 +next_date = 0 +is_activated = 0 diff --git a/main.py b/main.py index 6728422..2c2d25f 100644 --- a/main.py +++ b/main.py @@ -12,7 +12,7 @@ import particles as pt from reactor import Reactor import auxiliary as aux -ver = '0.2.6' +ver = '0.3.0' config = aux.ConfigFile("config.toml") @@ -57,12 +57,13 @@ class MemScreen(Screen): yield Static("", id="feedback") # 用于显示反馈 yield Label(self._get_progress_text(), id="progress") with Container(id="button_container"): - self.btn['5'] = Button("完美回想", variant="success", id="q5", classes="choice") - self.btn['4'] = Button("犹豫后正确", variant="success", id="q4", classes="choice") - self.btn['3'] = Button("困难地正确", variant="warning", id="q3", classes="choice") - self.btn['2'] = Button("错误但熟悉", variant="warning", id="q2", classes="choice") - self.btn['1'] = Button("错误且不熟", variant="error", id="q1", classes="choice") - self.btn['0'] = Button("完全空白", variant="error", id="q0", classes="choice") + if 1: + self.btn['5'] = Button("完美回想", variant="success", id="q5", classes="choice") + self.btn['4'] = Button("犹豫后正确", variant="success", id="q4", classes="choice") + self.btn['3'] = Button("困难地正确", variant="warning", id="q3", classes="choice") + self.btn['2'] = Button("错误但熟悉", variant="warning", id="q2", classes="choice") + self.btn['1'] = Button("错误且不熟", variant="error", id="q1", classes="choice") + self.btn['0'] = Button("完全空白", variant="error", id="q0", classes="choice") yield Horizontal(self.btn['5'], self.btn['4']) yield Horizontal(self.btn['3'], self.btn['2']) yield Horizontal(self.btn['1'], self.btn['0']) diff --git a/nucleon/陈情表.toml b/nucleon/陈情表.toml index 6618f2c..f8004aa 100644 --- a/nucleon/陈情表.toml +++ b/nucleon/陈情表.toml @@ -1,3 +1,18 @@ +# 散列表的键翻译 +["keydata"] +note = "笔记" +keyword_note = "关键词翻译" +translation = "语句翻译" + +# 测试项目元数据 +["testdata"] +# 记忆时显示的额外信息 +additional_inf = ["translation", "note"] +# 填空测试 +fill_blank = ["translation"] +# 选择题测试 +draw_card = ["keyword_note"] + ["臣密言:臣以险衅, 夙遭闵凶."] note = [] translation = "臣子李密陈言:我因命运不好,小时候遭遇到了不幸" diff --git a/particles.py b/particles.py index a089b3a..07f6b27 100644 --- a/particles.py +++ b/particles.py @@ -122,16 +122,7 @@ class Nucleon(): def __init__(self, content: str, data: dict): self.metadata = data self.content = content - - @staticmethod - def import_from_file(path: pathlib.Path): - name = path.name.replace(path.suffix, "") - with open(path, 'r') as f: - all = toml.load(f) - lst = list() - for i in all.keys(): - lst.append(Nucleon(i, all[i])) - return (name, lst) + @staticmethod def save_to_file(nucleon_dictized, path: pathlib.Path): @@ -142,6 +133,24 @@ class Nucleon(): def placeholder(): return Nucleon("核子对象样例内容", {}) +class NucleonUnion(): + "取代原有 NucleonFile 类, 以支持复杂逻辑" + def __init__(self, path): + name = path.name.replace(path.suffix, "") + with open(path, 'r') as f: + all = toml.load(f) + lst = list() + for i in all.keys(): + if "data" in i: + continue + lst.append(Nucleon(i, all[i])) + self.keydata = all["keydata"] + self.testdata = all["testdata"] + self.nucleons = lst + self.nucleons_dict = + def query(content): + + class AtomicFile(): def __init__(self, path, type_="unknown"): self.path = path diff --git a/puzzlemarkers.py b/puzzlemarkers.py new file mode 100644 index 0000000..e69de29 diff --git a/testfield/blank_maker.py b/testfield/blank_maker.py new file mode 100644 index 0000000..97858f9 --- /dev/null +++ b/testfield/blank_maker.py @@ -0,0 +1,45 @@ +import random + +class BlankPuzzle(): + """填空题谜题生成器 + + Args: + text: 原始字符串(需要 "/" 分割句子, 末尾应有 "/") + min_denominator: 最小概率倒数(如占所有可生成填空数的 1/7 中的 7, 若期望值小于 1, 则取 1) + """ + def __init__(self, text, min_denominator): + self.text = text + self.min_denominator = min_denominator + self.wording = "填空题 - 尚未刷新谜题" + self.answer = ["填空题 - 尚未刷新谜题"] + + def refresh(self): # 刷新谜题 + placeholder = "___SLASH___" + tmp_text = self.text.replace("/", placeholder) + words = tmp_text.split(placeholder) + if not words: + return "" + words = [word for word in words if word] + num_blanks = min(max(1, len(words) // self.min_denominator), len(words)) + indices_to_blank = random.sample(range(len(words)), num_blanks) + indices_to_blank.sort() + blanked_words = list(words) + answer = list() + for index in indices_to_blank: + blanked_words[index] = "__" * len(words[index]) + answer.append(words[index]) + result = [] + for word in blanked_words: + result.append(word) + self.answer = answer + self.wording = "".join(result) + + def __str__(self): + return f"{self.wording}\n{str(self.answer)}" + +# demo +text = """我联合国人民/同兹/决心/: /欲免/后世/再遭/今代人类/两度/身历/惨不堪言/之战祸/.../""" +riddle = BlankPuzzle(text, 3) +print(riddle) +riddle.refresh() +print(riddle) \ No newline at end of file diff --git a/testfield/selection_maker.py b/testfield/selection_maker.py new file mode 100644 index 0000000..149fb8b --- /dev/null +++ b/testfield/selection_maker.py @@ -0,0 +1,45 @@ +import random + +class SelectionPuzzle(): + """选择题谜题生成器 + + Args: + text: 原始字符串(需要 "/" 分割句子, 末尾应有 "/") + min_denominator: 最小概率倒数(如占所有可生成填空数的 1/7 中的 7, 若期望值小于 1, 则取 1) + """ + def __init__(self, prefix_text, origin_dict, min_denominator): + self.text = text + self.min_denominator = min_denominator + self.wording = "填空题 - 尚未刷新谜题" + self.answer = ["填空题 - 尚未刷新谜题"] + + def refresh(self): # 刷新谜题 + placeholder = "___SLASH___" + tmp_text = self.text.replace("/", placeholder) + words = tmp_text.split(placeholder) + if not words: + return "" + words = [word for word in words if word] + num_blanks = min(max(1, len(words) // self.min_denominator), len(words)) + indices_to_blank = random.sample(range(len(words)), num_blanks) + indices_to_blank.sort() + blanked_words = list(words) + answer = list() + for index in indices_to_blank: + blanked_words[index] = "__" * len(words[index]) + answer.append(words[index]) + result = [] + for word in blanked_words: + result.append(word) + self.answer = answer + self.wording = "".join(result) + + def __str__(self): + return f"{self.wording}\n{str(self.answer)}" + +# demo +text = """我联合国人民/同兹/决心/: /欲免/后世/再遭/今代人类/两度/身历/惨不堪言/之战祸/.../""" +riddle = BlankPuzzle(text, 3) +print(riddle) +riddle.refresh() +print(riddle) \ No newline at end of file diff --git a/todo.md b/todo.md new file mode 100644 index 0000000..04521a3 --- /dev/null +++ b/todo.md @@ -0,0 +1,3 @@ +- [] 基于释义的评估 +> 使用 EFACTOR 取最低值方法 +- [] 附加属性 \ No newline at end of file