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