改进与新的文件格式

This commit is contained in:
2025-11-06 23:47:29 +08:00
parent a66b44bc98
commit 92f9903307
5 changed files with 30 additions and 16 deletions

View File

@@ -22,6 +22,7 @@ import re
import random import random
import copy import copy
from .base_puzzle_widget import BasePuzzleWidget from .base_puzzle_widget import BasePuzzleWidget
from heurams.context import config_var
from .. import shim from .. import shim
class Recognition(BasePuzzleWidget): class Recognition(BasePuzzleWidget):
@@ -53,7 +54,15 @@ class Recognition(BasePuzzleWidget):
f"[b][b]{i.replace('/', ' ')}[/][/]", f"[b][b]{i.replace('/', ' ')}[/][/]",
id="sentence" + str(hash(i)), id="sentence" + str(hash(i)),
) )
# 处理orbital/展示配置 # 处理orbital/展示配置
for i in
# eval 环境设置
nucleon = self.atom.register['nucleon']
default = config_var.get()["puzzles"]
metadata = nucleon.metadata
for i in self.atom.register["orbital"] ["testdata"]["additional_inf"]: for i in self.atom.register["orbital"] ["testdata"]["additional_inf"]:
if self.atom.register['nucleon'][i]: if self.atom.register['nucleon'][i]:
if isinstance(self.atom.register['nucleon'][i], list): if isinstance(self.atom.register['nucleon'][i], list):

View File

@@ -28,7 +28,7 @@ def load_nucleon(path: pathlib.Path, fmt = "toml"):
for item, attr in nested_data.items(): for item, attr in nested_data.items():
if item == "__metadata__": if item == "__metadata__":
continue continue
lst.append((Nucleon(hasher.hash(item), attr), nested_data["__metadata__"]["orbital"])) lst.append((Nucleon(hasher.hash(item), attr, nested_data['__metadata__']), nested_data["__metadata__"]["orbital"]))
return lst return lst
def load_electron(path: pathlib.Path, fmt = "json") -> dict: def load_electron(path: pathlib.Path, fmt = "json") -> dict:

View File

@@ -1,13 +1,15 @@
class Nucleon: class Nucleon:
"""原子核: 材料元数据""" """原子核: 材料元数据"""
def __init__(self, ident: str, payload: dict): def __init__(self, ident: str, payload: dict, metadata: dict = {}):
"""初始化原子核 (记忆内容) """初始化原子核 (记忆内容)
Args: Args:
ident: 唯一标识符 ident: 唯一标识符
payload: 记忆内容信息 payload: 记忆内容信息
metadata: 可选元数据信息
""" """
self.metadata = metadata
self.payload = payload self.payload = payload
self.ident = ident self.ident = ident

View File

@@ -1,20 +1,23 @@
from typing import TypedDict from typing import TypedDict
class Orbital(TypedDict): class OrbitalSchedule(TypedDict):
quick_review: list quick_review: list
recognition: list recognition: list
final_review: list final_review: list
puzzle_config: dict
finished: None class Orbital(TypedDict):
unsure: None schedule: OrbitalSchedule
puzzles: dict
"""一份示例 """一份示例
["__metadata__.orbital"] # 内置的推荐学习方案 ["__metadata__.orbital.puzzles"] # 谜题定义
quick_review = [["cloze", 1], ["mcq", 0.5], ["recognition", 1]] "Recognition" = { __origin__ = "recognition", __hint__ = "", primary = "eval:nucleon['content']", secondery = ["eval:nucleon['keyword_note']", "eval:nucleon['note']"], top_dim = ["eval:nucleon['translation']"] }
recognition = [["recognition", 1]] "SelectMeaning" = { __origin__ = "mcq", __hint__ = "eval:nucleon['content']", jammer = "eval:nucleon['keyword_note']", max_riddles_num = "eval:default['mcq']['max_riddles_num']", prefix = "选择正确项: " }
final_review = [["cloze", 0.7], ["mcq", 0.7], ["recognition", 1]] "FillBlank" = { __origin__ = "cloze", __hint__ = "", text = "eval:nucleon['content']", delimiter = "eval:metadata['formation']['delimiter']", min_denominator = "eval:default['cloze']['min_denominator']"}
["__metadata__.orbital.puzzle_config"] ["__metadata__.orbital.schedule"] # 内置的推荐学习方案
cloze = { from = "content"} quick_review = [["FillBlank", "1.0"], ["SelectMeaning", "0.5"], ["recognition", "1.0"]]
mcq = { from = "keyword_note" } recognition = [["recognition", "1.0"]]
final_review = [["FillBlank", "0.7"], ["SelectMeaning", "0.7"], ["recognition", "1.0"]]
""" """

View File

@@ -5,11 +5,11 @@ class ClozePuzzle(BasePuzzle):
"""填空题谜题生成器 """填空题谜题生成器
Args: Args:
text: 原始字符串(需要 "/" 分割句子, 末尾应有 "/") text: 原始字符串(需要 delimiter 分割句子, 末尾应有 delimiter)
min_denominator: 最小概率倒数(如占所有可生成填空数的 1/7 中的 7, 若期望值小于 1, 则取 1) min_denominator: 最小概率倒数(如占所有可生成填空数的 1/7 中的 7, 若期望值小于 1, 则取 1)
""" """
def __init__(self, text: str, min_denominator: int): def __init__(self, text: str, delimiter: str = "/", min_denominator: int):
self.text = text self.text = text
self.min_denominator = min_denominator self.min_denominator = min_denominator
self.wording = "填空题 - 尚未刷新谜题" self.wording = "填空题 - 尚未刷新谜题"
@@ -17,7 +17,7 @@ class ClozePuzzle(BasePuzzle):
def refresh(self): # 刷新谜题 def refresh(self): # 刷新谜题
placeholder = "___SLASH___" placeholder = "___SLASH___"
tmp_text = self.text.replace("/", placeholder) tmp_text = self.text.replace(delimiter, placeholder)
words = tmp_text.split(placeholder) words = tmp_text.split(placeholder)
if not words: if not words:
return return