auto backup: 2026-06-10 08:10:02
This commit is contained in:
parent
1212794459
commit
78dc45d3fd
42
add_15_words.py
Normal file
42
add_15_words.py
Normal file
@ -0,0 +1,42 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
file_l2 = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2新版独有单词.xlsx'
|
||||
file_kb = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2知识库-三级+A2.xlsx'
|
||||
|
||||
df_l2 = pd.read_excel(file_l2)
|
||||
df_kb = pd.read_excel(file_kb)
|
||||
|
||||
available = df_l2[df_l2['可用'] == 1].copy()
|
||||
|
||||
new_rows = []
|
||||
for _, row in available.iterrows():
|
||||
new_rows.append({
|
||||
'单词': row['单词'],
|
||||
'词性': row['词性'],
|
||||
'中文释义': row['词义'],
|
||||
'KET/三级重合': '',
|
||||
'分类': '',
|
||||
'Unnamed: 5': '',
|
||||
'与L1重复': row['是否为L1单词'],
|
||||
'L1词性': row['L1词性'] if pd.notna(row['L1词性']) else '',
|
||||
'L1词义': row['L1词义'] if pd.notna(row['L1词义']) else '',
|
||||
'在L1中的行数': row['L1行数'] if pd.notna(row['L1行数']) else '',
|
||||
'删除': ''
|
||||
})
|
||||
|
||||
df_new = pd.DataFrame(new_rows)
|
||||
|
||||
df_kb = pd.concat([df_kb, df_new], ignore_index=True)
|
||||
|
||||
df_kb = df_kb.sort_values(by='单词', key=lambda x: x.str.lower(), ignore_index=True)
|
||||
|
||||
output_path = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2知识库-三级+A2.xlsx'
|
||||
df_kb.to_excel(output_path, index=False)
|
||||
|
||||
print(f"已添加 {len(new_rows)} 个单词")
|
||||
print(f"L2知识库总单词数: {len(df_kb)}")
|
||||
print(f"\n已保存至: {output_path}")
|
||||
print("\n添加的单词(按字母顺序):")
|
||||
for i, row in df_new.sort_values(by='单词', key=lambda x: x.str.lower()).iterrows():
|
||||
print(f" {row['单词']:<15} {str(row['词性']):<10} {row['中文释义']:<25} L1:{row['与L1重复']} L1词性:{row['L1词性']} L1词义:{row['L1词义']}")
|
||||
53
add_16_words.py
Normal file
53
add_16_words.py
Normal file
@ -0,0 +1,53 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
# 文件路径
|
||||
file_path = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2知识库-三级+A2.xlsx'
|
||||
|
||||
# 要添加的16个单词
|
||||
words_to_add = [
|
||||
('supper', 'n.', '晚餐'),
|
||||
('cafeteria', 'n.', '食堂'),
|
||||
('tidy up', 'v.', '收拾'),
|
||||
('all sorts of', 'phr.', '各种各样的'),
|
||||
('all the time', 'phr.', '一直'),
|
||||
('bring back', 'v.', '拿回'),
|
||||
('turn off', 'v.', '关掉'),
|
||||
('cabinet', 'n.', '橱柜'),
|
||||
('get back', 'v.', '拿回'),
|
||||
('costume', 'n.', '服装'),
|
||||
('equipment', 'n.', '装备'),
|
||||
('explorer', 'n.', '探险家'),
|
||||
('upload', 'v.', '上传'),
|
||||
('dot', 'n.', '点'),
|
||||
('successful', 'adj.', '成功的'),
|
||||
('give back', 'v.', '归还'),
|
||||
]
|
||||
|
||||
# 按字母顺序排序
|
||||
words_to_add_sorted = sorted(words_to_add, key=lambda x: x[0].lower())
|
||||
|
||||
# 读取文件
|
||||
df = pd.read_excel(file_path)
|
||||
|
||||
print(f"现有行数: {len(df)}")
|
||||
|
||||
# 创建新行DataFrame
|
||||
new_rows = pd.DataFrame(words_to_add_sorted, columns=['单词', '词性', '中文释义'])
|
||||
|
||||
# 合并
|
||||
df_updated = pd.concat([df, new_rows], ignore_index=True)
|
||||
|
||||
# 按字母顺序排序
|
||||
df_updated = df_updated.sort_values(by='单词', key=lambda x: x.astype(str).str.lower())
|
||||
|
||||
# 保存
|
||||
df_updated.to_excel(file_path, index=False)
|
||||
|
||||
print(f"\n添加完成!")
|
||||
print(f"添加了 {len(words_to_add)} 个新单词")
|
||||
print(f"更新后总行数: {len(df_updated)}")
|
||||
|
||||
print("\n新添加的单词(按字母顺序):")
|
||||
for i, (word, pos, meaning) in enumerate(words_to_add_sorted, 1):
|
||||
print(f"{i:2d}. {word:20s} {pos:8s} {meaning}")
|
||||
38
add_words.py
Normal file
38
add_words.py
Normal file
@ -0,0 +1,38 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
# 读取文件
|
||||
file_path = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2知识库-三级+A2.xlsx'
|
||||
df = pd.read_excel(file_path)
|
||||
|
||||
print("文件列名:", df.columns.tolist())
|
||||
print(f"现有行数: {len(df)}")
|
||||
|
||||
# 要添加的单词
|
||||
new_words = [
|
||||
{"单词": "cafe", "词性": "n.", "中文释义": "咖啡馆"},
|
||||
{"单词": "exhibition", "词性": "n.", "中文释义": "展览"},
|
||||
{"单词": "selfie", "词性": "n.", "中文释义": "自拍"},
|
||||
{"单词": "typing", "词性": "n.", "中文释义": "打字"},
|
||||
{"单词": "performance", "词性": "n.", "中文释义": "表演"}
|
||||
]
|
||||
|
||||
# 把新单词转换为DataFrame
|
||||
new_df = pd.DataFrame(new_words)
|
||||
|
||||
# 合并到原数据
|
||||
df_combined = pd.concat([df, new_df], ignore_index=True)
|
||||
|
||||
# 按单词字母顺序排序(忽略大小写)
|
||||
df_sorted = df_combined.sort_values(by='单词', key=lambda x: x.str.lower())
|
||||
|
||||
# 保存结果
|
||||
df_sorted.to_excel(file_path, index=False)
|
||||
|
||||
print(f"\n添加完成!")
|
||||
print(f"添加了 {len(new_words)} 个新单词")
|
||||
print(f"更新后总行数: {len(df_sorted)}")
|
||||
|
||||
print("\n新添加的单词:")
|
||||
for word in new_words:
|
||||
print(f"{word['单词']} - {word['词性']} - {word['中文释义']}")
|
||||
1814
all_words_dump.txt
Normal file
1814
all_words_dump.txt
Normal file
File diff suppressed because it is too large
Load Diff
22
analyze_categories.py
Normal file
22
analyze_categories.py
Normal file
@ -0,0 +1,22 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
file_path = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/情境分类.xlsx'
|
||||
df = pd.read_excel(file_path)
|
||||
|
||||
print(f"行数: {len(df)}, 列数: {len(df.columns)}")
|
||||
print(f"列名: {list(df.columns)}")
|
||||
print()
|
||||
|
||||
# 查看D列(第4列,索引3)
|
||||
col_d = df.columns[3]
|
||||
print(f"D列名称: {col_d}")
|
||||
print()
|
||||
|
||||
# 查看D列所有唯一值
|
||||
unique_values = df[col_d].dropna().unique()
|
||||
print(f"D列唯一值数量: {len(unique_values)}")
|
||||
print()
|
||||
print("=== D列所有唯一分类 ===")
|
||||
for i, v in enumerate(sorted(unique_values, key=str), 1):
|
||||
print(f" {i}. {v}")
|
||||
18
analyze_categories_detail.py
Normal file
18
analyze_categories_detail.py
Normal file
@ -0,0 +1,18 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
file_path = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/情境分类.xlsx'
|
||||
df = pd.read_excel(file_path)
|
||||
|
||||
col_d = df.columns[3]
|
||||
col_word = df.columns[0]
|
||||
|
||||
# 按分类分组,显示每个分类的单词样例
|
||||
categories = df.groupby(col_d)
|
||||
for cat, group in categories:
|
||||
words = group[col_word].dropna().tolist()
|
||||
print(f"\n{'='*60}")
|
||||
print(f"【{cat}】({len(words)}个单词)")
|
||||
print(f"样例: {', '.join(str(w) for w in words[:15])}")
|
||||
if len(words) > 15:
|
||||
print(f" ... 共{len(words)}个")
|
||||
BIN
business_knowledge/L2单词表/30-34.xlsx
Normal file
BIN
business_knowledge/L2单词表/30-34.xlsx
Normal file
Binary file not shown.
BIN
business_knowledge/L2单词表/KET词汇表_完整版.xlsx
Normal file
BIN
business_knowledge/L2单词表/KET词汇表_完整版.xlsx
Normal file
Binary file not shown.
BIN
business_knowledge/L2单词表/L1完整.xlsx
Normal file
BIN
business_knowledge/L2单词表/L1完整.xlsx
Normal file
Binary file not shown.
BIN
business_knowledge/L2单词表/L2新版_L1重复标记.xlsx
Normal file
BIN
business_knowledge/L2单词表/L2新版_L1重复标记.xlsx
Normal file
Binary file not shown.
BIN
business_knowledge/L2单词表/L2新版独有单词.xlsx
Normal file
BIN
business_knowledge/L2单词表/L2新版独有单词.xlsx
Normal file
Binary file not shown.
BIN
business_knowledge/L2单词表/L2知识库-三级+A2.xlsx
Normal file
BIN
business_knowledge/L2单词表/L2知识库-三级+A2.xlsx
Normal file
Binary file not shown.
BIN
business_knowledge/L2单词表/三级单词表原始版.xlsx
Normal file
BIN
business_knowledge/L2单词表/三级单词表原始版.xlsx
Normal file
Binary file not shown.
BIN
business_knowledge/L2单词表/情境分类.xlsx
Normal file
BIN
business_knowledge/L2单词表/情境分类.xlsx
Normal file
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -16,11 +16,11 @@
|
||||
STEP1_LEARNING_FLOW = r"""你是一名儿童英语学习助手,负责为学习者生成互动式的巩固练习题。请根据以下信息生成练习内容:
|
||||
|
||||
**输入信息**
|
||||
$任务信息$
|
||||
$学习过程$
|
||||
|
||||
**生成要求**
|
||||
|
||||
1. 为每个【通关知识】的知识词汇生成一个小题,包含以下结构:
|
||||
1. 为每个【学习过程】中的每个单词生成一个小题,包含以下结构:
|
||||
|
||||
```
|
||||
# 小题 X
|
||||
@ -75,10 +75,6 @@ Brainy:没错!"奖牌"对应的英文词汇是"medal",你的拼写完全
|
||||
Brainy:太棒了!你复习了所有的关键知识点,拼对了每一个词,相信下一次你一定可以做得更好!
|
||||
```
|
||||
|
||||
#输入
|
||||
任务信息:
|
||||
$任务信息$
|
||||
|
||||
# 输出
|
||||
现在请按照上述信息和要求,直接输出目标内容。"""
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -2019,6 +2019,7 @@ def parse_core_writing_imgmakeword_fields(teaching_config):
|
||||
通关知识 = fields.get("通关知识", "")
|
||||
前置对话 = fields.get("前置对话", "")
|
||||
互动问题 = fields.get("互动问题", "")
|
||||
学习过程 = fields.get("学习过程", "")
|
||||
|
||||
# 构建任务信息(composite)
|
||||
任务信息_parts = []
|
||||
@ -2039,6 +2040,7 @@ def parse_core_writing_imgmakeword_fields(teaching_config):
|
||||
"通关知识": 通关知识,
|
||||
"前置对话": 前置对话,
|
||||
"互动问题": 互动问题,
|
||||
"学习过程": 学习过程,
|
||||
"任务信息": 任务信息,
|
||||
}
|
||||
|
||||
@ -2082,7 +2084,7 @@ def generate_core_writing_imgmakeword(cId, teaching_config, character_map=None,
|
||||
# ── Step 1: 学习流程配置 ──
|
||||
logger.info(f"[core_writing_imgMakeWord] Step 1/7: 学习流程配置")
|
||||
prompt1 = build_writing_imgmakeword_prompt("step1_learning_flow", {
|
||||
"任务信息": fields["任务信息"],
|
||||
"学习过程": fields["学习过程"],
|
||||
})
|
||||
学习流程配置, usage1 = llm_client.call("", prompt1, max_tokens=8192, temperature=0.3)
|
||||
学习流程配置 = 学习流程配置.strip()
|
||||
|
||||
@ -27,6 +27,7 @@ PUSH_FIELD_MAP = {
|
||||
"core_writing_imgWrite": ["taskInfo", "textInfo", "studyInfo", "evalInfo"],
|
||||
"core_writing_questionMakeSentence": ["taskInfo", "textInfo", "studyInfo", "evalInfo"],
|
||||
"core_writing_questionWrite": ["taskInfo", "textInfo", "studyInfo", "evalInfo"],
|
||||
"core_writing_imgMakeWord": ["taskInfo", "preDialog", "imageInfo", "questionList", "studyInfo"],
|
||||
}
|
||||
|
||||
ALL_CORE_FIELDS = [
|
||||
|
||||
24
check_3034_structure.py
Normal file
24
check_3034_structure.py
Normal file
@ -0,0 +1,24 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
file3034 = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/30-34.xlsx'
|
||||
df3034 = pd.read_excel(file3034)
|
||||
|
||||
print("="*60)
|
||||
print("30-34.xlsx 文件结构:")
|
||||
print(f"行数: {len(df3034)}")
|
||||
print(f"列数: {len(df3034.columns)}")
|
||||
print("\n列名:")
|
||||
for i, col in enumerate(df3034.columns):
|
||||
print(f" 列{i}: {col}")
|
||||
|
||||
print("\n前30行内容:")
|
||||
print(df3034.head(30))
|
||||
|
||||
print("\n尝试找出包含单词的列...")
|
||||
# 检查前几列中包含字母的内容
|
||||
for col_idx in range(min(5, len(df3034.columns))):
|
||||
col_data = df3034.iloc[:, col_idx].dropna()
|
||||
# 统计包含字母的单元格数
|
||||
has_letter = col_data.apply(lambda x: any(c.isalpha() for c in str(x))).sum()
|
||||
print(f"列{col_idx}: 包含字母的单元格数 = {has_letter}")
|
||||
45
check_all_words.py
Normal file
45
check_all_words.py
Normal file
@ -0,0 +1,45 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
# 文件路径
|
||||
file3034 = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/30-34.xlsx'
|
||||
fileL2 = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2知识库-三级+A2.xlsx'
|
||||
|
||||
# 读取文件
|
||||
df3034 = pd.read_excel(file3034)
|
||||
dfL2 = pd.read_excel(fileL2)
|
||||
|
||||
print(f"30-34单词表: {len(df3034)} 个单词")
|
||||
print(f"L2知识库: {len(dfL2)} 个单词")
|
||||
|
||||
# 创建L2单词查找集合
|
||||
l2_words = set(str(word).strip().lower() for word in dfL2.iloc[:, 0])
|
||||
|
||||
# 检查每个单词
|
||||
missing_words = []
|
||||
for idx, row in df3034.iterrows():
|
||||
word = str(row.iloc[0]).strip().lower()
|
||||
if word not in l2_words:
|
||||
missing_words.append(row.iloc[0])
|
||||
|
||||
print("\n" + "="*60)
|
||||
if len(missing_words) == 0:
|
||||
print("✅ 所有30-34中的单词都在L2知识库中!")
|
||||
else:
|
||||
print(f"❌ 有 {len(missing_words)} 个单词不在L2知识库中:")
|
||||
for word in missing_words:
|
||||
print(f" - {word}")
|
||||
|
||||
print("\n详细检查结果(前20个):")
|
||||
for idx, row in df3034.head(20).iterrows():
|
||||
word = str(row.iloc[0]).strip().lower()
|
||||
status = "✅" if word in l2_words else "❌"
|
||||
print(f"{idx+1:3d}. {row.iloc[0]:20s} {status}")
|
||||
|
||||
print("\n统计信息:")
|
||||
total = len(df3034)
|
||||
found = total - len(missing_words)
|
||||
print(f"总单词数: {total}")
|
||||
print(f"已在知识库: {found}")
|
||||
print(f"缺失单词: {len(missing_words)}")
|
||||
print(f"覆盖度: {found/total*100:.1f}%")
|
||||
45
check_all_words_v2.py
Normal file
45
check_all_words_v2.py
Normal file
@ -0,0 +1,45 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
# 文件路径
|
||||
file3034 = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/30-34.xlsx'
|
||||
fileL2 = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2知识库-三级+A2.xlsx'
|
||||
|
||||
# 读取文件
|
||||
df3034 = pd.read_excel(file3034)
|
||||
dfL2 = pd.read_excel(fileL2)
|
||||
|
||||
print(f"30-34单词表: {len(df3034)} 个单词")
|
||||
print(f"L2知识库: {len(dfL2)} 个单词")
|
||||
|
||||
# 创建L2单词查找集合
|
||||
l2_words = set(str(word).strip().lower() for word in dfL2.iloc[:, 0])
|
||||
|
||||
# 检查每个单词(在列2"单词"中)
|
||||
missing_words = []
|
||||
for idx, row in df3034.iterrows():
|
||||
word = str(row['单词']).strip().lower()
|
||||
if word not in l2_words:
|
||||
missing_words.append(row['单词'])
|
||||
|
||||
print("\n" + "="*60)
|
||||
if len(missing_words) == 0:
|
||||
print("✅ 所有30-34中的单词都在L2知识库中!")
|
||||
else:
|
||||
print(f"❌ 有 {len(missing_words)} 个单词不在L2知识库中:")
|
||||
for word in missing_words:
|
||||
print(f" - {word}")
|
||||
|
||||
print("\n详细检查结果(前30个):")
|
||||
for idx, row in df3034.head(30).iterrows():
|
||||
word = str(row['单词']).strip().lower()
|
||||
status = "✅" if word in l2_words else "❌"
|
||||
print(f"{idx+1:3d}. {str(row['单词']):30s} {status}")
|
||||
|
||||
print("\n统计信息:")
|
||||
total = len(df3034)
|
||||
found = total - len(missing_words)
|
||||
print(f"总单词数: {total}")
|
||||
print(f"已在知识库: {found}")
|
||||
print(f"缺失单词: {len(missing_words)}")
|
||||
print(f"覆盖度: {found/total*100:.1f}%")
|
||||
30
check_available.py
Normal file
30
check_available.py
Normal file
@ -0,0 +1,30 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
file_l2 = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2新版独有单词.xlsx'
|
||||
file_kb = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2知识库-三级+A2.xlsx'
|
||||
|
||||
df_l2 = pd.read_excel(file_l2)
|
||||
df_kb = pd.read_excel(file_kb)
|
||||
|
||||
print("=== L2新版独有单词 ===")
|
||||
print(f"行数: {len(df_l2)}, 列数: {len(df_l2.columns)}")
|
||||
print(f"列名: {list(df_l2.columns)}")
|
||||
print(df_l2.head(3).to_string())
|
||||
print()
|
||||
|
||||
print("=== L2知识库-三级+A2 ===")
|
||||
print(f"行数: {len(df_kb)}, 列数: {len(df_kb.columns)}")
|
||||
print(f"列名: {list(df_kb.columns)}")
|
||||
print(df_kb.head(3).to_string())
|
||||
print()
|
||||
|
||||
# 查看"可用"列的内容
|
||||
if '可用' in df_l2.columns:
|
||||
print("=== 可用列的值分布 ===")
|
||||
print(df_l2['可用'].value_counts())
|
||||
print()
|
||||
# 找出可用=1的行
|
||||
available = df_l2[df_l2['可用'] == 1]
|
||||
print(f"可用=1的行数: {len(available)}")
|
||||
print(available.to_string())
|
||||
43
check_final.py
Normal file
43
check_final.py
Normal file
@ -0,0 +1,43 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
# 文件路径
|
||||
file3034 = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/30-34.xlsx'
|
||||
fileL2 = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2知识库-三级+A2.xlsx'
|
||||
|
||||
# 读取文件
|
||||
df3034 = pd.read_excel(file3034)
|
||||
dfL2 = pd.read_excel(fileL2)
|
||||
|
||||
print(f"30-34单词表: {len(df3034)} 个单词")
|
||||
print(f"L2知识库: {len(dfL2)} 个单词")
|
||||
|
||||
# 创建L2单词查找集合
|
||||
l2_words = set(str(word).strip().lower() for word in dfL2.iloc[:, 0])
|
||||
|
||||
# 检查每个单词
|
||||
missing_words = []
|
||||
for idx, row in df3034.iterrows():
|
||||
word = str(row['单词']).strip().lower()
|
||||
if word not in l2_words:
|
||||
missing_words.append(row)
|
||||
|
||||
print("\n" + "="*60)
|
||||
if len(missing_words) == 0:
|
||||
print("✅ 所有30-34中的单词都在L2知识库中!")
|
||||
else:
|
||||
print(f"❌ 还有 {len(missing_words)} 个单词不在L2知识库中:")
|
||||
print("-"*60)
|
||||
print(f"{'单词':<30} {'词性':<10} {'中文释义'}")
|
||||
print("-"*60)
|
||||
for row in missing_words:
|
||||
print(f"{str(row['单词']):<30} {str(row['词性']):<10} {str(row['释义'])}")
|
||||
|
||||
print("\n" + "="*60)
|
||||
print("统计信息:")
|
||||
total = len(df3034)
|
||||
found = total - len(missing_words)
|
||||
print(f"总单词数: {total}")
|
||||
print(f"已在知识库: {found}")
|
||||
print(f"缺失单词: {len(missing_words)}")
|
||||
print(f"覆盖度: {found/total*100:.1f}%")
|
||||
14
check_kb_structure.py
Normal file
14
check_kb_structure.py
Normal file
@ -0,0 +1,14 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
file_kb = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2知识库-三级+A2.xlsx'
|
||||
df = pd.read_excel(file_kb)
|
||||
|
||||
print(f"行数: {len(df)}, 列数: {len(df.columns)}")
|
||||
print(f"列名: {list(df.columns)}")
|
||||
print()
|
||||
print("前5行:")
|
||||
print(df.head(5).to_string())
|
||||
print()
|
||||
print("后5行:")
|
||||
print(df.tail(5).to_string())
|
||||
21
check_result.py
Normal file
21
check_result.py
Normal file
@ -0,0 +1,21 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
outputFile = r'/root/.openclaw/workspace-xiaoyan/output/30-34标注完成.xlsx'
|
||||
|
||||
# 读取结果文件
|
||||
df = pd.read_excel(outputFile)
|
||||
|
||||
print("=== 结果文件样例 ===")
|
||||
print(f"列名: {df.columns.tolist()}")
|
||||
print(f"\n前20行数据:")
|
||||
print(df.head(20))
|
||||
|
||||
# 统计一下
|
||||
yes_count = (df['是否三级'].str.contains('【是】')).sum()
|
||||
no_count = len(df) - yes_count
|
||||
|
||||
print(f"\n\n=== 统计结果 ===")
|
||||
print(f"总单词数: {len(df)}")
|
||||
print(f"是三级词汇: {yes_count}")
|
||||
print(f"不是三级词汇: {no_count}")
|
||||
19
check_structures.py
Normal file
19
check_structures.py
Normal file
@ -0,0 +1,19 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
file_l2 = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2新版独有单词.xlsx'
|
||||
file_l1 = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L1完整.xlsx'
|
||||
|
||||
df_l2 = pd.read_excel(file_l2)
|
||||
df_l1 = pd.read_excel(file_l1)
|
||||
|
||||
print("=== L2新版独有单词 ===")
|
||||
print(f"行数: {len(df_l2)}, 列数: {len(df_l2.columns)}")
|
||||
print(f"列名: {list(df_l2.columns)}")
|
||||
print(df_l2.head(5).to_string())
|
||||
print()
|
||||
|
||||
print("=== L1完整 ===")
|
||||
print(f"行数: {len(df_l1)}, 列数: {len(df_l1.columns)}")
|
||||
print(f"列名: {list(df_l1.columns)}")
|
||||
print(df_l1.head(5).to_string())
|
||||
48
classify_l2.py
Normal file
48
classify_l2.py
Normal file
File diff suppressed because one or more lines are too long
71
compare_l1_l2.py
Normal file
71
compare_l1_l2.py
Normal file
@ -0,0 +1,71 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
# 文件路径
|
||||
l2_file = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2知识库-三级+A2.xlsx'
|
||||
l1_file = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L1完整.xlsx'
|
||||
|
||||
# 读取文件
|
||||
l2_df = pd.read_excel(l2_file)
|
||||
l1_df = pd.read_excel(l1_file)
|
||||
|
||||
print("L2文件列名:", l2_df.columns.tolist())
|
||||
print(f"L2行数: {len(l2_df)}")
|
||||
print("\nL1文件列名:", l1_df.columns.tolist())
|
||||
print(f"L1行数: {len(l1_df)}")
|
||||
|
||||
# 创建L1单词查找字典(小写为key)
|
||||
l1_dict = {}
|
||||
for idx, row in l1_df.iterrows():
|
||||
word = str(row.iloc[0]).strip().lower()
|
||||
pos = row.iloc[1] if len(row) > 1 else ""
|
||||
meaning = row.iloc[2] if len(row) > 2 else ""
|
||||
l1_dict[word] = {
|
||||
"row": idx + 2, # Excel从第2行开始
|
||||
"pos": pos,
|
||||
"meaning": meaning
|
||||
}
|
||||
|
||||
# 处理L2表格
|
||||
is_l1 = []
|
||||
l1_rows = []
|
||||
l1_pos = []
|
||||
l1_meaning = []
|
||||
|
||||
for idx, row in l2_df.iterrows():
|
||||
word = str(row.iloc[0]).strip().lower()
|
||||
if word in l1_dict:
|
||||
info = l1_dict[word]
|
||||
is_l1.append("是")
|
||||
l1_rows.append(info["row"])
|
||||
l1_pos.append(info["pos"])
|
||||
l1_meaning.append(info["meaning"])
|
||||
else:
|
||||
is_l1.append("否")
|
||||
l1_rows.append("")
|
||||
l1_pos.append("")
|
||||
l1_meaning.append("")
|
||||
|
||||
# 添加新列
|
||||
l2_df["是否为L1单词"] = is_l1
|
||||
l2_df["在L1中的行数"] = l1_rows
|
||||
l2_df["L1词性"] = l1_pos
|
||||
l2_df["L1词义"] = l1_meaning
|
||||
|
||||
# 保存结果
|
||||
l2_df.to_excel(l2_file, index=False)
|
||||
|
||||
# 统计
|
||||
count_yes = is_l1.count("是")
|
||||
count_no = is_l1.count("否")
|
||||
|
||||
print("\n" + "="*50)
|
||||
print(f"比对完成!")
|
||||
print(f"L1单词总数: {len(l1_df)}")
|
||||
print(f"L2单词总数: {len(l2_df)}")
|
||||
print(f"重复单词数: {count_yes}")
|
||||
print(f"不重复单词数: {count_no}")
|
||||
print(f"重复率: {count_yes/len(l2_df)*100:.2f}%")
|
||||
print("="*50)
|
||||
|
||||
print("\n保存成功!已更新 L2知识库-三级+A2.xlsx")
|
||||
31
compare_new_vs_old.py
Normal file
31
compare_new_vs_old.py
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
file_new = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2新版_L1重复标记.xlsx'
|
||||
file_old = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2知识库-三级+A2.xlsx'
|
||||
|
||||
df_new = pd.read_excel(file_new)
|
||||
df_old = pd.read_excel(file_old)
|
||||
|
||||
old_words = set(str(w).strip().lower() for w in df_old.iloc[:, 0])
|
||||
|
||||
only_in_new = []
|
||||
for idx, row in df_new.iterrows():
|
||||
word = str(row['单词']).strip().lower()
|
||||
if word not in old_words:
|
||||
only_in_new.append(row)
|
||||
|
||||
print(f"L2新版总单词数: {len(df_new)}")
|
||||
print(f"L2知识库总单词数: {len(df_old)}")
|
||||
print(f"\nL2新版中存在但L2知识库中不存在的单词: {len(only_in_new)} 个")
|
||||
|
||||
# 保存到文件
|
||||
with open('/root/.openclaw/workspace-xiaoyan/only_in_new.txt', 'w', encoding='utf-8') as f:
|
||||
f.write(f"L2新版中存在但L2知识库中不存在的单词: {len(only_in_new)} 个\n")
|
||||
f.write("=" * 60 + "\n")
|
||||
f.write(f"{'序号':<5} {'单词':<35} {'词性':<12} {'词义'}\n")
|
||||
f.write("-" * 80 + "\n")
|
||||
for i, row in enumerate(only_in_new, 1):
|
||||
f.write(f"{i:<5} {str(row['单词']):<35} {str(row['词性']):<12} {str(row['词义'])}\n")
|
||||
|
||||
print("\n完整列表已保存到 only_in_new.txt")
|
||||
@ -1,41 +0,0 @@
|
||||
import pandas as pd
|
||||
|
||||
# 文件路径
|
||||
file1_path = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/新知识库初版/全包词汇/L2知识库-三级+A2.xlsx'
|
||||
file2_path = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/新知识库初版/全包词汇/KET和三级不重复.xlsx'
|
||||
|
||||
# 读取两个文件
|
||||
df1 = pd.read_excel(file1_path)
|
||||
df2 = pd.read_excel(file2_path)
|
||||
|
||||
print("文件1 (L2知识库-三级+A2.xlsx) 的列名:")
|
||||
print(df1.columns.tolist())
|
||||
print("\n文件1 的前5行:")
|
||||
print(df1.head())
|
||||
|
||||
print("\n" + "="*80 + "\n")
|
||||
|
||||
print("文件2 (KET和三级不重复.xlsx) 的列名:")
|
||||
print(df2.columns.tolist())
|
||||
print("\n文件2 的前5行:")
|
||||
print(df2.head())
|
||||
|
||||
# 提取文件1中的单词(第一列)
|
||||
words_from_file1 = set(df1.iloc[:, 0].astype(str).str.strip().str.lower())
|
||||
|
||||
# 在文件2中新增一列,标记重复的单词
|
||||
df2['是否与L2三级+A2重复'] = df2.iloc[:, 0].apply(lambda x: '是' if str(x).strip().lower() in words_from_file1 else '')
|
||||
|
||||
# 统计重复数量
|
||||
duplicate_count = (df2['是否与L2三级+A2重复'] == '是').sum()
|
||||
total_count = len(df2)
|
||||
|
||||
print(f"\n" + "="*80)
|
||||
print(f"总单词数:{total_count}")
|
||||
print(f"重复单词数:{duplicate_count}")
|
||||
print(f"重复率:{duplicate_count/total_count*100:.2f}%")
|
||||
|
||||
# 保存结果
|
||||
df2.to_excel(file2_path, index=False)
|
||||
print(f"\n已更新文件:{file2_path}")
|
||||
print("新增列名:是否与L2三级+A2重复")
|
||||
9
dump_all_words.py
Normal file
9
dump_all_words.py
Normal file
@ -0,0 +1,9 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
file_kb = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2知识库-三级+A2.xlsx'
|
||||
df = pd.read_excel(file_kb)
|
||||
|
||||
# 查看所有单词和词义
|
||||
for i, row in df.iterrows():
|
||||
print(f"{i}: {str(row['单词']):<30} {str(row['词性']):<10} {str(row['中文释义'])}")
|
||||
12
dump_words.py
Normal file
12
dump_words.py
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
file_kb = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2知识库-三级+A2.xlsx'
|
||||
df = pd.read_excel(file_kb)
|
||||
|
||||
# 查看所有单词,保存到文件以便分析
|
||||
with open('/root/.openclaw/workspace-xiaoyan/all_words_dump.txt', 'w', encoding='utf-8') as f:
|
||||
for i, row in df.iterrows():
|
||||
f.write(f"{i}\t{str(row['单词'])}\t{str(row['词性'])}\t{str(row['中文释义'])}\n")
|
||||
|
||||
print(f"已导出 {len(df)} 个单词到 all_words_dump.txt")
|
||||
30
export_only_in_new.py
Normal file
30
export_only_in_new.py
Normal file
@ -0,0 +1,30 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
file_new = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2新版_L1重复标记.xlsx'
|
||||
file_old = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2知识库-三级+A2.xlsx'
|
||||
|
||||
df_new = pd.read_excel(file_new)
|
||||
df_old = pd.read_excel(file_old)
|
||||
|
||||
old_words = set(str(w).strip().lower() for w in df_old.iloc[:, 0])
|
||||
|
||||
only_in_new = []
|
||||
for idx, row in df_new.iterrows():
|
||||
word = str(row['单词']).strip().lower()
|
||||
if word not in old_words:
|
||||
only_in_new.append({
|
||||
'单词': row['单词'],
|
||||
'词性': row['词性'],
|
||||
'词义': row['词义']
|
||||
})
|
||||
|
||||
df_result = pd.DataFrame(only_in_new)
|
||||
|
||||
output_path = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2新版独有单词.xlsx'
|
||||
df_result.to_excel(output_path, index=False)
|
||||
|
||||
print(f"L2新版总单词数: {len(df_new)}")
|
||||
print(f"L2知识库总单词数: {len(df_old)}")
|
||||
print(f"L2新版中存在但L2知识库中不存在的单词: {len(df_result)} 个")
|
||||
print(f"\n已保存至: {output_path}")
|
||||
29
find_music_words.py
Normal file
29
find_music_words.py
Normal file
@ -0,0 +1,29 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
file_path = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2知识库-三级+A2.xlsx'
|
||||
df = pd.read_excel(file_path)
|
||||
|
||||
music_keywords = ['唱歌', '音乐', '歌曲', '歌', '唱', '乐器', '钢琴', '吉他', '小提琴', '鼓',
|
||||
'演奏', '乐队', '音乐会', '演唱会', '旋律', '节奏', '音符', '录音', '歌手',
|
||||
'sing', 'song', 'music', 'musical', 'piano', 'guitar', 'violin', 'drum',
|
||||
'band', 'concert', 'melody', 'rhythm', 'note', 'record', 'singer', 'musician',
|
||||
'instrument', 'listen', 'sound', 'voice', 'choir', 'opera', 'jazz',
|
||||
'rock', 'pop', 'dance', 'rap', 'tune', 'lyric', 'album', 'audio']
|
||||
|
||||
results = []
|
||||
for idx, row in df.iterrows():
|
||||
word = str(row.iloc[0]).strip().lower()
|
||||
meaning = str(row.iloc[2]).strip().lower() if len(row) > 2 else ''
|
||||
for kw in music_keywords:
|
||||
if kw in word or kw in meaning:
|
||||
results.append(row)
|
||||
break
|
||||
|
||||
print(f"L2知识库总单词数: {len(df)}")
|
||||
print(f"\n🎵 唱歌/音乐相关单词 ({len(results)} 个):")
|
||||
print("-" * 60)
|
||||
print(f"{'单词':<25} {'词性':<10} {'中文释义'}")
|
||||
print("-" * 60)
|
||||
for row in sorted(results, key=lambda x: str(x.iloc[0]).lower()):
|
||||
print(f"{str(row.iloc[0]):<25} {str(row.iloc[1]):<10} {str(row.iloc[2])}")
|
||||
54
mark_l1_in_l2new.py
Normal file
54
mark_l1_in_l2new.py
Normal file
@ -0,0 +1,54 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
file_l2 = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2新版独有单词.xlsx'
|
||||
file_l1 = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L1完整.xlsx'
|
||||
|
||||
df_l2 = pd.read_excel(file_l2)
|
||||
df_l1 = pd.read_excel(file_l1)
|
||||
|
||||
l1_words = {}
|
||||
for idx, row in df_l1.iterrows():
|
||||
word = str(row['单词']).strip().lower()
|
||||
if word not in l1_words:
|
||||
l1_words[word] = []
|
||||
l1_words[word].append({
|
||||
'row': idx + 2,
|
||||
'词性': row['词性'],
|
||||
'词义': row['词义']
|
||||
})
|
||||
|
||||
is_l1_list = []
|
||||
l1_row_list = []
|
||||
l1_pos_list = []
|
||||
l1_meaning_list = []
|
||||
|
||||
for idx, row in df_l2.iterrows():
|
||||
word = str(row['单词']).strip().lower()
|
||||
if word in l1_words:
|
||||
is_l1_list.append('是')
|
||||
matches = l1_words[word]
|
||||
l1_row_list.append(', '.join(str(m['row']) for m in matches))
|
||||
l1_pos_list.append(', '.join(str(m['词性']) for m in matches))
|
||||
l1_meaning_list.append(', '.join(str(m['词义']) for m in matches))
|
||||
else:
|
||||
is_l1_list.append('否')
|
||||
l1_row_list.append('')
|
||||
l1_pos_list.append('')
|
||||
l1_meaning_list.append('')
|
||||
|
||||
df_l2['是否为L1单词'] = is_l1_list
|
||||
df_l2['L1行数'] = l1_row_list
|
||||
df_l2['L1词性'] = l1_pos_list
|
||||
df_l2['L1词义'] = l1_meaning_list
|
||||
|
||||
output_path = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/L2新版独有单词.xlsx'
|
||||
df_l2.to_excel(output_path, index=False)
|
||||
|
||||
count_yes = sum(1 for v in is_l1_list if v == '是')
|
||||
count_no = sum(1 for v in is_l1_list if v == '否')
|
||||
|
||||
print(f"L2新版独有单词总数: {len(df_l2)}")
|
||||
print(f"在L1中存在的: {count_yes} 个")
|
||||
print(f"不在L1中的: {count_no} 个")
|
||||
print(f"\n已保存至: {output_path}")
|
||||
@ -95,3 +95,9 @@
|
||||
{"type":"memory.recall.recorded","timestamp":"2026-06-05T03:37:55.029Z","query":"武钰涵 ou_a4aaa641585b38d1042608b9b7f05a17","resultCount":1,"results":[{"path":"memory/2026-05-27.md","startLine":1,"endLine":16,"score":1}]}
|
||||
{"type":"memory.recall.recorded","timestamp":"2026-06-08T02:24:34.295Z","query":"L2 听力 题型 能力标签 Flyers KET 单元分布","resultCount":2,"results":[{"path":"memory/2026-05-25.md","startLine":283,"endLine":302,"score":1},{"path":"memory/2026-05-25.md","startLine":118,"endLine":137,"score":1}]}
|
||||
{"type":"memory.recall.recorded","timestamp":"2026-06-08T02:24:43.647Z","query":"L2 听力题型 能力标签 ability tag listening 图片选择 表格填空 长对话 短对话 信息匹配","resultCount":2,"results":[{"path":"memory/2026-05-25.md","startLine":283,"endLine":302,"score":1},{"path":"memory/2026-05-25.md","startLine":118,"endLine":137,"score":1}]}
|
||||
{"type":"memory.recall.recorded","timestamp":"2026-06-09T06:52:09.582Z","query":"雨橦 user_id 飞书","resultCount":2,"results":[{"path":"memory/2026-05-07.md","startLine":57,"endLine":74,"score":1},{"path":"memory/2026-05-07.md","startLine":71,"endLine":88,"score":1}]}
|
||||
{"type":"memory.recall.recorded","timestamp":"2026-06-09T07:14:02.277Z","query":"组件生产 中互动 问题 优化 上下文对话 前置后置","resultCount":2,"results":[{"path":"memory/2026-05-07.md","startLine":354,"endLine":368,"score":1},{"path":"memory/2026-04-22.md","startLine":1,"endLine":8,"score":1}]}
|
||||
{"type":"memory.recall.recorded","timestamp":"2026-06-09T07:21:33.704Z","query":"互动内容库 bitable app_token 配置多维表格","resultCount":4,"results":[{"path":"memory/2026-05-12.md","startLine":61,"endLine":80,"score":1},{"path":"memory/2026-05-18.md","startLine":305,"endLine":346,"score":1},{"path":"memory/2026-05-12.md","startLine":101,"endLine":121,"score":1},{"path":"memory/2026-05-18.md","startLine":783,"endLine":810,"score":1}]}
|
||||
{"type":"memory.recall.recorded","timestamp":"2026-06-09T07:22:27.500Z","query":"互动内容库 app_token 多维表格 bitable 配置","resultCount":4,"results":[{"path":"memory/2026-05-12.md","startLine":61,"endLine":80,"score":1},{"path":"memory/2026-05-18.md","startLine":305,"endLine":346,"score":1},{"path":"memory/2026-05-12.md","startLine":101,"endLine":121,"score":1},{"path":"memory/2026-05-18.md","startLine":783,"endLine":810,"score":1}]}
|
||||
{"type":"memory.recall.recorded","timestamp":"2026-06-09T08:37:12.232Z","query":"core_speaking_image bitable app token 多维表格","resultCount":3,"results":[{"path":"memory/2026-05-12.md","startLine":164,"endLine":187,"score":1},{"path":"memory/2026-05-12.md","startLine":214,"endLine":236,"score":1},{"path":"memory/2026-05-12.md","startLine":234,"endLine":254,"score":1}]}
|
||||
{"type":"memory.recall.recorded","timestamp":"2026-06-09T08:37:27.121Z","query":"core_speaking_image bitable_token app_token 多维表格 核心互动","resultCount":3,"results":[{"path":"memory/2026-05-12.md","startLine":164,"endLine":187,"score":1},{"path":"memory/2026-05-12.md","startLine":214,"endLine":236,"score":1},{"path":"memory/2026-05-12.md","startLine":234,"endLine":254,"score":1}]}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"version": 1,
|
||||
"updatedAt": "2026-06-08T02:24:43.647Z",
|
||||
"updatedAt": "2026-06-09T08:37:27.121Z",
|
||||
"entries": {
|
||||
"memory:memory/2026-05-07.md:57:74": {
|
||||
"key": "memory:memory/2026-05-07.md:57:74",
|
||||
@ -9,20 +9,22 @@
|
||||
"endLine": 74,
|
||||
"source": "memory",
|
||||
"snippet": "3. **第三轮(用户要求重新发送三份文件后重算):** 最终确认 **表1有但表2表3都没有 = 255个** - **第三轮详细统计:** - 三表共有:230 - 表1 ∩ 表2:492 - 表1 ∩ 表3:448 - 表2 ∩ 表3:427 - 表1有,表2没有:472(其中217个表3也有) - 最终:255个 - **关键发现:** - 表1(分类词表)覆盖了大量基础生活词汇,表3(L1词表)覆盖了其中的448个 - 最终的255个独有词主要集中在:抽象名词(advantage, attitude, courage)、学术/学科词汇(composition, grammar, pronunciation)、专业/特定领域词(cancer, clone, industry)等偏中高难度的词汇 - 表1和表3有大量重叠(448个),说明两个L1级别的词表覆盖范围高度一致 - 从上一轮260变成255(差5个),差异主要来自表2/表3重新解析后个别单词的增删 - **输出文件:** `/root/.openclaw/workspace-xiaoyan/output/单词对比结果_最终版.xlsx` - Sheet 1:255个单词完整清单(序号+单词+中文释义) - Sheet 2:全部统计指标汇总 - **用户 user_id:** `58fd6864`(租户级) - **发送消息时踩坑记录:** ou_xxx 是 open_id 非 user_id,Bot 缺少 contact:user.id:readonly 权限",
|
||||
"recallCount": 2,
|
||||
"recallCount": 3,
|
||||
"dailyCount": 0,
|
||||
"groundedCount": 0,
|
||||
"totalScore": 1.6621249966506229,
|
||||
"totalScore": 2.662124996650623,
|
||||
"maxScore": 1,
|
||||
"firstRecalledAt": "2026-05-07T08:48:55.437Z",
|
||||
"lastRecalledAt": "2026-05-21T07:31:52.322Z",
|
||||
"lastRecalledAt": "2026-06-09T06:52:09.582Z",
|
||||
"queryHashes": [
|
||||
"c2c576894acd",
|
||||
"dca4eb1f24b7"
|
||||
"dca4eb1f24b7",
|
||||
"84038f5c3181"
|
||||
],
|
||||
"recallDays": [
|
||||
"2026-05-07",
|
||||
"2026-05-21"
|
||||
"2026-05-21",
|
||||
"2026-06-09"
|
||||
],
|
||||
"conceptTags": [
|
||||
"学术/学科词汇",
|
||||
@ -876,13 +878,13 @@
|
||||
"endLine": 368,
|
||||
"source": "memory",
|
||||
"snippet": "- **需求:** 将 020102(I am...)和 020103(I am ready / Thank you)两套题合并为一个 `{first:..., second:...}` JSON,统一 questionSetID=0000001 - **状态:** ✅ 已完成 - **核心考点分析(用户强调):** 需分析每个句型的核心考点(孩子最容易犯错的地方),挖空对准核心考点 - I am/from 组:am(系动词第一人称)、from(介词选择)、student(a+名词结构) - Thank you for 组:for(介词选择,非 you)、helping(for+动名词,非 help/to help) - **输出文件:** `output/writing_pic_qa_combined.json` ### 刘彦江 — 组件配置-json 请求(L1-S2-U13-L4 沙漠之花) - **时间:** 16:45 ~ 17:51 - **文档:** `https://makee-interactive.feishu.cn/wiki/K5E1wzwk7it9t7kXvcbc6Xugnhc` - **状态:** ⚠️ 未完成 — pipeline 识别到 0 组件 - **根因:** 剧本文档的13个组件数据存储在 markdown 内联表格中(lark-table,5列×36行),而非内嵌 Sheet。当前 pipeline 的 parse_script 只从内嵌 Sheet 读取组件数据,不支持 markdown 表格组件解析 - **已识别组件(ma",
|
||||
"recallCount": 15,
|
||||
"recallCount": 16,
|
||||
"dailyCount": 0,
|
||||
"groundedCount": 0,
|
||||
"totalScore": 15,
|
||||
"totalScore": 16,
|
||||
"maxScore": 1,
|
||||
"firstRecalledAt": "2026-05-15T07:13:08.147Z",
|
||||
"lastRecalledAt": "2026-06-04T06:34:06.417Z",
|
||||
"lastRecalledAt": "2026-06-09T07:14:02.277Z",
|
||||
"queryHashes": [
|
||||
"08364c8746ab",
|
||||
"4f08741ab4fd",
|
||||
@ -898,7 +900,8 @@
|
||||
"f53c9769e692",
|
||||
"5d025e291984",
|
||||
"472b243ec77c",
|
||||
"fd4c8aca2cb6"
|
||||
"fd4c8aca2cb6",
|
||||
"5319f16d7a0d"
|
||||
],
|
||||
"recallDays": [
|
||||
"2026-05-15",
|
||||
@ -908,7 +911,8 @@
|
||||
"2026-05-25",
|
||||
"2026-05-28",
|
||||
"2026-06-01",
|
||||
"2026-06-04"
|
||||
"2026-06-04",
|
||||
"2026-06-09"
|
||||
],
|
||||
"conceptTags": [
|
||||
"am/from",
|
||||
@ -928,13 +932,13 @@
|
||||
"endLine": 8,
|
||||
"source": "memory",
|
||||
"snippet": "[李应瑛 2026-04-22 提出要求] 所有需要包含对话的内容(如剧本、互动组件等)必须要有【后置对话】字段,无后置对话时填写“无”。 [李应瑛 2026-04-22 确认规则] 剧本内嵌表格组件填写位置规则:仅当表格第一列(A列)明确标注为对话类类型(对话朗读/对话挖空/对话选读/对话组句等)时,才在同一行的H列(【组件】列)填写对应的组件内容,其他类型行(TL/场景/角色/图片/非对话类等)无需填写。 [李应瑛 2026-04-22 确认格式规则] 对话类组件字段换行规则:每个结构单独占一行,格式为: 【任务标题】xxx 【情境引入】xxx 【互动内容】xxx 【后置对话】xxx 单元格内使用\\n作为换行符实现,后续所有组件均遵循此格式。",
|
||||
"recallCount": 13,
|
||||
"recallCount": 14,
|
||||
"dailyCount": 0,
|
||||
"groundedCount": 0,
|
||||
"totalScore": 13,
|
||||
"totalScore": 14,
|
||||
"maxScore": 1,
|
||||
"firstRecalledAt": "2026-05-15T07:13:08.147Z",
|
||||
"lastRecalledAt": "2026-06-04T06:34:06.417Z",
|
||||
"lastRecalledAt": "2026-06-09T07:14:02.277Z",
|
||||
"queryHashes": [
|
||||
"08364c8746ab",
|
||||
"4f08741ab4fd",
|
||||
@ -948,7 +952,8 @@
|
||||
"229e5d3943bb",
|
||||
"5d025e291984",
|
||||
"472b243ec77c",
|
||||
"fd4c8aca2cb6"
|
||||
"fd4c8aca2cb6",
|
||||
"5319f16d7a0d"
|
||||
],
|
||||
"recallDays": [
|
||||
"2026-05-15",
|
||||
@ -958,7 +963,8 @@
|
||||
"2026-05-25",
|
||||
"2026-05-28",
|
||||
"2026-06-01",
|
||||
"2026-06-04"
|
||||
"2026-06-04",
|
||||
"2026-06-09"
|
||||
],
|
||||
"conceptTags": [
|
||||
"对话朗读/对话挖空/对话选读/对话组句等",
|
||||
@ -1756,20 +1762,23 @@
|
||||
"endLine": 346,
|
||||
"source": "memory",
|
||||
"snippet": "## 口语-P1 审校([刘彦江]) ### 范围 QSID: 121301, 121401, 121501(口语-P1-日常回答,tblRGv7k4WH58Jgq) ### 发现问题 - **121301**: 6题 ability 全空 - **121401**: ability 重复(\"听觉抓取关键信息\"×2)+ 标签偏向听力而非口语 - **121501**: 6题 ability 全空 - answer 为空 → 正常(speaking_qa 参考回答在 explanation 内) ### 修复 - 全部补充/替换为口语向标签(语用表达能力等) - 3/3 审校结果列更新为 `✅ OK | 2026-05-18 小研审校` ### Record ID 映射 | QSID | Record ID | |------|-----------| | 121301 | recvjW9RVwziwL | | 121401 | recvjW9RVwGzba | | 121501 | recvjW9RVwj4aQ | --- ## 听力-P1 图片选择题 生产+回填+审校([刘彦江]) ### 范围 QSID: 121301, 121401, 121501(听力-P1-图片选择题) 难度: L1 B级 ### 词汇词库命中率 29个词中仅6个在L1/L2词库(sofa, zoo, study, play, mat, mouth),23个超纲。 业务负责人放行,优先生产,词库后补。 ### 产出 | QSID | Record ID | 词表(first/seco",
|
||||
"recallCount": 2,
|
||||
"recallCount": 4,
|
||||
"dailyCount": 0,
|
||||
"groundedCount": 0,
|
||||
"totalScore": 2,
|
||||
"totalScore": 4,
|
||||
"maxScore": 1,
|
||||
"firstRecalledAt": "2026-05-20T11:03:34.460Z",
|
||||
"lastRecalledAt": "2026-05-25T08:53:31.758Z",
|
||||
"lastRecalledAt": "2026-06-09T07:22:27.500Z",
|
||||
"queryHashes": [
|
||||
"81867276810d",
|
||||
"12653110bb68"
|
||||
"12653110bb68",
|
||||
"ff0d0637f255",
|
||||
"f525b14a0c5b"
|
||||
],
|
||||
"recallDays": [
|
||||
"2026-05-20",
|
||||
"2026-05-25"
|
||||
"2026-05-25",
|
||||
"2026-06-09"
|
||||
],
|
||||
"conceptTags": [
|
||||
"口语-p1",
|
||||
@ -1956,19 +1965,21 @@
|
||||
"endLine": 88,
|
||||
"source": "memory",
|
||||
"snippet": "- Sheet 1:255个单词完整清单(序号+单词+中文释义) - Sheet 2:全部统计指标汇总 - **用户 user_id:** `58fd6864`(租户级) - **发送消息时踩坑记录:** ou_xxx 是 open_id 非 user_id,Bot 缺少 contact:user.id:readonly 权限,最终通过 lark-cli 其他接口获取到 user_id = 58fd6864 - **备注:** 李应瑛不在负责人配置中,不在完整权限用户列表中。当前请求属于教研内容分析,已先接单处理。 # 2026-05-07 工作日志 ## 会话记录 ### 李应瑛 (ou_1bd7317ae2ccfeb57e1132028847279e) — 单词表三轮对比(已完结) - **时间:** 10:39 ~ 11:24 - **需求:** 对比三份单词表,找出\"表1有但表2和表3都没有\"的单词。 - **状态:** ✅ 已完成,结果已交付用户,最终结果 255 个单词,经多次验证(包括用户重新发送文件后重算)结果一致。 - **文件:** - 表1:.doc 文件(分类主题单词表,14个大类,970个单词) - 表2:.xlsx 文件(LV2词表,1,329个单词,含「LV2-单词」「LV2上单词占用情况」「LV2下单词占用情况」「LV2S3」四个sheet) - 表3:.xlsx 文件(L1词表,845个单词,含「单词表-LV1(上)」「单词表-LV1(下)」「单词表-备用」三个sheet合并去重) - **对比过程(共四轮验证):**",
|
||||
"recallCount": 2,
|
||||
"recallCount": 3,
|
||||
"dailyCount": 0,
|
||||
"groundedCount": 0,
|
||||
"totalScore": 2,
|
||||
"totalScore": 3,
|
||||
"maxScore": 1,
|
||||
"firstRecalledAt": "2026-05-21T07:31:52.322Z",
|
||||
"lastRecalledAt": "2026-05-21T09:52:45.581Z",
|
||||
"lastRecalledAt": "2026-06-09T06:52:09.582Z",
|
||||
"queryHashes": [
|
||||
"dca4eb1f24b7",
|
||||
"fcca27e77e74"
|
||||
"fcca27e77e74",
|
||||
"84038f5c3181"
|
||||
],
|
||||
"recallDays": [
|
||||
"2026-05-21"
|
||||
"2026-05-21",
|
||||
"2026-06-09"
|
||||
],
|
||||
"conceptTags": [
|
||||
"user-id",
|
||||
@ -3156,6 +3167,198 @@
|
||||
"彦江",
|
||||
"教研"
|
||||
]
|
||||
},
|
||||
"memory:memory/2026-05-12.md:61:80": {
|
||||
"key": "memory:memory/2026-05-12.md:61:80",
|
||||
"path": "memory/2026-05-12.md",
|
||||
"startLine": 61,
|
||||
"endLine": 80,
|
||||
"source": "memory",
|
||||
"snippet": "- **脚本修复(过程中):** 1. sentenceStructureSort 单词对比大小写误报 → 添加 normalize(首字母大写 + 去标点) 2. ID 末尾空格敏感 → strip 比较 3. 句子朗读/跟读题误报 options/answer 缺失 → 跳过这两种题型 #### 审校结果汇总 - **🔴 系统性问题(40/40,100%):** classificationInfo JSON 内 cambridgeLevel=\"A1\" 与 cefrLevel=\"YLE\" 值互换,列字段正确但 JSON 存储写反,疑似模板/formula 级别 bug - **🟡 具体错误(17/40):** - sentenceMeaningMeaning JSON 解析失败 × 10:1213004, 1213006, 1213010, 1214008, 1215005, 1216001, 1216004, 1216007, 1216008, 1216010(后8题含中文引号冲突) - ID 字段末尾空格 × 3:1213001, 1215001, 1216001 - 看图选择题有CN无JSON × 3:1213008, 1215010, 1216005 - sentenceStructureSort 语法/格式错误 × 3:1213004(缺逗号clean Otis→clean, Otis), 1213005(bird?连写应拆为bird+?), 1214001(need→needs三单) - 缺少 pointId 字段 × 1:",
|
||||
"recallCount": 2,
|
||||
"dailyCount": 0,
|
||||
"groundedCount": 0,
|
||||
"totalScore": 2,
|
||||
"maxScore": 1,
|
||||
"firstRecalledAt": "2026-06-09T07:21:33.704Z",
|
||||
"lastRecalledAt": "2026-06-09T07:22:27.500Z",
|
||||
"queryHashes": [
|
||||
"ff0d0637f255",
|
||||
"f525b14a0c5b"
|
||||
],
|
||||
"recallDays": [
|
||||
"2026-06-09"
|
||||
],
|
||||
"conceptTags": [
|
||||
"句子朗读/跟读题误报",
|
||||
"options/answer",
|
||||
"40/40",
|
||||
"疑似模板/formula",
|
||||
"17/40",
|
||||
"语法/格式错误",
|
||||
"脚本",
|
||||
"修复"
|
||||
]
|
||||
},
|
||||
"memory:memory/2026-05-12.md:101:121": {
|
||||
"key": "memory:memory/2026-05-12.md:101:121",
|
||||
"path": "memory/2026-05-12.md",
|
||||
"startLine": 101,
|
||||
"endLine": 121,
|
||||
"source": "memory",
|
||||
"snippet": "3. ⚠️ sentenceStructureClozeWordMcq: \"put your toys\" 省略 away 不够自然 - **技能沉淀:** - 脚本: `scripts/audit_l1_config.py` — 7项自动检查 - SKILL.md: `business_production/_shared/audit_l1_config/SKILL.md` — 含完整审校流程 + 4项人工审核清单 ### 刘彦江 — 1213001-1216010 批量审校 40 条(12:10 ~ 14:00) - **范围:** L1S2 Units 13-16,每单元 10 条,共 40 条 - **方法:** `scripts/audit_l1_config.py` 自动化扫描 → 误报排除 → 分类汇总 → 逐条审校回填 - **脚本修复(过程中):** 1. sentenceStructureSort 单词对比大小写误报 → 添加 normalize(首字母大写 + 去标点) 2. ID 末尾空格敏感 → strip 比较 3. 句子朗读/跟读题误报 options/answer 缺失 → 跳过这两种题型 #### 审校结果汇总(初版) - **🔴 系统性问题(40/40,100%):** classificationInfo JSON 内 cambridgeLevel=\"A1\" 与 cefrLevel=\"YLE\" 值互换 - **🟡 具体错误(17/40):** - sentenceMeaningMeaning JSON 解析",
|
||||
"recallCount": 2,
|
||||
"dailyCount": 0,
|
||||
"groundedCount": 0,
|
||||
"totalScore": 2,
|
||||
"maxScore": 1,
|
||||
"firstRecalledAt": "2026-06-09T07:21:33.704Z",
|
||||
"lastRecalledAt": "2026-06-09T07:22:27.500Z",
|
||||
"queryHashes": [
|
||||
"ff0d0637f255",
|
||||
"f525b14a0c5b"
|
||||
],
|
||||
"recallDays": [
|
||||
"2026-06-09"
|
||||
],
|
||||
"conceptTags": [
|
||||
"scripts/audit-l1-config.py",
|
||||
"skill.md",
|
||||
"business-production",
|
||||
"shared/audit-l1-config/skill.md",
|
||||
"1213001-1216010",
|
||||
"13-16",
|
||||
"句子朗读/跟读题误报",
|
||||
"options/answer"
|
||||
]
|
||||
},
|
||||
"memory:memory/2026-05-18.md:783:810": {
|
||||
"key": "memory:memory/2026-05-18.md:783:810",
|
||||
"path": "memory/2026-05-18.md",
|
||||
"startLine": 783,
|
||||
"endLine": 810,
|
||||
"source": "memory",
|
||||
"snippet": "--- ## [李应瑛] L1-S2-U17-L5 笨蛋坏蛋?英文生产(2026-05-18 21:15) ### 背景 李应瑛发送知识库文档 `U1zEwHZaaie07TkjmOOchurgnIh`(L1-S2-U17-L5 笨蛋坏蛋?),要求\"英文生产\"。 ### 文档结构(与L3/L4不同) - Wiki token: `U1zEwHZaaie07TkjmOOchurgnIh` - Spreadsheet token: `DCcKsLbrmhfXgrtB7N2c9GA4ntf` - Script sheet: `wMQVyV`(186行×9列) - Knowledge points sheet: `DCcKsLbrmhfXgrtB7N2c9GA4ntf_NtIcXt` - 列结构:A=类型, D=剧情描述, E=角色名, F=编剧台词(English已填好), **G=组件配置** - 知识点:point, talk, understand, a lot of + `talk to...` / `I can/can't understand...` ### 交互模式差异 - L5 文档 B列/C列 为空,无详细组件类型标签(仅 A=互动/核心互动-口语) - 编剧台词F列已全部填写(英文) - 互动行的 User 台词含红色标注知识点词 ### 完成事项 - 24个互动行全部生成G列配置(组件类型推断:听力挖空、朗读台词、口语表达) - 写入方式:同上 Sheets v2 API - 24/24 全部回读验证通过 ### 脚本 `scripts/write_",
|
||||
"recallCount": 2,
|
||||
"dailyCount": 0,
|
||||
"groundedCount": 0,
|
||||
"totalScore": 2,
|
||||
"maxScore": 1,
|
||||
"firstRecalledAt": "2026-06-09T07:21:33.704Z",
|
||||
"lastRecalledAt": "2026-06-09T07:22:27.500Z",
|
||||
"queryHashes": [
|
||||
"ff0d0637f255",
|
||||
"f525b14a0c5b"
|
||||
],
|
||||
"recallDays": [
|
||||
"2026-06-09"
|
||||
],
|
||||
"conceptTags": [
|
||||
"l1-s2-u17-l5",
|
||||
"与l3/l4不同",
|
||||
"can/can",
|
||||
"b列/c列",
|
||||
"互动/核心互动-口语",
|
||||
"24/24",
|
||||
"scripts/write",
|
||||
"u17"
|
||||
]
|
||||
},
|
||||
"memory:memory/2026-05-12.md:164:187": {
|
||||
"key": "memory:memory/2026-05-12.md:164:187",
|
||||
"path": "memory/2026-05-12.md",
|
||||
"startLine": 164,
|
||||
"endLine": 187,
|
||||
"source": "memory",
|
||||
"snippet": "- **五大分类:** 📖阅读(2) / 🎧听力(3) / 🗣口语(4) / ✏️写作(5) / 未完成(1) - **通用字段提取:** ID/dataStatus/kpStatus/kpInfo/taskData 是所有题型共用的基础结构 #### 覆盖率 - 14 种题型已录入 ✅(1 种无数据:口语探讨) - 4 个一级板块:通用结构 / 题型专区 / 审校规则 / 扩展指南 - 每个题型:cType + bitable 定位 + JSON 字段表 + 结构特点 + 与同类题型的差异说明 #### 发现 - 写作互动和邮件组句 cType 相同(`core_writing_questionMakeSentence`),通过 textInfo 区分素材 - 口语快答/妙问 JSON 结构几乎相同,差异在 prompt 配置和对话样例内容 - 合作阅读和合作听力的核心差异:`textData.text[]` ↔ `textData.audio[]` - meaning 标签(合作阅读)为开放型自由文本,非受控词表 #### 产出文件 - `business_production/_shared/bitable-reader/SKILL.md` — 通用 bitable 读取技能(164行) - `business_knowledge/skills/core-content-json-standard/SKILL.md` — 全题型 JSON 标准 v2.0(393行) - `scripts/audit_core_reading_S0.py` — 合作阅读 S0",
|
||||
"recallCount": 2,
|
||||
"dailyCount": 0,
|
||||
"groundedCount": 0,
|
||||
"totalScore": 2,
|
||||
"maxScore": 1,
|
||||
"firstRecalledAt": "2026-06-09T08:37:12.232Z",
|
||||
"lastRecalledAt": "2026-06-09T08:37:27.121Z",
|
||||
"queryHashes": [
|
||||
"91bf4d50e5a2",
|
||||
"b8853a0aafcc"
|
||||
],
|
||||
"recallDays": [
|
||||
"2026-06-09"
|
||||
],
|
||||
"conceptTags": [
|
||||
"口语快答/妙问",
|
||||
"textdata.text",
|
||||
"textdata.audio",
|
||||
"business-production",
|
||||
"shared/bitable-reader/skill.md",
|
||||
"v2.0",
|
||||
"scripts/audit-core-reading-s0.py",
|
||||
"五大"
|
||||
]
|
||||
},
|
||||
"memory:memory/2026-05-12.md:214:236": {
|
||||
"key": "memory:memory/2026-05-12.md:214:236",
|
||||
"path": "memory/2026-05-12.md",
|
||||
"startLine": 214,
|
||||
"endLine": 236,
|
||||
"source": "memory",
|
||||
"snippet": "- **产出 Skill 2:** `business_knowledge/skills/core-content-json-standard/SKILL.md` v2.0 — 全题型 JSON 标准(393行) - **架构:** 通用字段在前(ID/kpInfo/taskData)+ 5大题型分类(📖阅读2 🎧听力3 🗣口语4 ✏️写作5)+ 审校规则 + 扩展指南 - **覆盖率:** 14/15 种题型(口语探讨 S0 无数据) - **产出脚本:** `scripts/audit_core_reading_S0.py` — 合作阅读 S0 审校 ## 经验教训 ### bitable 写入需严格流程管控(2026-05-12) - 批量更新 JSON:写入前完整提取 → 写入后逐字段 diff → 异常立即回滚 - 首次修复多题 JSON 导致 Q2 丢失 → 先单条试跑验证再批量 ### sentenceMeaningMeaning 引号规范(2026-05-12) - explanation 中 ASCII `\"` 与中文引号混用导致 JSON 解析失败 - 建议:生产侧统一用中文引号 `\"\"`(U+201C/D),或写入前做引号归一化 ### 写作互动 / 邮件组句 cType 相同(2026-05-12) - 两者 cType 均为 `core_writing_questionMakeSentence`,通过 textInfo.textList[].type 区分素材 ### 刘彦江 — 中互动全题型录入(18:00 ~ 18:25) ###",
|
||||
"recallCount": 2,
|
||||
"dailyCount": 0,
|
||||
"groundedCount": 0,
|
||||
"totalScore": 2,
|
||||
"maxScore": 1,
|
||||
"firstRecalledAt": "2026-06-09T08:37:12.232Z",
|
||||
"lastRecalledAt": "2026-06-09T08:37:27.121Z",
|
||||
"queryHashes": [
|
||||
"91bf4d50e5a2",
|
||||
"b8853a0aafcc"
|
||||
],
|
||||
"recallDays": [
|
||||
"2026-06-09"
|
||||
],
|
||||
"conceptTags": [
|
||||
"v2.0",
|
||||
"id/kpinfo/taskdata",
|
||||
"14/15",
|
||||
"scripts/audit-core-reading-s0.py",
|
||||
"201c/d",
|
||||
"textinfo.textlist",
|
||||
"skill",
|
||||
"business-knowledge"
|
||||
]
|
||||
},
|
||||
"memory:memory/2026-05-12.md:234:254": {
|
||||
"key": "memory:memory/2026-05-12.md:234:254",
|
||||
"path": "memory/2026-05-12.md",
|
||||
"startLine": 234,
|
||||
"endLine": 254,
|
||||
"source": "memory",
|
||||
"snippet": "#### 发现 - **中互动结构高度统一:** 全部 27 类都用 `jsonData`(主配置)+ `kpInfo`(知识点绑定),没有核心互动那种多字段分散结构 - **6 大分类:** 🗨对话(7) / 📋信息(6) / 📦词汇(2) / 🖼图片选择(4) / 📝语法(3) / 🔧其他(5) - **对话类公共字段:** cType, cId, title, resourceMapping, preDialog, imgShowTimingList - 写作互动和邮件组句 cType 相同(`core_writing_questionMakeSentence`) #### 产出文件 - `skills/interactive-component-json/references/json_structure_guide.md` — 27 种中互动 jsonData 字段结构(8736 bytes) - `skills/interactive-component-json/references/component_registry.md` — 核心互动部分从🔲更新为完整注册表(含 cType+bitable_token) - 与 `business_knowledge/skills/core-content-json-standard/SKILL.md` 双向关联 #### 覆盖率 - 核心互动:15/15 ✅(口语探讨 S0 无数据已标注) - 中互动:27/27 ✅ - 关联文件:3 个(core-content-json-standard + com",
|
||||
"recallCount": 2,
|
||||
"dailyCount": 0,
|
||||
"groundedCount": 0,
|
||||
"totalScore": 2,
|
||||
"maxScore": 1,
|
||||
"firstRecalledAt": "2026-06-09T08:37:12.232Z",
|
||||
"lastRecalledAt": "2026-06-09T08:37:27.121Z",
|
||||
"queryHashes": [
|
||||
"91bf4d50e5a2",
|
||||
"b8853a0aafcc"
|
||||
],
|
||||
"recallDays": [
|
||||
"2026-06-09"
|
||||
],
|
||||
"conceptTags": [
|
||||
"bitable-token",
|
||||
"15/15",
|
||||
"27/27",
|
||||
"core-content-json-standard",
|
||||
"发现",
|
||||
"互动",
|
||||
"结构",
|
||||
"高度"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
62
memory/2026-06-09-1159.md
Normal file
62
memory/2026-06-09-1159.md
Normal file
@ -0,0 +1,62 @@
|
||||
# Session: 2026-06-09 11:59:37 GMT+8
|
||||
|
||||
- **Session Key**: agent:xiaoyan:feishu:direct:ou_8b79b7f711e42a4004f3f3c225a1a99c
|
||||
- **Session ID**: 5e1b9add-de36-44b7-88c4-47ca70c8bb35
|
||||
- **Source**: feishu
|
||||
|
||||
## Conversation Summary
|
||||
|
||||
user: 组件配置-json https://makee-interactive.feishu.cn/wiki/SAadwW8YaiObl8k4op3c6vs8nqb
|
||||
assistant: 处理完成。**L1-S2-U17-L4 门关啦 Door is Closed** 共识别 **16 个组件**,全部生成成功:
|
||||
|
||||
| # | 组件ID | 类型 | cType |
|
||||
|---|--------|------|-------|
|
||||
| 1-3 | 1217401-1217403 | 对话朗读 | mid_dialog_repeat |
|
||||
| 4-5 | 1217404-1217405 | 对话挖空 | mid_dialog_fillin |
|
||||
| 6 | 1217406 | 图片单选 | mid_image_choose |
|
||||
| 7 | 1217407 | 对话朗读 | mid_dialog_repeat |
|
||||
| 8-9 | 1217408-1217409 | 对话选择 | mid_dialog_choose |
|
||||
| 10 | 1217410 | 对话挖空 | mid_dialog_fillin |
|
||||
| 11-12 | 1217411-1217412 | 对话组句 | mid_dialog_sentence |
|
||||
| 13 | 1217413 | 看图拼词 | core_writing_imgMakeWord |
|
||||
| 14-15 | 1217414-1217415 | 对话挖空 | mid_dialog_fillin |
|
||||
| 16 | 1217416 | 对话朗读 | mid_dialog_repeat |
|
||||
|
||||
✅ 成功 16 / 失败 0,HTML 报告已通过飞书 Bot 发送给你。
|
||||
user: https://makee-interactive.feishu.cn/wiki/U1zEwHZaaie07TkjmOOchurgnIh组件配置-json
|
||||
assistant: 处理完成。**L1-S2-U17-L5 笨蛋坏蛋?Bad Guy or Not** 共识别 **17 个组件**:
|
||||
|
||||
| # | 组件ID | 类型 | 结果 |
|
||||
|---|--------|------|------|
|
||||
| 1-6 | 1217501-1217506 | 对话朗读 | ✅ |
|
||||
| 7-8 | 1217507-1217508 | 对话挖空 | ✅ |
|
||||
| 9 | 1217509 | 对话选择 | ✅ |
|
||||
| 10 | 1217510 | 对话组句 | ✅ |
|
||||
| 11-12 | 1217511-1217512 | 对话挖空 | ✅ |
|
||||
| 13 | 1217513 | 对话选读 | ✅ |
|
||||
| 14 | 1217514 | 对话挖空 | ✅ |
|
||||
| 15 | 1217515 | 对话组句 | ✅ |
|
||||
| 16 | 1217516 | 对话选读 | ✅ |
|
||||
| 17 | 1217517 | 口语独白 | ⏭️ 跳过 |
|
||||
|
||||
✅ 成功 16 / 跳过 1(口语独白尚未实现生成器)/ 失败 0,HTML 报告已发送。
|
||||
user: https://makee-interactive.feishu.cn/wiki/P9bvw6nXziqzWZkxDmMcOZN4ndc 组件配置-json
|
||||
assistant: 处理完成。**L1-S2-U18-L5 双龙会** 共识别 **16 个组件**,全部成功:
|
||||
|
||||
| # | 组件ID | 类型 | cType |
|
||||
|---|--------|------|-------|
|
||||
| 1-3 | 1218501-1218503 | 对话朗读 | mid_dialog_repeat |
|
||||
| 4 | 1218504 | 对话挖空 | mid_dialog_fillin |
|
||||
| 5 | 1218505 | 对话朗读 | mid_dialog_repeat |
|
||||
| 6 | 1218506 | 对话挖空 | mid_dialog_fillin |
|
||||
| 7 | 1218507 | 对话选读 | mid_dialog_select |
|
||||
| 8 | 1218508 | 看图拼词 | core_writing_imgMakeWord |
|
||||
| 9 | 1218509 | 对话选择 | mid_dialog_choose |
|
||||
| 10 | 1218510 | 对话朗读 | mid_dialog_repeat |
|
||||
| 11 | 1218511 | 图片单选 | mid_image_choose |
|
||||
| 12 | 1218512 | 对话组句 | mid_dialog_sentence |
|
||||
| 13 | 1218513 | 对话表达 | mid_dialog_express |
|
||||
| 14 | 1218514 | 对话组句 | mid_dialog_sentence |
|
||||
| 15 | 1218515 | 对话选读 | mid_dialog_select |
|
||||
|
||||
✅ 成功 16 / 失败 0 / 跳过 0,HTML 报告已发送。
|
||||
41
memory/2026-06-09-1447.md
Normal file
41
memory/2026-06-09-1447.md
Normal file
@ -0,0 +1,41 @@
|
||||
# Session: 2026-06-09 14:47:42 GMT+8
|
||||
|
||||
- **Session Key**: agent:xiaoyan:feishu:direct:ou_8b79b7f711e42a4004f3f3c225a1a99c
|
||||
- **Session ID**: b3e1dcfe-a4af-4a5b-9fee-ea59d4b76826
|
||||
- **Source**: feishu
|
||||
|
||||
## Conversation Summary
|
||||
|
||||
user: https://makee-interactive.feishu.cn/wiki/O7RwwMei6iQCFlk6cHocDqGpn9b 组件配置
|
||||
assistant: 张昆鹏,开始处理组件配置。
|
||||
|
||||
|
||||
assistant: 📝 组件配置完成,**16/16 全部成功**。
|
||||
|
||||
| 组件类型 | 数量 |
|
||||
|----------|------|
|
||||
| 对话朗读 (mid_dialog_repeat) | 6 |
|
||||
| 图片单选 (mid_image_choose) | 3 |
|
||||
| 对话挖空 (mid_dialog_fillin) | 3 |
|
||||
| 对话选读 (mid_dialog_select) | 1 |
|
||||
| 看图拼词 (core_writing_imgMakeWord) | 1 |
|
||||
| 图片拖拽 (mid_image_drag) | 1 |
|
||||
| 对话表达 (mid_dialog_express) | 1 |
|
||||
|
||||
HTML 报告已通过飞书发送给你,可在浏览器中打开后使用「一键推送全部配置+知识点」按钮推送到远程数据库。
|
||||
|
||||
⚠️ 注意:本轮 16 个组件的知识点匹配全部为空(词汇如 ship/boat/cross/helicopter 在 kpId 库中未匹配到),推送前建议在 HTML 中手动补充 kpId。
|
||||
user: https://makee-interactive.feishu.cn/wiki/O7RwwMei6iQCFlk6cHocDqGpn9b 组件配置
|
||||
assistant: **16/16 全部成功**,HTML 报告已发送。
|
||||
|
||||
| 组件类型 | 数量 |
|
||||
|----------|------|
|
||||
| 对话朗读 (mid_dialog_repeat) | 6 |
|
||||
| 图片单选 (mid_image_choose) | 3 |
|
||||
| 对话挖空 (mid_dialog_fillin) | 3 |
|
||||
| 对话选读 (mid_dialog_select) | 1 |
|
||||
| 看图拼词 (core_writing_imgMakeWord) | 1 |
|
||||
| 图片拖拽 (mid_image_drag) | 1 |
|
||||
| 对话表达 (mid_dialog_express) | 1 |
|
||||
|
||||
知识点匹配仍全部为空(ship/boat/cross/helicopter 等词汇在 kpId 库中未命中),推送前建议在 HTML 中手动补充。
|
||||
417
only_in_new.txt
Normal file
417
only_in_new.txt
Normal file
@ -0,0 +1,417 @@
|
||||
L2新版中存在但L2知识库中不存在的单词: 413 个
|
||||
============================================================
|
||||
序号 单词 词性 词义
|
||||
--------------------------------------------------------------------------------
|
||||
1 absolutely adv 绝对地
|
||||
2 accommodation n 住处
|
||||
3 activity n. 活动
|
||||
4 ad n. 广告
|
||||
5 advert n. 广告
|
||||
6 advice n. 建议
|
||||
7 all kinds of phrase. 各种各样的
|
||||
8 amazed adj. 惊讶的
|
||||
9 antique adj 古老的
|
||||
10 apartment n. 公寓套房
|
||||
11 apartment building n. 公寓楼
|
||||
12 app n. 应用程序
|
||||
13 babysit v 临时照看婴儿
|
||||
14 babysitter n 保姆
|
||||
15 backpacker n 背包客
|
||||
16 band n. 圈,箍,带
|
||||
17 baseball n. 棒球
|
||||
18 basketball n. 篮球
|
||||
19 bath n. 洗澡
|
||||
20 bathing suit n. 泳衣
|
||||
21 bear v. 忍受
|
||||
22 beard n. (下巴上的) 胡子
|
||||
23 because conj. 因为
|
||||
24 because of phrase. 因为
|
||||
25 beetle n 甲虫
|
||||
26 belong v. 属于
|
||||
27 below prep. 在……下面
|
||||
28 below adv. 在下面
|
||||
29 benefit n 益处
|
||||
30 beyond prep 超出
|
||||
31 blanket n. 毯子
|
||||
32 blog n. 博客
|
||||
33 blond adj. 金发的
|
||||
34 board v. 上 (船、火车、飞机等)
|
||||
35 boat v. 划船
|
||||
36 bomb n 炸弹
|
||||
37 bookcase n. 书架
|
||||
38 bookshop n. 书店
|
||||
39 bookstore n. 书店
|
||||
40 bored adj. 无聊的
|
||||
41 boss n. 老板
|
||||
42 bottle n. 瓶子
|
||||
43 brake n 刹车
|
||||
44 break down phrase. (车辆或机器)出故障
|
||||
45 bring v. 带来
|
||||
46 build v. 建造
|
||||
47 building n. 建筑物
|
||||
48 busy person n. 忙碌的人
|
||||
49 buy v. 购买
|
||||
50 by accident phrase. 偶然地
|
||||
51 by post prep phr 通过邮寄方式
|
||||
52 by the way phrase. 顺便说一下
|
||||
53 cab n 出租车
|
||||
54 cabin n 小屋
|
||||
55 cable n 电缆
|
||||
56 camel n. 骆驼
|
||||
57 camera n. 摄影机
|
||||
58 campsite n. 营地
|
||||
59 candy n. 糖果
|
||||
60 cardboard n 硬纸板
|
||||
61 career n. 职业
|
||||
62 careful adj. 小心的
|
||||
63 CD player abbr. 激光唱机
|
||||
64 cell phone n. 手机
|
||||
65 centre n. 中心
|
||||
66 charge v 充电
|
||||
67 chatroom n. 聊天室
|
||||
68 cheek n. 脸颊
|
||||
69 cinema n. 电影院
|
||||
70 circle n. 圆
|
||||
71 circus n. 马戏团
|
||||
72 classmate n. 同学
|
||||
73 classroom n. 教室
|
||||
74 clever adj. 聪明的
|
||||
75 climbing n. 攀登
|
||||
76 close to phrase. 靠近
|
||||
77 closed adj. 关闭的
|
||||
78 closet n. 衣柜
|
||||
79 clothes n. 衣服
|
||||
80 clown n. 小丑
|
||||
81 coffee n. 咖啡
|
||||
82 come back phrase. 重返
|
||||
83 comedy n. 喜剧
|
||||
84 comment n 评论
|
||||
85 congratulations n. 祝贺
|
||||
86 court n 法院;法庭
|
||||
87 crash v 碰撞
|
||||
88 creature n 生物
|
||||
89 credit card n. 信用卡
|
||||
90 crocodile n 鳄鱼
|
||||
91 crossing n. 十字路口
|
||||
92 cupboard n. 橱柜
|
||||
93 cure n 治愈方法
|
||||
94 cycle v. 骑自行车
|
||||
95 cycle n. 周期
|
||||
96 damage v 损坏
|
||||
97 damage n 损坏
|
||||
98 damaged adj 损坏的
|
||||
99 dancing n. 跳舞
|
||||
100 data n 数据
|
||||
101 decrease n 减少
|
||||
102 defeat v 击败
|
||||
103 demand n 要求
|
||||
104 dentist n. 牙医
|
||||
105 difficult adj. 困难的
|
||||
106 dirty adj. 脏的
|
||||
107 display v 显示
|
||||
108 diving n. 潜水
|
||||
109 doctor n. 医生
|
||||
110 double room phrase. 双人间
|
||||
111 dozen det 十二
|
||||
112 draw v. 抽签
|
||||
113 draw n. 抽签
|
||||
114 dream n. 梦想
|
||||
115 dream v. 梦想
|
||||
116 driving licence n. 驾驶执照
|
||||
117 drugstore n. 药店
|
||||
118 dry adj. 干燥的
|
||||
119 dry v. 变干
|
||||
120 duty-free adj 免税的
|
||||
121 DVD player n. DVD播放机
|
||||
122 each other phrase. 彼此
|
||||
123 eastern adj 东方的
|
||||
124 easy adj. 容易的
|
||||
125 easygoing adj 随和的
|
||||
126 economics n 经济学
|
||||
127 edge n 边
|
||||
128 elevator n. 电梯
|
||||
129 exam abbr. 考试
|
||||
130 exchange v 交换
|
||||
131 excited adj. 兴奋的
|
||||
132 exciting adj. 令人兴奋的
|
||||
133 extinct adj. 不再存在的;已灭绝的
|
||||
134 face vt. 面对
|
||||
135 face to face adv 面对面地
|
||||
136 face-to-face adj 面对面的
|
||||
137 fall over phr v 摔倒;跌倒
|
||||
138 famous adj. 著名的
|
||||
139 fancy v 想要
|
||||
140 farm v. 耕种
|
||||
141 favourite adj. 最喜欢的
|
||||
142 fax n 传真机
|
||||
143 feel v. 感觉
|
||||
144 female adj 女性的
|
||||
145 field n. 领域
|
||||
146 film n. 电影
|
||||
147 fire n. 火
|
||||
148 fish n. 鱼
|
||||
149 flat adj. 平坦的
|
||||
150 floor n. 地板
|
||||
151 foot n. 英尺
|
||||
152 football n. 橄榄球
|
||||
153 forest n. 森林
|
||||
154 French fries n. 炸薯条
|
||||
155 frightened adj. 害怕的
|
||||
156 frog n. 青蛙
|
||||
157 fruit n. 果实;结果
|
||||
158 gallery n. 画廊
|
||||
159 gap n 缺口
|
||||
160 garden v. 从事园艺活动
|
||||
161 gas station n. 加油站
|
||||
162 generally adv 通常
|
||||
163 generation n 一代
|
||||
164 get fit phrase. 健身
|
||||
165 get married phrase. 结婚
|
||||
166 give somebody a call/ring phrase. 给某人打电话
|
||||
167 glass n. 玻璃
|
||||
168 go out phrase. 出去
|
||||
169 goat n. 山羊
|
||||
170 grass n. 草地
|
||||
171 grill n 烤架
|
||||
172 grocery store n. 杂货店
|
||||
173 grow up phrase. 长大
|
||||
174 guest-house n. 招待所
|
||||
175 gym n. 体育馆
|
||||
176 haircut n 理发
|
||||
177 hairdresser n 理发师
|
||||
178 hairdryer n 吹风机
|
||||
179 hall n. 大厅
|
||||
180 hand vt. 传递,交递
|
||||
181 head v. 带领
|
||||
182 headphones n. 耳机
|
||||
183 helpful adj. 有帮助的
|
||||
184 hip hop n. 嘻哈音乐
|
||||
185 hire n 被雇佣的人
|
||||
186 hit n. 击打
|
||||
187 hobby n. 爱好
|
||||
188 hockey n. 曲棍球, 冰上曲棍球
|
||||
189 holiday n. 假期
|
||||
190 hoodie n 带兜帽的厚运动衫
|
||||
191 horror n. 恐怖
|
||||
192 hospital n. 医院
|
||||
193 hot adj. 热的
|
||||
194 hour n. 小时
|
||||
195 house n. 房子
|
||||
196 huge adj. 巨大的
|
||||
197 hungry adj. 饥饿的
|
||||
198 ice hockey n 冰球
|
||||
199 ice skates n 冰鞋
|
||||
200 ice skating n 滑冰
|
||||
201 ID/ID card abbr. 身份证
|
||||
202 idea n. 想法
|
||||
203 in front of phrase. 在……前面
|
||||
204 indoors adv. 在室内
|
||||
205 instead of prep. 代替
|
||||
206 interesting adj. 有趣的
|
||||
207 internet n. 互联网
|
||||
208 interview n 面试
|
||||
209 invitation n. 邀请
|
||||
210 invite v. 邀请
|
||||
211 iron n 铁
|
||||
212 jacket n. 夹克衫
|
||||
213 jail n 监狱
|
||||
214 jar n 罐子
|
||||
215 jealous adj 嫉妒的
|
||||
216 jeans n. 牛仔裤
|
||||
217 jet n 喷气式飞机
|
||||
218 job n. 工作
|
||||
219 kick v. 踢
|
||||
220 knife n. 刀
|
||||
221 laptop n. 笔记本电脑
|
||||
222 late adj. 迟的
|
||||
223 length n. 长度
|
||||
224 lesson n. 经验教训
|
||||
225 letter n. 信函
|
||||
226 lie down phrase. 躺下
|
||||
227 life n. 生命
|
||||
228 limit n 限制
|
||||
229 live adv. 现场直播地
|
||||
230 live adj 现场直播的
|
||||
231 lizard n 蜥蜴
|
||||
232 load n 负载
|
||||
233 lorry n. 卡车
|
||||
234 lose v. 失去
|
||||
235 lots n. 许多
|
||||
236 luckily adv. 幸运地
|
||||
237 make sure phrase. 确保
|
||||
238 male adj 男性的
|
||||
239 many pron. 许多(人或物)
|
||||
240 market n. 市场
|
||||
241 maths abbr. 数学
|
||||
242 maximum n 最大值
|
||||
243 meet v. 遇见
|
||||
244 microphone n 麦克风
|
||||
245 minimum n 最小值
|
||||
246 mirror n. 镜子
|
||||
247 mobile phone n. 手机
|
||||
248 monthly adj. 每月的
|
||||
249 mountain n. 山
|
||||
250 movie n. 电影
|
||||
251 movie star n. 电影明星
|
||||
252 movie theater phrase. 电影院
|
||||
253 musician n. 音乐家
|
||||
254 name v. 命名;给…取名
|
||||
255 nationality n. 国籍
|
||||
256 natural adj. 自然的
|
||||
257 near adj. 近的
|
||||
258 nearby adj 附近的
|
||||
259 nest n 鸟巢;鸟窝
|
||||
260 nice adj. 友好的,亲切的,讨人喜欢的
|
||||
261 niece n 侄女
|
||||
262 noise n. 噪音
|
||||
263 northeast n 东北部
|
||||
264 northwest n 西北
|
||||
265 number n. 数字
|
||||
266 nurse n. 护士
|
||||
267 o'clock n. 点钟
|
||||
268 octopus n 章鱼
|
||||
269 often adv. 经常
|
||||
270 outdoor adj. 户外的
|
||||
271 outdoors adv. 在户外
|
||||
272 outdoors n. 户外
|
||||
273 overnight adj 一整夜的
|
||||
274 paint n. 油漆
|
||||
275 paint v. 在…刷油漆;
|
||||
276 painting n. 刷油漆
|
||||
277 parent n. 父亲(或母亲)
|
||||
278 parking lot n. 停车场
|
||||
279 party n. (同行的)群,组,队
|
||||
280 pencil case phrase. 铅笔盒
|
||||
281 penny n. 便士
|
||||
282 people n. 人
|
||||
283 pharmacy n. 药店
|
||||
284 phone v. 打电话给
|
||||
285 photo n. 照片
|
||||
286 piano n. 钢琴
|
||||
287 pick up phrase. (开车)接载(人)
|
||||
288 picnic v. 去野餐
|
||||
289 picture n. 图片
|
||||
290 pin n 别针
|
||||
291 pink n. 粉色
|
||||
292 plane n. 飞机
|
||||
293 plant n. 植物
|
||||
294 plant v. 种植
|
||||
295 plug n 插头
|
||||
296 police n. 警察
|
||||
297 police car n. 警车
|
||||
298 poster n. 海报
|
||||
299 practise v. 练习
|
||||
300 present adj. 现在的
|
||||
301 pretty adv. 相当
|
||||
302 problem n. 问题
|
||||
303 professional adj 专业的
|
||||
304 put on phrase. 穿上
|
||||
305 question v. 询问
|
||||
306 quickly adv. 迅速地
|
||||
307 quiet adj. 安静的
|
||||
308 radio n. 收音机
|
||||
309 reading v. 阅读
|
||||
310 recently adv 不久前;最近
|
||||
311 refrigerator n. 冰箱
|
||||
312 request v 请求
|
||||
313 rescue v 营救
|
||||
314 reserve v 预订
|
||||
315 review n. 评论
|
||||
316 right hand n. 右手
|
||||
317 roof n. 屋顶
|
||||
318 ruler n. 统治者;支配者
|
||||
319 run v. 管理,经营
|
||||
320 safe adj. 安全的
|
||||
321 sail v. 航行
|
||||
322 sauce n. 调味汁
|
||||
323 sausage n. 香肠
|
||||
324 scarf n. 围巾
|
||||
325 scary adj. 可怕的
|
||||
326 science n. 科学
|
||||
327 second-hand adv 二手地
|
||||
328 sell v. 卖
|
||||
329 signal n 信号
|
||||
330 sit down phrase. 坐下
|
||||
331 skate v. 滑冰
|
||||
332 skateboard n. 滑板
|
||||
333 skateboarding n. 滑板运动
|
||||
334 sleep n. 睡眠
|
||||
335 sleep v. 睡觉
|
||||
336 slow adj. 缓慢的
|
||||
337 slow v. 放慢
|
||||
338 slowly adv. 慢慢地
|
||||
339 check in phr. v. 托运
|
||||
340 snowboard v. 滑雪板运动
|
||||
341 soccer n. 足球
|
||||
342 southwest n 西南部
|
||||
343 spider n 蜘蛛
|
||||
344 sport n. 运动
|
||||
345 sports centre n. 体育中心
|
||||
346 square n. 广场
|
||||
347 stairs n. 楼梯
|
||||
348 stand v. 位于
|
||||
349 stand v. 忍受,承受
|
||||
350 stomach n. 胃
|
||||
351 stomachache n. 胃痛
|
||||
352 store n. 商店
|
||||
353 store v. 储存
|
||||
354 street n. 街道
|
||||
355 strike n 罢工
|
||||
356 striped adj. 有条纹的
|
||||
357 stripes n. 条纹
|
||||
358 study n. 学习
|
||||
359 sugar n. 糖
|
||||
360 supermarket n. 超市
|
||||
361 support v 支持
|
||||
362 surfboard n. 冲浪板
|
||||
363 surprising adj. 令人惊讶的
|
||||
364 swan n. 天鹅
|
||||
365 switch n 开关
|
||||
366 tablet n. 药片
|
||||
367 tail n. 尾巴
|
||||
368 take off phrase. (飞机等)起飞
|
||||
369 tear n 眼泪
|
||||
370 television n. 电视机
|
||||
371 terrible adj. 可怕的
|
||||
372 thirsty adj. 渴望的,渴求的
|
||||
373 those pron. 那些
|
||||
374 throw v. 扔
|
||||
375 ticket n. 票
|
||||
376 tidy v. 整理
|
||||
377 tights n. 紧身裤
|
||||
378 topic n. 话题
|
||||
379 tortoise n. 陆龟;海龟
|
||||
380 tourist information centre phrase. 游客信息中心
|
||||
381 train v. 训练
|
||||
382 transport n. 运输
|
||||
383 travel n. 旅行
|
||||
384 try on phrase. 试穿
|
||||
385 umbrella n. 雨伞
|
||||
386 update v 更新
|
||||
387 vegetable n. 蔬菜
|
||||
388 vegetarian n 素食者
|
||||
389 video adj. 视频的
|
||||
390 video n 视频
|
||||
391 village n. 村庄
|
||||
392 visiting adj. 访问的
|
||||
393 wake v. 醒来
|
||||
394 wake up phrase. 叫醒
|
||||
395 walk v. 牵着(动物)走
|
||||
396 walking n. 步行
|
||||
397 wall n. 墙
|
||||
398 wardrobe n. 衣柜
|
||||
399 wash v 洗
|
||||
400 wash up phrase. 洗漱
|
||||
401 well known adj. 众所周知的
|
||||
402 whale v. 捕鲸
|
||||
403 white n. 白色
|
||||
404 wife n. 妻子
|
||||
405 wildlife n. 野生动物
|
||||
406 wind v. 蜿蜒前进,迂回
|
||||
407 windsurfing n. 帆板运动
|
||||
408 worst adj. 最差的
|
||||
409 worst adv. 最糟糕地
|
||||
410 writer n. 作家
|
||||
411 writing n. 写作
|
||||
412 yellow n. 黄色
|
||||
413 yoghurt n. 酸奶
|
||||
@ -1 +0,0 @@
|
||||
userId,userMsg,source,userName,soeData,audioUrl,asrStatus,componentId,componentType,dataVersion,timeStr
|
||||
|
BIN
output/KET单词表_2025.xlsx
Normal file
BIN
output/KET单词表_2025.xlsx
Normal file
Binary file not shown.
BIN
output/L1单词表_980词.xlsx
Normal file
BIN
output/L1单词表_980词.xlsx
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
81
regenerate_files.py
Normal file
81
regenerate_files.py
Normal file
@ -0,0 +1,81 @@
|
||||
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
# ---------------------------
|
||||
# 重新生成并保存到正确位置
|
||||
# ---------------------------
|
||||
|
||||
# 文件路径
|
||||
file3034 = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/30-34.xlsx'
|
||||
fileLevel3 = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/三级单词表原始版.xlsx'
|
||||
fileKet = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/KET词汇表_完整版.xlsx'
|
||||
|
||||
outputDir = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表'
|
||||
|
||||
# 1. 生成【是否三级】版本
|
||||
df3034 = pd.read_excel(file3034)
|
||||
dfLevel3 = pd.read_excel(fileLevel3)
|
||||
|
||||
# 创建三级词汇表字典
|
||||
level3_dict = {}
|
||||
for idx, row in dfLevel3.iterrows():
|
||||
word = str(row['单词']).strip().lower()
|
||||
pos = row['三级词性'] if pd.notna(row['三级词性']) else row['A2词性']
|
||||
meaning = row['三级中文释义'] if pd.notna(row['三级中文释义']) else row['A2中文释义']
|
||||
level3_dict[word] = {'row': idx+2, 'pos': pos, 'meaning': meaning}
|
||||
|
||||
# 添加【是否三级】列
|
||||
result_level3 = []
|
||||
for idx, row in df3034.iterrows():
|
||||
word = str(row['单词']).strip().lower()
|
||||
if word in level3_dict:
|
||||
info = level3_dict[word]
|
||||
result_level3.append(f"【是】- 第{info['row']}行 - {info['pos']} - {info['meaning']}")
|
||||
else:
|
||||
result_level3.append("【否】")
|
||||
df3034['是否三级'] = result_level3
|
||||
|
||||
# 保存文件1
|
||||
output1 = os.path.join(outputDir, '30-34_三级标注完成.xlsx')
|
||||
df3034.to_excel(output1, index=False)
|
||||
print(f"已保存: {output1}")
|
||||
|
||||
# 2. 生成【是否KET】版本
|
||||
df3034_ket = pd.read_excel(file3034)
|
||||
dfKet = pd.read_excel(fileKet)
|
||||
|
||||
# 创建KET词汇表字典
|
||||
ket_dict = {}
|
||||
for idx, row in dfKet.iterrows():
|
||||
word = str(row['单词']).strip().lower()
|
||||
ket_dict[word] = {'row': idx+2, 'pos': row['词性']}
|
||||
|
||||
# 添加【是否KET】列
|
||||
result_ket = []
|
||||
for idx, row in df3034_ket.iterrows():
|
||||
word = str(row['单词']).strip().lower()
|
||||
if word in ket_dict:
|
||||
info = ket_dict[word]
|
||||
result_ket.append(f"【是】- 第{info['row']}行 - {info['pos']}")
|
||||
else:
|
||||
result_ket.append("【否】")
|
||||
df3034_ket['是否KET'] = result_ket
|
||||
|
||||
# 保存文件2
|
||||
output2 = os.path.join(outputDir, '30-34_KET标注完成.xlsx')
|
||||
df3034_ket.to_excel(output2, index=False)
|
||||
print(f"已保存: {output2}")
|
||||
|
||||
# 3. 生成同时有两个标注的版本
|
||||
df3034_both = pd.read_excel(file3034)
|
||||
df3034_both['是否三级'] = result_level3
|
||||
df3034_both['是否KET'] = result_ket
|
||||
output3 = os.path.join(outputDir, '30-34_完整标注版.xlsx')
|
||||
df3034_both.to_excel(output3, index=False)
|
||||
print(f"已保存: {output3}")
|
||||
|
||||
print("\n所有文件已保存到: L2单词表目录")
|
||||
print("\n目录内容:")
|
||||
for f in os.listdir(outputDir):
|
||||
print(f" - {f}")
|
||||
73
verify_ket.py
Normal file
73
verify_ket.py
Normal file
@ -0,0 +1,73 @@
|
||||
|
||||
import pandas as pd
|
||||
|
||||
# 读取结果文件
|
||||
fileResult = r'/root/.openclaw/workspace-xiaoyan/output/30-34_KET标注完成.xlsx'
|
||||
fileKet = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/L2单词表/KET词汇表_完整版.xlsx'
|
||||
|
||||
dfResult = pd.read_excel(fileResult)
|
||||
dfKet = pd.read_excel(fileKet)
|
||||
|
||||
print("=== 复核检查 ===")
|
||||
print(f"结果文件总行数: {len(dfResult)}")
|
||||
print(f"结果文件列名: {dfResult.columns.tolist()}")
|
||||
|
||||
# 创建KET词汇表的快速查找字典
|
||||
ket_words = set()
|
||||
for idx, row in dfKet.iterrows():
|
||||
word = str(row['单词']).strip().lower()
|
||||
ket_words.add(word)
|
||||
|
||||
# 手动复核前20个和后20个单词
|
||||
print("\n=== 手动复核前20个单词 ===")
|
||||
correct = 0
|
||||
wrong = 0
|
||||
for idx in range(min(20, len(dfResult))):
|
||||
row = dfResult.iloc[idx]
|
||||
word = str(row['单词']).strip().lower()
|
||||
is_ket = word in ket_words
|
||||
marked_as_ket = '【是】' in str(row['是否KET'])
|
||||
|
||||
status = "✓" if is_ket == marked_as_ket else "✗"
|
||||
if is_ket == marked_as_ket:
|
||||
correct += 1
|
||||
else:
|
||||
wrong += 1
|
||||
|
||||
print(f"{idx+1:2d}. {row['单词']:20s} 标注: {'是' if marked_as_ket else '否':3s} 实际: {'是' if is_ket else '否':3s} {status}")
|
||||
|
||||
print(f"\n前20个 - 正确: {correct}, 错误: {wrong}")
|
||||
|
||||
# 复核后20个
|
||||
print("\n=== 手动复核后20个单词 ===")
|
||||
correct2 = 0
|
||||
wrong2 = 0
|
||||
for idx in range(max(0, len(dfResult)-20), len(dfResult)):
|
||||
row = dfResult.iloc[idx]
|
||||
word = str(row['单词']).strip().lower()
|
||||
is_ket = word in ket_words
|
||||
marked_as_ket = '【是】' in str(row['是否KET'])
|
||||
|
||||
status = "✓" if is_ket == marked_as_ket else "✗"
|
||||
if is_ket == marked_as_ket:
|
||||
correct2 += 1
|
||||
else:
|
||||
wrong2 += 1
|
||||
|
||||
print(f"{idx+1:3d}. {row['单词']:20s} 标注: {'是' if marked_as_ket else '否':3s} 实际: {'是' if is_ket else '否':3s} {status}")
|
||||
|
||||
print(f"\n后20个 - 正确: {correct2}, 错误: {wrong2}")
|
||||
|
||||
# 复核所有标注为【否】的单词
|
||||
print("\n=== 复核标注为【否】的所有单词 ===")
|
||||
no_words = dfResult[dfResult['是否KET'] == '【否】']
|
||||
print(f"标注为【否】的单词共 {len(no_words)} 个:")
|
||||
all_correct = True
|
||||
for idx, row in no_words.iterrows():
|
||||
word = str(row['单词']).strip().lower()
|
||||
if word in ket_words:
|
||||
print(f"✗ {row['单词']} 应该是【是】,但标注为【否】")
|
||||
all_correct = False
|
||||
|
||||
if all_correct:
|
||||
print("✓ 所有标注为【否】的单词都是正确的!")
|
||||
Loading…
Reference in New Issue
Block a user