改进与新的文件格式

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 copy
from .base_puzzle_widget import BasePuzzleWidget
from heurams.context import config_var
from .. import shim
class Recognition(BasePuzzleWidget):
@@ -53,7 +54,15 @@ class Recognition(BasePuzzleWidget):
f"[b][b]{i.replace('/', ' ')}[/][/]",
id="sentence" + str(hash(i)),
)
# 处理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"]:
if self.atom.register['nucleon'][i]:
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():
if item == "__metadata__":
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
def load_electron(path: pathlib.Path, fmt = "json") -> dict:

View File

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

View File

@@ -1,20 +1,23 @@
from typing import TypedDict
class Orbital(TypedDict):
class OrbitalSchedule(TypedDict):
quick_review: list
recognition: list
final_review: list
puzzle_config: dict
finished: None
unsure: None
class Orbital(TypedDict):
schedule: OrbitalSchedule
puzzles: dict
"""一份示例
["__metadata__.orbital"] # 内置的推荐学习方案
quick_review = [["cloze", 1], ["mcq", 0.5], ["recognition", 1]]
recognition = [["recognition", 1]]
final_review = [["cloze", 0.7], ["mcq", 0.7], ["recognition", 1]]
["__metadata__.orbital.puzzles"] # 谜题定义
"Recognition" = { __origin__ = "recognition", __hint__ = "", primary = "eval:nucleon['content']", secondery = ["eval:nucleon['keyword_note']", "eval:nucleon['note']"], top_dim = ["eval:nucleon['translation']"] }
"SelectMeaning" = { __origin__ = "mcq", __hint__ = "eval:nucleon['content']", jammer = "eval:nucleon['keyword_note']", max_riddles_num = "eval:default['mcq']['max_riddles_num']", prefix = "选择正确项: " }
"FillBlank" = { __origin__ = "cloze", __hint__ = "", text = "eval:nucleon['content']", delimiter = "eval:metadata['formation']['delimiter']", min_denominator = "eval:default['cloze']['min_denominator']"}
["__metadata__.orbital.puzzle_config"]
cloze = { from = "content"}
mcq = { from = "keyword_note" }
["__metadata__.orbital.schedule"] # 内置的推荐学习方案
quick_review = [["FillBlank", "1.0"], ["SelectMeaning", "0.5"], ["recognition", "1.0"]]
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:
text: 原始字符串(需要 "/" 分割句子, 末尾应有 "/")
text: 原始字符串(需要 delimiter 分割句子, 末尾应有 delimiter)
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.min_denominator = min_denominator
self.wording = "填空题 - 尚未刷新谜题"
@@ -17,7 +17,7 @@ class ClozePuzzle(BasePuzzle):
def refresh(self): # 刷新谜题
placeholder = "___SLASH___"
tmp_text = self.text.replace("/", placeholder)
tmp_text = self.text.replace(delimiter, placeholder)
words = tmp_text.split(placeholder)
if not words:
return