改进与新的文件格式
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"]]
|
||||
"""
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user