main
HuangHai 2 weeks ago
commit b1b73514de

@ -2,7 +2,7 @@
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 3.10 (5)" jdkType="Python SDK" />
<orderEntry type="jdk" jdkName="D:\anaconda3\envs\py310" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="PyDocumentationSettings">

@ -3,5 +3,5 @@
<component name="Black">
<option name="sdkName" value="D:\anaconda3\envs\lightrag" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (5)" project-jdk-type="Python SDK" />
<component name="ProjectRootManager" version="2" project-jdk-name="D:\anaconda3\envs\py310" project-jdk-type="Python SDK" />
</project>

@ -0,0 +1,49 @@
import subprocess
from pathlib import Path
def convert_mp4_to_wav(
input_mp4: str,
ffmpeg_path: str = r"d:\ffmpeg\ffmpeg.exe",
output_path: str = None # 新增输出路径参数
):
"""
将指定MP4文件转换为WAV格式
参数
input_mp4 - 输入的MP4文件路径
ffmpeg_path - FFmpeg可执行文件路径
output_path - 可选输出路径可指定完整路径或目录
"""
input_path = Path(input_mp4)
# 处理输出路径逻辑
if output_path:
output_path = Path(output_path)
if output_path.is_dir(): # 如果传入的是目录
output_path = output_path / f"{input_path.stem}.wav"
output_path.parent.mkdir(parents=True, exist_ok=True)
else:
# 默认输出到wav目录
output_dir = Path("wav")
output_dir.mkdir(exist_ok=True)
output_path = output_dir / f"{input_path.stem}.wav"
cmd = [
ffmpeg_path,
"-i", str(input_path),
"-acodec", "pcm_s16le",
"-ac", "1",
"-ar", "16000",
"-y",
str(output_path) # 使用处理后的输出路径
]
try:
# 执行转换命令
subprocess.run(cmd, check=True, capture_output=True)
print(f"转换成功:{input_path} -> {output_path}")
except subprocess.CalledProcessError as e:
print(f"转换失败:{e.stderr.decode('gbk')}")
except FileNotFoundError:
print(f"FFmpeg未找到请确认路径是否正确{ffmpeg_path}")

@ -0,0 +1,21 @@
from B1_Mp4ToWav import *
from B2_WavToText import *
from B3_TextSummarize import *
if __name__ == '__main__':
# 1、根据云校的视频课程下载视频文件
# 2、调用ffmpeg将视频文件转成wav文件
# convert_mp4_to_wav(r"D:\backup\七年级第三单元复习课.mp4",
# output_path=r"D:\backup\123.wav")
# 3、将转换完成的WAV上传到阿里云
# 4、调用阿里云的语音识别API将wav文件转成文字
#audio_url = "https://ylt.oss-cn-hangzhou.aliyuncs.com/HuangHai/123.wav"
#ShiBie(audio_url, Path("识别结果.txt"))
# 2.5元一小时本音频文件45分钟约2元
# 6、生成总结
input_file = Path(r"D:\dsWork\QingLong\AI\音频文本.txt")
output_file = Path(r"D:\dsWork\QingLong\AI\分析结果.txt")
analyzer_action(input_file, output_file)

@ -0,0 +1,189 @@
# -*- coding: utf-8 -*-
import json
import time
from typing import Dict, Tuple
from pathlib import Path
from aliyunsdkcore.acs_exception.exceptions import ClientException, ServerException
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from Config import *
from Config.Config import ALY_AK, ALY_SK
# 服务常量配置
CONFIG = {
"REGION_ID": "cn-shanghai",
"PRODUCT": "nls-filetrans",
"DOMAIN": "filetrans.cn-shanghai.aliyuncs.com",
"API_VERSION": "2018-08-17",
"MAX_RETRIES": 20,
"POLL_INTERVAL": 10
}
class TranscriptionError(Exception):
"""自定义语音识别异常基类"""
pass
class APIConnectionError(TranscriptionError):
"""API连接异常"""
pass
class TaskSubmissionError(TranscriptionError):
"""任务提交异常"""
pass
class TaskTimeoutError(TranscriptionError):
"""任务超时异常"""
pass
def submit_transcription_task(client: AcsClient, app_key: str, file_link: str) -> str:
"""提交语音识别任务
:param client: 阿里云客户端实例
:param app_key: 应用密钥
:param file_link: 音频文件URL
:return: 任务ID
:raises TaskSubmissionError: 任务提交失败时抛出
"""
task_config = {
"appkey": app_key,
"file_link": file_link,
"version": "4.0",
"enable_words": False
}
request = CommonRequest()
request.set_domain(CONFIG["DOMAIN"])
request.set_version(CONFIG["API_VERSION"])
request.set_product(CONFIG["PRODUCT"])
request.set_action_name("SubmitTask")
request.set_method('POST')
request.add_body_params("Task", json.dumps(task_config))
try:
response = client.do_action_with_exception(request)
response_data = json.loads(response)
if response_data.get("StatusText") != "SUCCESS":
raise TaskSubmissionError(f"任务提交失败: {response_data.get('StatusText', '未知错误')}")
return response_data["TaskId"]
except (ServerException, ClientException) as e:
raise APIConnectionError(f"API连接异常: {str(e)}") from e
except KeyError as e:
raise TaskSubmissionError("响应缺少TaskId字段") from e
def poll_transcription_result(client: AcsClient, task_id: str) -> Dict:
"""轮询识别任务结果
:param client: 阿里云客户端实例
:param task_id: 任务ID
:return: 识别结果字典
:raises TaskTimeoutError: 超时未完成时抛出
"""
request = CommonRequest()
request.set_domain(CONFIG["DOMAIN"])
request.set_version(CONFIG["API_VERSION"])
request.set_product(CONFIG["PRODUCT"])
request.set_action_name("GetTaskResult")
request.set_method('GET')
request.add_query_param("TaskId", task_id)
retries = 0
while retries < CONFIG["MAX_RETRIES"]:
try:
response = client.do_action_with_exception(request)
result = json.loads(response)
status = result.get("StatusText", "")
if status == "SUCCESS":
return result.get("Result", {})
if status in ("RUNNING", "QUEUEING"):
time.sleep(CONFIG["POLL_INTERVAL"])
retries += 1
else:
raise TaskSubmissionError(f"识别失败,状态: {status}")
except (ServerException, ClientException) as e:
raise APIConnectionError(f"查询异常: {str(e)}") from e
raise TaskTimeoutError(f"超过最大重试次数({CONFIG['MAX_RETRIES']}),任务未完成")
def save_transcription_result(result: Dict, output_path: Path) -> Path:
"""保存识别结果到文件
:param result: 识别结果字典
:param output_path: 输出文件路径
:return: 实际保存路径
:raises IOError: 文件保存失败时抛出
"""
if not result.get('Sentences'):
raise ValueError("识别结果为空")
try:
output_path.parent.mkdir(parents=True, exist_ok=True)
output_path.write_text(str(result['Sentences']), encoding='utf-8')
return output_path.resolve()
except (IOError, PermissionError) as e:
raise IOError(f"文件保存失败: {str(e)}") from e
def transcribe_audio_file(
access_key_id: str,
access_key_secret: str,
app_key: str,
audio_url: str,
output_path: Path = Path("识别结果.txt")
) -> Tuple[bool, Path, str]:
"""语音识别主流程
:param access_key_id: 阿里云访问密钥ID
:param access_key_secret: 阿里云访问密钥
:param app_key: 应用密钥
:param audio_url: 音频文件URL
:param output_path: 输出文件路径
:return: (成功标志, 输出路径, 错误信息)
"""
client = AcsClient(access_key_id, access_key_secret, CONFIG["REGION_ID"])
try:
task_id = submit_transcription_task(client, app_key, audio_url)
print(f"任务已提交ID: {task_id}")
result = poll_transcription_result(client, task_id)
saved_path = save_transcription_result(result, output_path)
return True, saved_path, ""
except TranscriptionError as e:
return False, Path(), str(e)
except Exception as e:
return False, Path(), f"未处理的异常: {str(e)}"
def ShiBie(audio_url, output_path):
# 配置参数(应通过环境变量或配置文件获取)
CREDENTIALS = {
"access_key_id": ALY_AK,
"access_key_secret": ALY_SK,
"app_key": "OIpiw501l4o6MYEe",
"audio_url":audio_url,
"output_path": output_path
}
# 执行识别
success, path, error = transcribe_audio_file(**CREDENTIALS)
if success:
print(f"✅ 识别成功,文件已保存至: {path}")
else:
print(f"❌ 识别失败: {error}")
exit(1)

@ -0,0 +1,173 @@
# -*- coding: utf-8 -*-
from typing import Optional, Tuple, Iterator
from openai import OpenAI, APIError, APITimeoutError
import time
import httpx
from pathlib import Path
from Config.Config import LLM_API_KEY, LLM_BASE_URL, LLM_MODEL_NAME
class ContentAnalyzer:
"""课程内容分析器(流式版本)"""
def __init__(
self,
api_key: str = LLM_API_KEY,
base_url: str = LLM_BASE_URL,
model: str = LLM_MODEL_NAME,
max_retries: int = 10,
initial_timeout: int = 300
):
self._show_progress("🔧", "初始化分析器...", level=0)
self.client = OpenAI(api_key=api_key, base_url=base_url)
self.model = model
self.max_retries = max_retries
self.initial_timeout = initial_timeout
self._check_network()
self._show_progress("", "分析器准备就绪", level=0)
def _show_progress(self, emoji: str, message: str, level: int = 1):
indent = " " * level
timestamp = time.strftime("%H:%M:%S")
print(f"{indent}{emoji} [{timestamp}] {message}")
def _check_network(self):
try:
with httpx.Client(timeout=30) as client:
client.get("https://dashscope.aliyuncs.com")
self._show_progress("🌐", "网络连接正常", level=1)
except Exception as e:
self._show_progress("", f"网络异常: {str(e)}", level=1)
raise
def _retry_delay(self, attempt: int) -> int:
"""指数退避延迟"""
return min(2 ** attempt, 60) # 最大延迟60秒
def analyze_content_stream(
self,
content: str,
prompt_template: str = "帮我梳理:这节课分了几个部分,每部分的名称和开始的时间是多少:{}"
) -> Iterator[Tuple[bool, str]]:
"""流式分析内容"""
for attempt in range(self.max_retries + 1):
try:
current_timeout = self.initial_timeout + attempt * 5
self._show_progress("⏱️", f"尝试 {attempt + 1}/{self.max_retries} (超时: {current_timeout}s)", level=2)
full_prompt = prompt_template.format(content)
stream = self.client.chat.completions.create(
model=self.model,
messages=[{'role': 'user', 'content': full_prompt}],
timeout=current_timeout,
stream=True # 启用流式模式
)
buffer = []
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
content_chunk = chunk.choices[0].delta.content
buffer.append(content_chunk)
yield True, content_chunk # 实时返回每个片段
# 返回完整结果
if buffer:
yield True, ''.join(buffer)
return
except APITimeoutError as e:
if attempt < self.max_retries:
delay = self._retry_delay(attempt)
self._show_progress("", f"{delay}s后重试...", level=2)
time.sleep(delay)
else:
yield False, f"API请求超时已重试{self.max_retries}"
return
except APIError as e:
yield False, f"API错误: {str(e)}"
return
except Exception as e:
yield False, f"未处理的异常: {str(e)}"
return
def analyze_file(
self,
file_path: Path,
output_path: Optional[Path] = None,
encoding: str = 'utf-8'
) -> Tuple[bool, str]:
"""处理文件全流程(流式版本)"""
try:
self._show_progress("📂", f"开始处理文件: {file_path}", level=0)
# 文件验证
self._show_progress("🔍", "验证文件...", level=1)
if not file_path.exists():
self._show_progress("", "文件不存在", level=2)
return False, f"文件不存在: {file_path}"
if file_path.stat().st_size > 10 * 1024 * 1024:
self._show_progress("⚠️", "注意:大文件可能影响处理速度", level=2)
# 读取内容
self._show_progress("📖", "读取文件内容...", level=1)
try:
content = file_path.read_text(encoding=encoding)
except UnicodeDecodeError:
self._show_progress("🔠", "解码失败尝试GBK编码...", level=2)
content = file_path.read_text(encoding='gbk')
# 流式分析
self._show_progress("🧠", "开始流式分析...", level=1)
result_buffer = []
has_error = False
error_msg = ""
for status, chunk in self.analyze_content_stream(content):
if not status:
has_error = True
error_msg = chunk
break
print(chunk, end='', flush=True) # 实时输出
result_buffer.append(chunk)
if has_error:
self._show_progress("", f"分析失败: {error_msg}", level=1)
return False, error_msg
final_result = ''.join(result_buffer)
# 保存结果
if output_path:
self._show_progress("💾", f"保存到: {output_path}", level=1)
try:
output_path.parent.mkdir(parents=True, exist_ok=True)
output_path.write_text(final_result, encoding=encoding)
self._show_progress("", "保存成功", level=2)
except Exception as e:
self._show_progress("", f"保存失败: {str(e)}", level=2)
return False, f"结果保存失败: {str(e)}"
self._show_progress("🎉", "处理完成!", level=0)
return True, final_result
except Exception as e:
self._show_progress("💣", f"严重错误: {str(e)}", level=1)
return False, f"文件处理失败: {str(e)}"
def analyzer_action(input_file, output_file):
print("\n" + "=" * 50)
print(" 🚀 长春云校视频课程智能打标记系统 ".center(50, ""))
print("=" * 50)
analyzer = ContentAnalyzer(initial_timeout=300)
success, result = analyzer.analyze_file(Path(input_file), Path(output_file))
print("\n" + "=" * 50)
if success:
print("\n✅ 分析成功!结果已保存至:", output_file)
else:
print(f"\n❌ 分析失败:{result}")
print("=" * 50)

@ -1,12 +1,16 @@
# 阿里云的配置信息
ALY_AK = 'LTAI5tE4tgpGcKWhbZg6C4bh'
ALY_SK = 'oizcTOZ8izbGUouboC00RcmGE8vBQ1'
# 大模型 【DeepSeek深度求索官方】
#LLM_API_KEY = "sk-44ae895eeb614aa1a9c6460579e322f1"
#LLM_BASE_URL = "https://api.deepseek.com"
#LLM_MODEL_NAME = "deepseek-chat"
# LLM_API_KEY = "sk-44ae895eeb614aa1a9c6460579e322f1"
# LLM_BASE_URL = "https://api.deepseek.com"
# LLM_MODEL_NAME = "deepseek-chat"
# 阿里云提供的大模型服务
LLM_API_KEY="sk-f6da0c787eff4b0389e4ad03a35a911f"
LLM_API_KEY = "sk-f6da0c787eff4b0389e4ad03a35a911f"
LLM_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"
#LLM_MODEL_NAME = "qwen-plus" # 不要使用通义千问,会导致化学方程式不正确!
# LLM_MODEL_NAME = "qwen-plus" # 不要使用通义千问,会导致化学方程式不正确!
LLM_MODEL_NAME = "deepseek-v3"
EMBED_MODEL_NAME = "BAAI/bge-m3"
@ -15,7 +19,14 @@ EMBED_BASE_URL = "https://api.siliconflow.cn/v1"
EMBED_DIM = 1024
EMBED_MAX_TOKEN_SIZE = 8192
NEO4J_URI = "bolt://localhost:7687"
NEO4J_USERNAME = "neo4j"
NEO4J_PASSWORD = "DsideaL147258369"
NEO4J_PASSWORD = "DsideaL147258369"
NEO4J_AUTH = (NEO4J_USERNAME, NEO4J_PASSWORD)
# MYSQL配置信息
MYSQL_HOST = "127.0.0.1"
MYSQL_PORT = 22066
MYSQL_USER = "root"
MYSQL_PASSWORD = "DsideaL147258369"
MYSQL_DB_NAME = "base_db"

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

@ -1,33 +0,0 @@
### 一、安装$MathType$ $7.8 $
由于Word中的公式编辑器在编辑数学、化学、生物等公式时并不是特别方便所以可以采用使用插件$MathType$的方式来快速录入$Word$中的公式。
安装、破解、使用,不再赘述。
### 二、手动调整公式格式
但由于格式的差别,其它软件并不能正确读取$MathType$制作的公式,为了让其它软件也能正确读取$Word$中$MathType$制作的公式,还需要一些手动的调整办法。
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250630104228950.png)
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250630104322174.png)
- 鼠标左键点击然后Ctrl+C 复制到内存
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250630104444709.png)
- Ctrl+V 即可
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250630104536077.png)
### 三、测试一下
````cmd
pandoc -f docx -t markdown --extract-media ./images -o c:/1.md D:\dsWork\dsProject\dsRag\Test\化学方程式_CHEMISTRY_1.docx
````
MathType 输入空格 | 多行公式对齐 | 标志符号垂直对齐 | 大括号分段函数对齐 | 方程组对齐 | 矩阵对齐 | 公式编号对齐 | 花体字 空心字 | 论文排版
https://blog.csdn.net/u013669912/article/details/142323661

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

@ -0,0 +1,113 @@
以下是本节课的结构梳理,按时间顺序分为六个主要部分:
---
### **1. 课程引入与单元概述**
**开始时间**: 8940毫秒
内容概要:
- 介绍第三单元四篇核心文章:《从百草园到三味书屋》《往事依依》《再塑生命的人》《论语十二章》
- 明确单元学习目标:通过复习积累成语、掌握默读技巧、挖掘学习之道
---
### **2. 任务一:温故知新,总结学习之道**
**开始时间**: 106720毫秒
内容概要:
- 分析四篇文章中的学习之道(好奇心、观察力、实践精神、珍惜时间等)
- 通过表格梳理各篇核心学习理念
- 示例:《从百草园到三味书屋》强调观察与发问,《论语十二章》强调复习与学思结合
---
### **3. 任务二:积累成语,体会要义**
**开始时间**: 421840毫秒
内容概要:
- **活动一**:整理课文及《论语》中的成语(如温故知新、不耻下问)
- **活动二**:成语应用练习(填空、写作片段)
- 注意事项:避免望文生义、注意感情色彩与适用范围
---
### **4. 任务三:阅读课文,对比朗读与默读**
**开始时间**: 936420毫秒
内容概要:
- **活动一**:回顾默读技巧(关注关键句、圈画重点、三到原则)
- **活动二**:对比朗读与默读的差异(速度、适用场景、作用)
- 实践训练:通过《读书声最美》一文练习两种阅读方法
---
### **5. 课堂小结**
**开始时间**: 1620340毫秒
内容概要:
- 总结单元三大任务成果
- 强调学习之道对日常学习的指导意义
- 巩固成语积累与默读技巧的重要性
---
### **6. 作业布置**
**开始时间**: 1658580毫秒
内容要求:
- 限时阅读《悬崖边的树》并总结学习之道
- 结合课文内容完成复习与写作任务
---
### 总结
本节课以任务驱动,从知识回顾到方法实践,逐步引导学生深化对学习之道的理解,并通过成语积累与阅读技巧训练提升语文综合能力。以下是本节课的结构梳理,按时间顺序分为六个主要部分:
---
### **1. 课程引入与单元概述**
**开始时间**: 8940毫秒
内容概要:
- 介绍第三单元四篇核心文章:《从百草园到三味书屋》《往事依依》《再塑生命的人》《论语十二章》
- 明确单元学习目标:通过复习积累成语、掌握默读技巧、挖掘学习之道
---
### **2. 任务一:温故知新,总结学习之道**
**开始时间**: 106720毫秒
内容概要:
- 分析四篇文章中的学习之道(好奇心、观察力、实践精神、珍惜时间等)
- 通过表格梳理各篇核心学习理念
- 示例:《从百草园到三味书屋》强调观察与发问,《论语十二章》强调复习与学思结合
---
### **3. 任务二:积累成语,体会要义**
**开始时间**: 421840毫秒
内容概要:
- **活动一**:整理课文及《论语》中的成语(如温故知新、不耻下问)
- **活动二**:成语应用练习(填空、写作片段)
- 注意事项:避免望文生义、注意感情色彩与适用范围
---
### **4. 任务三:阅读课文,对比朗读与默读**
**开始时间**: 936420毫秒
内容概要:
- **活动一**:回顾默读技巧(关注关键句、圈画重点、三到原则)
- **活动二**:对比朗读与默读的差异(速度、适用场景、作用)
- 实践训练:通过《读书声最美》一文练习两种阅读方法
---
### **5. 课堂小结**
**开始时间**: 1620340毫秒
内容概要:
- 总结单元三大任务成果
- 强调学习之道对日常学习的指导意义
- 巩固成语积累与默读技巧的重要性
---
### **6. 作业布置**
**开始时间**: 1658580毫秒
内容要求:
- 限时阅读《悬崖边的树》并总结学习之道
- 结合课文内容完成复习与写作任务
---
### 总结
本节课以任务驱动,从知识回顾到方法实践,逐步引导学生深化对学习之道的理解,并通过成语积累与阅读技巧训练提升语文综合能力。

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 858 KiB

@ -0,0 +1,82 @@
# 视频课程
# 七年级第三单元复习课
https://yx.ccsjy.cn/ChangChunCloudSchool/index.html#/course-detail/99f50f9c61bd52f61d359e15e3903153
D:\anaconda3\envs\py310\python.exe D:\dsWork\QingLong\AI\T3_TextSummarize.py
==================================================
✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🚀 长春云校视频课程智能打标记系统 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
==================================================
🔧 [14:13:57] 初始化分析器...
🌐 [14:13:58] 网络连接正常
✅ [14:13:58] 分析器准备就绪
📂 [14:13:58] 开始处理文件: D:\dsWork\QingLong\AI\音频文本.txt
🔍 [14:13:58] 验证文件...
📖 [14:13:58] 读取文件内容...
🧠 [14:13:58] 开始分析...
⏱️ [14:13:58] 尝试 1/10 (超时: 300s)
✅ [14:16:57] 请求成功
💾 [14:16:57] 保存到: D:\dsWork\QingLong\AI\分析结果.txt
✅ [14:16:57] 保存成功
🎉 [14:16:57] 处理完成!
==================================================
✅ 分析成功!结果如下:
以下是本节课的结构梳理按时间顺序分为5大部分
**1. 课程导入与目标说明8,940-73,100 ms**
- 单元复习导入8,940-23,219
- 单元目标说明73,100-100,259
一、总结学习之道
二、积累成语运用
三、掌握默读技巧
**2. 任务一温故知新106,400-417,500 ms**
- 核心内容:
- 四篇课文学习之道分析
•《从百草园到三味书屋》
•《往事依依》
•《再塑生命的人》
•《论语十二章》
- 系统归纳表格梳理366,160-417,500
**3. 任务二成语积累421,840-807,480 ms**
- 活动一成语展示475,800-606,440
- 课文成语解析
- 论语演化成语
- 活动二成语运用646,860-807,480
- 语段填空练习
- 片段写作训练
**4. 任务三阅读方法936,420-1,655,800 ms**
- 默读技巧讲解936,420-1,177,420
- 三到原则(眼到/心到/手到)
- 关键信息捕捉
- 朗读vs默读对比1,188,780-1,405,180
- 特点/作用/适用场景差异
- 综合训练1,407,180-1,655,800
- 文章分析《读书声最美》
- 阅读方法实践
**5. 总结与作业1,625,580-1,959,179 ms**
- 单元要点回顾1,625,580-1,656,080
- 拓展作业布置1,656,166-1,959,179
- 阅读《悬崖边的树》
- 总结学习之道
**时间轴完整结构:**
| 部分名称 | 开始时间ms | 主要内容 |
|------------------------|----------------|--------------------------------------------------------------------------|
| 课程导入与目标说明 | 8,940 | 单元概述、教学目标设定 |
| 任务一:温故知新 | 106,400 | 四篇课文学习之道深度解析 |
| 任务二:成语积累 | 421,840 | 成语知识系统梳理与运用实践 |
| 任务三:阅读方法 | 936,420 | 默读技巧训练/朗读与默读对比分析 |
| 总结与作业 | 1,625,580 | 单元知识结构化总结/拓展阅读《悬崖边的树》 |
时间单位为毫秒ms完整课程时长约32分钟1,959,179 ms ≈ 1,959秒
==================================================
进程已结束,退出代码为 0

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

@ -0,0 +1,76 @@
import argparse
import alibabacloud_oss_v2 as oss
ALY_ACCESS_KEY_ID = 'LTAI5t5jxkgJtRK8wew8fnbq'
ALY_ACCESS_KEY_SECRET = 'b8HXNGz7IkI3Dhv7BZx9BNBEZy1uku'
ALY_REGION = 'cn-hangzhou'
ALY_ENDPOINT = 'https://oss-cn-hangzhou.aliyuncs.com'
ALY_BUCKET_NAME = 'ylt'
# 目标键值
key = "HuangHai/Test/Source.jpg"
def main():
# 使用硬编码参数替换命令行参数
args = argparse.Namespace(
region=ALY_REGION,
bucket=ALY_BUCKET_NAME,
endpoint=ALY_ENDPOINT,
key=key
)
# 使用硬编码凭证替代环境变量
credentials_provider = oss.credentials.StaticCredentialsProvider(
ALY_ACCESS_KEY_ID,
ALY_ACCESS_KEY_SECRET
)
# 加载SDK的默认配置并设置凭证提供者
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# 设置配置中的区域信息
cfg.region = args.region
# 如果提供了endpoint参数则设置配置中的endpoint
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 使用配置好的信息创建OSS客户端
client = oss.Client(cfg)
# 定义一个字典变量 progress_state 用于保存上传进度状态,初始值为 0
progress_state = {'saved': 0}
def _progress_fn(n, written, total):
# 使用字典存储累计写入的字节数,避免使用 global 变量
progress_state['saved'] += n
# 计算当前上传百分比,将已写入字节数与总字节数进行除法运算后取整
rate = int(100 * (float(written) / float(total)))
# 打印当前上传进度,\r 表示回到行首,实现命令行中实时刷新效果
# end='' 表示不换行,使下一次打印覆盖当前行
print(f'\r上传进度:{rate}% ', end='')
# 执行上传对象的请求,指定存储空间名称、对象名称和数据内容
result = client.put_object_from_file(oss.PutObjectRequest(
bucket=args.bucket,
key=args.key,
progress_fn=_progress_fn,
),
r"D:\dsWork\dsProject\dsLightRag\ShiTi\Docx\Source.jpg", # 指定本地文件路径
)
# 输出请求的结果状态码、请求ID、内容MD5、ETag、CRC64校验码和版本ID用于检查请求是否成功
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' content md5: {result.content_md5},'
f' etag: {result.etag},'
f' hash crc64: {result.hash_crc64},'
f' version id: {result.version_id},'
)
# 新增:输出完整路径
print(f'文件已上传至https://{args.bucket}.{args.endpoint.replace("https://","")}/{args.key}')
if __name__ == "__main__":
main() # 脚本入口当文件被直接运行时调用main函数

@ -0,0 +1,33 @@
from openai import OpenAI
from Util.LightRagUtil import format_exam_content
from Config.Config import *
# 一、调用OCR整理出试题
client = OpenAI(
api_key=LLM_API_KEY,
base_url=LLM_BASE_URL,
)
prompt = "请提取图片中的试题"
completion = client.chat.completions.create(
model="qwen-vl-ocr-latest",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": "https://ylt.oss-cn-hangzhou.aliyuncs.com/HuangHai/Test/Source.jpg",
"min_pixels": 28 * 28 * 4,
"max_pixels": 28 * 28 * 8192
},
{"type": "text", "text": prompt},
]
}
])
ocr_text = completion.choices[0].message.content
# 二、调用格式化函数处理内容
format_exam_content(raw_text=ocr_text, output_path="../output/数学OCR整理后的结果.md")
print("保存成功!")

@ -0,0 +1,14 @@
import asyncio
from Util.DocxUtil import get_docx_content_by_pandoc
async def main():
# 要处理的文件路径
file_path = "Docx/《动能定理》巩固练习.docx"
# 转换docx为md
get_docx_content_by_pandoc(file_path, './Word转试题.md', parent_dir=True)
if __name__ == "__main__":
asyncio.run(main())

@ -0,0 +1,13 @@
【题型】不定项选择
【题文】如图所示,固定斜面倾角为*θ*,整个斜面分为*AB*、*BC*两段,*AB*2*BC*.小物块*P*(可视为质点)与*AB*、*BC*两段斜面间的动摩擦因数分别为*μ*~1~、*μ*~2~.已知*P*由静止开始从*A*点释放,恰好能滑动到*C*点而停下,那么*θ*、*μ*~1~、*μ*~2~间应满足的关系是(  )
![5-40.tif](../static/Images/85927c7b95a747f9bef65fd67117d66a/media/image1.png){width="0.9847222222222223in"
height="0.6979166666666666in"}A$tan\theta\text{}\frac{\mu_{1} + 2\mu_{2}}{3}$
B$tan\theta\text{}\frac{2\mu_{1} + \mu_{2}}{3}$
C$tan\theta\text{}2\mu_{1} - \mu_{2}$
D$tan\theta\text{}2\mu_{2} - \mu_{1}$
【答案】 B
【解析】设斜面的长度为*l*,小物块从斜面顶端下滑到斜面底端的全过程由动能定理得:
$$mglsin\theta\text{}\mu_{1}mg\frac{2l}{3}cos\theta\text{}\mu_{2}mg\frac{l}{3}cos\theta\text{}0$$
解得$tan\theta\text{}\frac{2\mu_{1} + \mu_{2}}{3}$故B正确
【知识点】动能定理
【难度】中

@ -1,13 +1,20 @@
import json
import subprocess
import tempfile
import urllib
import uuid
from io import BytesIO
import fastapi
import uvicorn
from fastapi import FastAPI
from fastapi import FastAPI, HTTPException
from lightrag import QueryParam
from sse_starlette import EventSourceResponse
from starlette.responses import StreamingResponse
from starlette.staticfiles import StaticFiles
from Util.LightRagUtil import *
from Util.MySQLUtil import init_mysql_pool
# 在程序开始时添加以下配置
logging.basicConfig(
@ -85,5 +92,158 @@ async def rag(request: fastapi.Request):
return EventSourceResponse(generate_response_stream(query=query))
@app.post("/api/save-word")
async def save_to_word(request: fastapi.Request):
output_file = None
try:
# Parse request data
try:
data = await request.json()
markdown_content = data.get('markdown_content', '')
if not markdown_content:
raise ValueError("Empty MarkDown content")
except Exception as e:
logger.error(f"Request parsing failed: {str(e)}")
raise HTTPException(status_code=400, detail=f"Invalid request: {str(e)}")
# 创建临时Markdown文件
temp_md = os.path.join(tempfile.gettempdir(), uuid.uuid4().hex + ".md")
with open(temp_md, "w", encoding="utf-8") as f:
f.write(markdown_content)
# 使用pandoc转换
output_file = os.path.join(tempfile.gettempdir(), "【理想大模型】问答.docx")
subprocess.run(['pandoc', temp_md, '-o', output_file, '--resource-path=static'], check=True)
# 读取生成的Word文件
with open(output_file, "rb") as f:
stream = BytesIO(f.read())
# 返回响应
encoded_filename = urllib.parse.quote("【理想大模型】问答.docx")
return StreamingResponse(
stream,
media_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
headers={"Content-Disposition": f"attachment; filename*=UTF-8''{encoded_filename}"})
except HTTPException:
raise
except Exception as e:
logger.error(f"Unexpected error: {str(e)}")
raise HTTPException(status_code=500, detail="Internal server error")
finally:
# 清理临时文件
try:
if temp_md and os.path.exists(temp_md):
os.remove(temp_md)
if output_file and os.path.exists(output_file):
os.remove(output_file)
except Exception as e:
logger.warning(f"Failed to clean up temp files: {str(e)}")
@app.get("/api/tree-data")
async def get_tree_data():
try:
mysql_pool = await init_mysql_pool()
async with mysql_pool.acquire() as conn:
await conn.ping()
async with conn.cursor() as cur:
await cur.execute("""
SELECT id,
title,
parent_id,
is_leaf,
prerequisite,
related
FROM knowledge_points
ORDER BY parent_id, id
""")
rows = await cur.fetchall()
# 构建节点映射
nodes = {}
for row in rows:
prerequisite_data = json.loads(row[4]) if row[4] else []
# 转换先修知识格式
if isinstance(prerequisite_data, list) and len(prerequisite_data) > 0 and isinstance(prerequisite_data[0],
dict):
# 已经是新格式
prerequisites = prerequisite_data
else:
# 转换为新格式
prerequisites = [{"id": str(id), "title": title} for id, title in
(prerequisite_data or [])] if prerequisite_data else None
nodes[row[0]] = {
"id": row[0],
"title": row[1],
"parent_id": row[2] if row[2] is not None else 0,
"isParent": not row[3],
"prerequisite": prerequisites if prerequisites and len(prerequisites) > 0 else None,
"related": json.loads(row[5]) if row[5] and len(json.loads(row[5])) > 0 else None,
"open": True
}
# 构建树形结构
tree_data = []
for node_id, node in nodes.items():
parent_id = node["parent_id"]
if parent_id == 0:
tree_data.append(node)
else:
if parent_id in nodes:
if "children" not in nodes[parent_id]:
nodes[parent_id]["children"] = []
nodes[parent_id]["children"].append(node)
return {"code": 0, "data": tree_data}
except Exception as e:
return {"code": 1, "msg": str(e)}
@app.post("/api/update-knowledge")
async def update_knowledge(request: fastapi.Request):
try:
data = await request.json()
node_id = data.get('node_id')
knowledge = data.get('knowledge', [])
update_type = data.get('update_type', 'prerequisite') # 默认为先修知识
if not node_id:
raise ValueError("Missing node_id")
mysql_pool = await init_mysql_pool()
async with mysql_pool.acquire() as conn:
await conn.ping()
async with conn.cursor() as cur:
if update_type == 'prerequisite':
await cur.execute(
"""
UPDATE knowledge_points
SET prerequisite = %s
WHERE id = %s
""",
(json.dumps([{"id": p["id"], "title": p["title"]} for p in knowledge], ensure_ascii=False),
node_id)
)
else: # related knowledge
await cur.execute(
"""
UPDATE knowledge_points
SET related = %s
WHERE id = %s
""",
(json.dumps([{"id": p["id"], "title": p["title"]} for p in knowledge], ensure_ascii=False),
node_id)
)
await conn.commit()
return {"code": 0, "msg": "更新成功"}
except Exception as e:
logger.error(f"更新知识失败: {str(e)}")
return {"code": 1, "msg": str(e)}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)

@ -5,7 +5,7 @@ from Util.LightRagUtil import configure_logging, initialize_rag
import os
# 数学
KEMU = 'Chemistry' # Chinese,Math,Chemistry
KEMU = 'JiHe' # Chinese,Math,Chemistry,JiHe
# 组装文件路径
WORKING_DIR = "./Topic/" + KEMU
@ -34,6 +34,7 @@ async def main():
print(f"Deleting old file:: {file_path}")
try:
# 注意默认设置使用NetworkX
rag = await initialize_rag(WORKING_DIR)
await rag.ainsert(content)
print("\nIndexing completed successfully!")

@ -8,10 +8,12 @@ data = [
# {"NAME": "Chemistry", "Q": "硝酸光照分解的化学反应方程式是什么", "ChineseName": "化学"},
{"NAME": "Chemistry", "Q": "氢气与氧气燃烧的现象", "ChineseName": "化学"},
{"NAME": "Math", "Q": "氧化铁与硝酸的化学反应方程式是什么", "ChineseName": "数学"},
{"NAME": "Chinese", "Q": "氧化铁与硝酸的化学反应方程式是什么", "ChineseName": "语文"}]
{"NAME": "Chinese", "Q": "氧化铁与硝酸的化学反应方程式是什么", "ChineseName": "语文"},
{"NAME": "JiHe", "Q": "三角形两边之和大于第三边的证明", "ChineseName": "几何"}
]
# 准备查询的科目
KEMU = "Chemistry"
KEMU = "JiHe" # Chemistry JiHe
# 查找索引号
idx = [i for i, d in enumerate(data) if d["NAME"] == KEMU][0]

@ -0,0 +1,59 @@
from Util.MySQLUtil import init_mysql_pool
from openai import OpenAI
from Config.Config import LLM_API_KEY, LLM_BASE_URL, LLM_MODEL_NAME
import asyncio
class QuestionMatcher:
def __init__(self):
self.client = OpenAI(api_key=LLM_API_KEY, base_url=LLM_BASE_URL)
self.model = LLM_MODEL_NAME
async def match_question_to_knowledge(self, question: str, knowledge_points: list):
# 构建提示词让LLM直接判断
prompt = f"""请从以下知识点中选择最匹配题目"{question}"的一个或多个知识点:
知识点列表:
"""
for kp in knowledge_points:
prompt += f"- ID:{kp[0]}, 名称:{kp[1]}\n"
prompt += "\n请直接返回最匹配知识点的ID和名称格式为:ID|名称"
response = self.client.chat.completions.create(
model=self.model,
messages=[{"role": "user", "content": prompt}],
max_tokens=100
)
return response.choices[0].message.content
async def main():
mysql_pool = await init_mysql_pool()
matcher = QuestionMatcher()
async with mysql_pool.acquire() as conn:
await conn.ping()
async with conn.cursor() as cur:
await cur.execute("SELECT id, title,is_leaf FROM knowledge_points where is_leaf=1")
knowledge_points = await cur.fetchall()
questions = [
"小明有3个苹果又买了5个现在有多少个苹果",
"一个长方形的长是5cm宽是3cm面积是多少",
"小明的学校在小明家的东南方向150米处他每天中午都回家吃饭请问小明在上学和放学的路上一天一共走了多少米",
"兰兰家在学校的南面500米处方方家在兰兰家北面200米处请问学校在方方家什么方向的多少米处",
"小强的家门面向东,放学回家后站在门前,面向家门,他的前后左右分别是什么方向?",
"小明和小立背对背站立小明向北走150米小立向南走120米两人相距多远",
"1500棵树苗平均分给5个班种植每个班又将树苗平均分给5个小组每个小组分得多少棵树苗",
"粮店运来120吨大米第一天卖出总数的一半第二天卖出剩下的一半粮店还剩大米多少吨"
]
for question in questions:
match_result = await matcher.match_question_to_knowledge(question, knowledge_points)
print(f"题目: {question}")
print(f"匹配结果: {match_result}")
if __name__ == '__main__':
asyncio.run(main())

@ -16,14 +16,54 @@
<node id="Nitric Acid">
<data key="d0">Nitric Acid</data>
<data key="d1">category</data>
<<<<<<< HEAD
<data key="d2">Nitric Acid (HNO₃) is a chemical compound involved in decomposition and reaction processes described in the text.</data>
<data key="d3">chunk-c944b40c845357549a25762357eaddc7</data>
<data key="d4">unknown_source</data>
<data key="d5">1752193087</data>
=======
<data key="d2">Nitric acid (HNO₃) is a chemical compound involved in photodecomposition and reactions with iron oxide.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
</node>
<node id="Iron Oxide">
<data key="d0">Iron Oxide</data>
<data key="d1">category</data>
<data key="d2">Iron oxide (FeO) is a chemical compound that reacts with nitric acid under heat to produce iron nitrate, water, and nitrogen dioxide.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
</node>
<node id="Hydrogen">
<data key="d0">Hydrogen</data>
<data key="d1">category</data>
<data key="d2">Hydrogen (H₂) is a chemical element that combusts with oxygen to form water.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
</node>
<node id="Oxygen">
<data key="d0">Oxygen</data>
<data key="d1">category</data>
<data key="d2">Oxygen (O₂) is a chemical element involved in combustion reactions with hydrogen.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
</node>
<node id="Water">
<data key="d0">Water</data>
<data key="d1">category</data>
<data key="d2">Water (H₂O) is the product of the combustion reaction between hydrogen and oxygen.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
>>>>>>> 402c9596e8417ab8a6aefc9985d04acf0169c786
</node>
<node id="Nitrogen Dioxide">
<data key="d0">Nitrogen Dioxide</data>
<data key="d1">category</data>
<<<<<<< HEAD
<data key="d2">Nitrogen Dioxide (NO₂) is a gas produced in the decomposition of Nitric Acid and reactions involving Nitric Acid.</data>
<data key="d3">chunk-c944b40c845357549a25762357eaddc7</data>
<data key="d4">unknown_source</data>
@ -44,10 +84,17 @@
<data key="d3">chunk-c944b40c845357549a25762357eaddc7</data>
<data key="d4">unknown_source</data>
<data key="d5">1752193087</data>
=======
<data key="d2">Nitrogen dioxide (NO₂) is a byproduct of the decomposition of nitric acid and the reaction between iron oxide and nitric acid.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
>>>>>>> 402c9596e8417ab8a6aefc9985d04acf0169c786
</node>
<node id="Iron Nitrate">
<data key="d0">Iron Nitrate</data>
<data key="d1">category</data>
<<<<<<< HEAD
<data key="d2">Iron Nitrate (Fe(NO₃)₃) is a product of the reaction between Iron Oxide and Nitric Acid.</data>
<data key="d3">chunk-c944b40c845357549a25762357eaddc7</data>
<data key="d4">unknown_source</data>
@ -76,19 +123,41 @@
<data key="d3">chunk-c944b40c845357549a25762357eaddc7</data>
<data key="d4">unknown_source</data>
<data key="d5">1752193087</data>
=======
<data key="d2">Iron nitrate (Fe(NO₃)₃) is a product of the reaction between iron oxide and nitric acid.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
</node>
<node id="Nitric Acid (HNO₃)">
<data key="d0">Nitric Acid (HNO₃)</data>
<data key="d1">category</data>
<data key="d2">A strong mineral acid that undergoes photodecomposition when exposed to light, producing nitrogen dioxide, oxygen, and water.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
>>>>>>> 402c9596e8417ab8a6aefc9985d04acf0169c786
</node>
<node id="Nitrogen Dioxide (NO₂)">
<data key="d0">Nitrogen Dioxide (NO₂)</data>
<data key="d1">category</data>
<<<<<<< HEAD
<data key="d2">A reddish-brown gas produced as a byproduct in nitric acid decomposition and iron oxide reactions.</data>
<data key="d3">chunk-c944b40c845357549a25762357eaddc7</data>
<data key="d4">unknown_source</data>
<data key="d5">1752193087</data>
=======
<data key="d2">A reddish-brown toxic gas produced as a byproduct in nitric acid decomposition and iron oxide reactions.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
>>>>>>> 402c9596e8417ab8a6aefc9985d04acf0169c786
</node>
<node id="Oxygen (O₂)">
<data key="d0">Oxygen (O₂)</data>
<data key="d1">category</data>
<data key="d2">A diatomic gas produced in nitric acid decomposition and consumed in hydrogen combustion.</data>
<<<<<<< HEAD
<data key="d3">chunk-c944b40c845357549a25762357eaddc7</data>
<data key="d4">unknown_source</data>
<data key="d5">1752193087</data>
@ -116,10 +185,16 @@
<data key="d3">chunk-c944b40c845357549a25762357eaddc7</data>
<data key="d4">unknown_source</data>
<data key="d5">1752193087</data>
=======
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
>>>>>>> 402c9596e8417ab8a6aefc9985d04acf0169c786
</node>
<node id="Water (H₂O)">
<data key="d0">Water (H₂O)</data>
<data key="d1">category</data>
<<<<<<< HEAD
<data key="d2">The product of hydrogen combustion, formed when hydrogen reacts with oxygen.</data>
<data key="d3">chunk-c944b40c845357549a25762357eaddc7</data>
<data key="d4">unknown_source</data>
@ -244,6 +319,172 @@
<data key="d9">chunk-c944b40c845357549a25762357eaddc7</data>
<data key="d10">unknown_source</data>
<data key="d11">1752193087</data>
=======
<data key="d2">A compound formed in both nitric acid decomposition and hydrogen-oxygen combustion.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
</node>
<node id="Iron Oxide (FeO)">
<data key="d0">Iron Oxide (FeO)</data>
<data key="d1">category</data>
<data key="d2">A chemical compound that reacts with nitric acid to form iron nitrate, water, and nitrogen dioxide.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
</node>
<node id="Iron Nitrate (Fe(NO₃)₃)">
<data key="d0">Iron Nitrate (Fe(NO₃)₃)</data>
<data key="d1">category</data>
<data key="d2">A product formed when iron oxide reacts with nitric acid under heat.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
</node>
<node id="Hydrogen (H₂)">
<data key="d0">Hydrogen (H₂)</data>
<data key="d1">category</data>
<data key="d2">A flammable gas that combusts with oxygen to form water.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
</node>
<node id="Combustion Reaction">
<data key="d0">Combustion Reaction</data>
<data key="d1">event</data>
<data key="d2">The chemical process where hydrogen reacts with oxygen to produce water.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
</node>
<node id="Photodecomposition">
<data key="d0">Photodecomposition</data>
<data key="d1">event</data>
<data key="d2">The chemical decomposition of nitric acid under light exposure.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
</node>
<node id="Chemical Equation">
<data key="d0">Chemical Equation</data>
<data key="d1">category</data>
<data key="d2">The symbolic representation of chemical reactions described in the text.</data>
<data key="d3">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d4">unknown_source</data>
<data key="d5">1752205395</data>
</node>
<edge source="Nitric Acid" target="Nitrogen Dioxide">
<data key="d6">8.0</data>
<data key="d7">Nitric acid decomposes under light to produce nitrogen dioxide, oxygen, and water.</data>
<data key="d8">byproducts,chemical decomposition</data>
<data key="d9">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d10">unknown_source</data>
<data key="d11">1752205395</data>
</edge>
<edge source="Nitric Acid" target="Iron Oxide">
<data key="d6">9.0</data>
<data key="d7">Iron oxide reacts with nitric acid under heat to produce iron nitrate, water, and nitrogen dioxide.</data>
<data key="d8">chemical reaction,heat application</data>
<data key="d9">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d10">unknown_source</data>
<data key="d11">1752205395</data>
</edge>
<edge source="Iron Oxide" target="Iron Nitrate">
<data key="d6">7.0</data>
<data key="d7">Iron oxide is converted into iron nitrate through its reaction with nitric acid.</data>
<data key="d8">chemical transformation,product formation</data>
<data key="d9">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d10">unknown_source</data>
<data key="d11">1752205395</data>
</edge>
<edge source="Hydrogen" target="Oxygen">
<data key="d6">10.0</data>
<data key="d7">Hydrogen combusts with oxygen to form water.</data>
<data key="d8">combustion reaction,synthesis</data>
<data key="d9">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d10">unknown_source</data>
<data key="d11">1752205395</data>
</edge>
<edge source="Nitric Acid (HNO₃)" target="Nitrogen Dioxide (NO₂)">
<data key="d6">9.0</data>
<data key="d7">Nitric acid decomposes to produce nitrogen dioxide as a primary byproduct.</data>
<data key="d8">byproduct formation,chemical decomposition</data>
<data key="d9">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d10">unknown_source</data>
<data key="d11">1752205395</data>
</edge>
<edge source="Nitric Acid (HNO₃)" target="Oxygen (O₂)">
<data key="d6">8.0</data>
<data key="d7">Nitric acid decomposition releases oxygen gas as a byproduct.</data>
<data key="d8">chemical reaction,gas production</data>
<data key="d9">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d10">unknown_source</data>
<data key="d11">1752205395</data>
</edge>
<edge source="Nitric Acid (HNO₃)" target="Water (H₂O)">
<data key="d6">7.0</data>
<data key="d7">Water is produced as a byproduct of nitric acid decomposition.</data>
<data key="d8">chemical byproduct,reaction output</data>
<data key="d9">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d10">unknown_source</data>
<data key="d11">1752205395</data>
</edge>
<edge source="Nitric Acid (HNO₃)" target="Iron Oxide (FeO)">
<data key="d6">9.0</data>
<data key="d7">Iron oxide reacts with nitric acid under heat to produce various compounds.</data>
<data key="d8">acid-base reaction,heat application</data>
<data key="d9">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d10">unknown_source</data>
<data key="d11">1752205395</data>
</edge>
<edge source="Nitric Acid (HNO₃)" target="Photodecomposition">
<data key="d6">8.0</data>
<data key="d7">Photodecomposition is the process that breaks down nitric acid.</data>
<data key="d8">chemical process,decomposition</data>
<data key="d9">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d10">unknown_source</data>
<data key="d11">1752205395</data>
</edge>
<edge source="Nitrogen Dioxide (NO₂)" target="Iron Oxide (FeO)">
<data key="d6">7.0</data>
<data key="d7">Reaction between iron oxide and nitric acid produces nitrogen dioxide.</data>
<data key="d8">chemical reaction,gas production</data>
<data key="d9">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d10">unknown_source</data>
<data key="d11">1752205395</data>
</edge>
<edge source="Oxygen (O₂)" target="Hydrogen (H₂)">
<data key="d6">10.0</data>
<data key="d7">Hydrogen combusts with oxygen in a chemical reaction to produce water.</data>
<data key="d8">combustion,synthesis reaction</data>
<data key="d9">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d10">unknown_source</data>
<data key="d11">1752205395</data>
</edge>
<edge source="Water (H₂O)" target="Hydrogen (H₂)">
<data key="d6">9.0</data>
<data key="d7">Hydrogen is converted to water through combustion with oxygen.</data>
<data key="d8">chemical synthesis,product formation</data>
<data key="d9">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d10">unknown_source</data>
<data key="d11">1752205395</data>
</edge>
<edge source="Iron Oxide (FeO)" target="Iron Nitrate (Fe(NO₃)₃)">
<data key="d6">8.0</data>
<data key="d7">Iron oxide is converted to iron nitrate through reaction with nitric acid.</data>
<data key="d8">chemical transformation,product formation</data>
<data key="d9">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d10">unknown_source</data>
<data key="d11">1752205395</data>
</edge>
<edge source="Combustion Reaction" target="Chemical Equation">
<data key="d6">7.0</data>
<data key="d7">The combustion reaction is represented by a chemical equation.</data>
<data key="d8">chemical notation,symbolic representation</data>
<data key="d9">chunk-d0c3bf985a3b3b903e2fb35515fdff1e</data>
<data key="d10">unknown_source</data>
<data key="d11">1752205395</data>
>>>>>>> 402c9596e8417ab8a6aefc9985d04acf0169c786
</edge>
</graph>
</graphml>

@ -1,4 +1,5 @@
{
<<<<<<< HEAD
"doc-c944b40c845357549a25762357eaddc7": {
"status": "processed",
"chunks_count": 1,
@ -7,6 +8,16 @@
"content_length": 344,
"created_at": "2025-07-11T00:17:16.979064+00:00",
"updated_at": "2025-07-11T00:18:08.428207+00:00",
=======
"doc-d0c3bf985a3b3b903e2fb35515fdff1e": {
"status": "processed",
"chunks_count": 1,
"content": "硝酸光照分解的方程式\n$$4HNO_{3}overset{overset{}{{Delta}}}{=}4NO_{2} uparrow + O_{2} uparrow + 2HO_{2}$$\n氧化铁与硝酸的加热反应方程式\n$$FeO + 4HNO_{3}overset{overset{}{{Delta}}}{=}Fe(NO_{3})_{3} + 2H_{2} uparrow + NO_{2} uparrow$$\n氢气与氧气燃烧的现象如下图所示\n$$2H_{2} + O_{2}overset{overset{}{text{燃烧}}}{=}2H_{2}O$$\n![](./Images/c8c0221648af480699a364fd50cbbeb6/media/image1.png)",
"content_summary": "硝酸光照分解的方程式\n$$4HNO_{3}overset{overset{}{{Delta}}}{=}4NO_{2} uparrow + O_{2} uparrow + 2HO_{2}$$\n氧化铁与硝酸的加热反应方程式\n$$FeO + 4HNO_{3}overset{overset{}{{Delta}}}{=}Fe(NO_{3})_{3} + 2H_{2} uparrow + NO_{2} uparrow$$\n氢气与氧气燃烧的现象如下图所示\n$$2H_{2} + O_{2}overset{ov...",
"content_length": 344,
"created_at": "2025-07-11T03:42:25.898814+00:00",
"updated_at": "2025-07-11T03:43:17.438419+00:00",
>>>>>>> 402c9596e8417ab8a6aefc9985d04acf0169c786
"file_path": "unknown_source"
}
}

@ -1,5 +1,10 @@
{
<<<<<<< HEAD
"doc-c944b40c845357549a25762357eaddc7": {
"content": "硝酸光照分解的方程式\n$$4HNO_{3}overset{overset{}{{Delta}}}{=}4NO_{2} uparrow + O_{2} uparrow + 2HO_{2}$$\n氧化铁与硝酸的加热反应方程式\n$$FeO + 4HNO_{3}overset{overset{}{{Delta}}}{=}Fe(NO_{3})_{3} + 2H_{2} uparrow + NO_{2} uparrow$$\n氢气与氧气燃烧的现象如下图所示\n$$2H_{2} + O_{2}overset{overset{}{text{燃烧}}}{=}2H_{2}O$$\n![](./Images/554076793cbb4ac7a6baa38782527b22/media/image1.png)"
=======
"doc-d0c3bf985a3b3b903e2fb35515fdff1e": {
"content": "硝酸光照分解的方程式\n$$4HNO_{3}overset{overset{}{{Delta}}}{=}4NO_{2} uparrow + O_{2} uparrow + 2HO_{2}$$\n氧化铁与硝酸的加热反应方程式\n$$FeO + 4HNO_{3}overset{overset{}{{Delta}}}{=}Fe(NO_{3})_{3} + 2H_{2} uparrow + NO_{2} uparrow$$\n氢气与氧气燃烧的现象如下图所示\n$$2H_{2} + O_{2}overset{overset{}{text{燃烧}}}{=}2H_{2}O$$\n![](./Images/c8c0221648af480699a364fd50cbbeb6/media/image1.png)"
>>>>>>> 402c9596e8417ab8a6aefc9985d04acf0169c786
}
}

File diff suppressed because one or more lines are too long

@ -1,9 +1,17 @@
{
<<<<<<< HEAD
"chunk-c944b40c845357549a25762357eaddc7": {
"tokens": 195,
"content": "硝酸光照分解的方程式\n$$4HNO_{3}overset{overset{}{{Delta}}}{=}4NO_{2} uparrow + O_{2} uparrow + 2HO_{2}$$\n氧化铁与硝酸的加热反应方程式\n$$FeO + 4HNO_{3}overset{overset{}{{Delta}}}{=}Fe(NO_{3})_{3} + 2H_{2} uparrow + NO_{2} uparrow$$\n氢气与氧气燃烧的现象如下图所示\n$$2H_{2} + O_{2}overset{overset{}{text{燃烧}}}{=}2H_{2}O$$\n![](./Images/554076793cbb4ac7a6baa38782527b22/media/image1.png)",
"chunk_order_index": 0,
"full_doc_id": "doc-c944b40c845357549a25762357eaddc7",
=======
"chunk-d0c3bf985a3b3b903e2fb35515fdff1e": {
"tokens": 195,
"content": "硝酸光照分解的方程式\n$$4HNO_{3}overset{overset{}{{Delta}}}{=}4NO_{2} uparrow + O_{2} uparrow + 2HO_{2}$$\n氧化铁与硝酸的加热反应方程式\n$$FeO + 4HNO_{3}overset{overset{}{{Delta}}}{=}Fe(NO_{3})_{3} + 2H_{2} uparrow + NO_{2} uparrow$$\n氢气与氧气燃烧的现象如下图所示\n$$2H_{2} + O_{2}overset{overset{}{text{燃烧}}}{=}2H_{2}O$$\n![](./Images/c8c0221648af480699a364fd50cbbeb6/media/image1.png)",
"chunk_order_index": 0,
"full_doc_id": "doc-d0c3bf985a3b3b903e2fb35515fdff1e",
>>>>>>> 402c9596e8417ab8a6aefc9985d04acf0169c786
"file_path": "unknown_source"
}
}

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

@ -19,6 +19,7 @@
"embedding_min": null,
"embedding_max": null,
"original_prompt": "苏轼的家人都有谁?"
<<<<<<< HEAD
},
"0866bc72067432ca7e2676c73832db63": {
"return": "{\"high_level_keywords\": [\"\\u785d\\u9178\\u5206\\u89e3\", \"\\u5149\\u7167\\u53cd\\u5e94\", \"\\u5316\\u5b66\\u53cd\\u5e94\"], \"low_level_keywords\": [\"\\u785d\\u9178\", \"\\u5149\\u7167\", \"\\u5206\\u89e3\\u4ea7\\u7269\", \"\\u53cd\\u5e94\\u6761\\u4ef6\", \"\\u5316\\u5b66\\u65b9\\u7a0b\\u5f0f\"]}",
@ -79,6 +80,8 @@
"embedding_min": null,
"embedding_max": null,
"original_prompt": "苏轼有哪些有名的诗句?"
=======
>>>>>>> 402c9596e8417ab8a6aefc9985d04acf0169c786
}
}
}

@ -0,0 +1,393 @@
<?xml version='1.0' encoding='utf-8'?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<key id="d11" for="edge" attr.name="created_at" attr.type="long" />
<key id="d10" for="edge" attr.name="file_path" attr.type="string" />
<key id="d9" for="edge" attr.name="source_id" attr.type="string" />
<key id="d8" for="edge" attr.name="keywords" attr.type="string" />
<key id="d7" for="edge" attr.name="description" attr.type="string" />
<key id="d6" for="edge" attr.name="weight" attr.type="double" />
<key id="d5" for="node" attr.name="created_at" attr.type="long" />
<key id="d4" for="node" attr.name="file_path" attr.type="string" />
<key id="d3" for="node" attr.name="source_id" attr.type="string" />
<key id="d2" for="node" attr.name="description" attr.type="string" />
<key id="d1" for="node" attr.name="entity_type" attr.type="string" />
<key id="d0" for="node" attr.name="entity_id" attr.type="string" />
<graph edgedefault="undirected">
<node id="Triangle ABC">
<data key="d0">Triangle ABC</data>
<data key="d1">category</data>
<data key="d2">Triangle ABC is the primary geometric figure used in the proof of the triangle inequality and angle relationships.</data>
<data key="d3">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="Point D">
<data key="d0">Point D</data>
<data key="d1">category</data>
<data key="d2">Point D is constructed by extending line AB and adding segment BD equal to BC, forming an isosceles triangle.</data>
<data key="d3">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="Point P">
<data key="d0">Point P</data>
<data key="d1">category</data>
<data key="d2">Point P is an arbitrary interior point of triangle ABC, used to demonstrate angle relationships.</data>
<data key="d3">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="Euclid's Fifth Postulate">
<data key="d0">Euclid's Fifth Postulate</data>
<data key="d1">category</data>
<data key="d2">Euclid's Fifth Postulate is referenced to justify angle comparisons in the geometric proof.</data>
<data key="d3">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="Proposition 19 of the Elements">
<data key="d0">Proposition 19 of the Elements</data>
<data key="d1">category</data>
<data key="d2">Proposition 19 from Euclid's Elements is cited to establish the relationship between angles and opposite sides in the proof.</data>
<data key="d3">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="三角形ABC">
<data key="d0">三角形ABC</data>
<data key="d1">category</data>
<data key="d2">三角形ABC是证明三角形三边关系的核心几何图形用于展示边与角的几何性质。</data>
<data key="d3">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="三角不等式">
<data key="d0">三角不等式</data>
<data key="d1">category</data>
<data key="d2">三角不等式是几何学中描述三角形边长关系的基本定理,形式为|AB|+|BC||AC|。</data>
<data key="d3">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="欧几里得第五公理">
<data key="d0">欧几里得第五公理</data>
<data key="d1">category</data>
<data key="d2">欧几里得第五公理是几何学基础公理之一,用于证明角的大小关系。</data>
<data key="d3">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="几何原本">
<data key="d0">几何原本</data>
<data key="d1">category</data>
<data key="d2">《几何原本》是欧几里得的经典数学著作包含命题19等核心几何定理。</data>
<data key="d3">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="命题19">
<data key="d0">命题19</data>
<data key="d1">category</data>
<data key="d2">命题19指出大角对大边是三角形边角关系的关键依据。</data>
<data key="d3">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="点D">
<data key="d0">点D</data>
<data key="d1">category</data>
<data key="d2">点D是通过延长AB并添加BD=BC构造的辅助点形成等腰三角形BCD。</data>
<data key="d3">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="点P">
<data key="d0">点P</data>
<data key="d1">category</data>
<data key="d2">点P是三角形ABC内部的任意点用于证明角∠BPC与角∠A的关系。</data>
<data key="d3">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="BP">
<data key="d0">BP</data>
<data key="d1">geo</data>
<data key="d2">BP is a geometric line segment intersecting AC at point D.</data>
<data key="d3">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="AC">
<data key="d0">AC</data>
<data key="d1">geo</data>
<data key="d2">AC is a geometric line segment intersected by BP at point D.</data>
<data key="d3">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="D">
<data key="d0">D</data>
<data key="d1">geo</data>
<data key="d2">D is the intersection point of BP and AC.</data>
<data key="d3">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="∠BPC">
<data key="d0">∠BPC</data>
<data key="d1">category</data>
<data key="d2">∠BPC is an angle formed at point P, exterior to triangle PCD.</data>
<data key="d3">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="∠PCD">
<data key="d0">∠PCD</data>
<data key="d1">category</data>
<data key="d2">∠PCD is an angle within triangle PCD.</data>
<data key="d3">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="∠PDC">
<data key="d0">∠PDC</data>
<data key="d1">category</data>
<data key="d2">∠PDC is an angle within triangle PCD and exterior to triangle BAD.</data>
<data key="d3">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="∠DBA">
<data key="d0">∠DBA</data>
<data key="d1">category</data>
<data key="d2">∠DBA is an angle within triangle BAD.</data>
<data key="d3">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="∠A">
<data key="d0">∠A</data>
<data key="d1">category</data>
<data key="d2">∠A is an angle within triangle BAD.</data>
<data key="d3">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="△PCD">
<data key="d0">△PCD</data>
<data key="d1">category</data>
<data key="d2">△PCD is a triangle formed by points P, C, and D, with ∠PCD and ∠PDC as its interior angles.</data>
<data key="d3">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="△BAD">
<data key="d0">△BAD</data>
<data key="d1">category</data>
<data key="d2">△BAD is a triangle formed by points B, A, and D, with ∠DBA and ∠A as its interior angles.</data>
<data key="d3">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="P">
<data key="d0">P</data>
<data key="d1">geo</data>
<data key="d2">P is a geometric point where BP originates and ∠BPC is formed.</data>
<data key="d3">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="B">
<data key="d0">B</data>
<data key="d1">geo</data>
<data key="d2">B is a geometric point where BP originates and ∠DBA is formed.</data>
<data key="d3">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="C">
<data key="d0">C</data>
<data key="d1">geo</data>
<data key="d2">C is a geometric point where AC terminates and ∠PCD is formed.</data>
<data key="d3">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<node id="A">
<data key="d0">A</data>
<data key="d1">geo</data>
<data key="d2">A is a geometric point where AC originates and ∠A is formed.</data>
<data key="d3">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d4">unknown_source</data>
<data key="d5">1752211508</data>
</node>
<edge source="Triangle ABC" target="Point D">
<data key="d6">8.0</data>
<data key="d7">Point D is constructed from triangle ABC by extending AB and adding segment BD equal to BC.</data>
<data key="d8">geometric construction,triangle extension</data>
<data key="d9">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="Triangle ABC" target="Proposition 19 of the Elements">
<data key="d6">9.0</data>
<data key="d7">Proposition 19 is applied to triangle ABC to justify the relationship between angles and sides.</data>
<data key="d8">angle-side relationship,geometric theorem</data>
<data key="d9">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="Triangle ABC" target="Point P">
<data key="d6">8.0</data>
<data key="d7">Point P is an interior point of triangle ABC, used to demonstrate angle relationships within the triangle.</data>
<data key="d8">angle proof,interior point</data>
<data key="d9">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="Point D" target="Euclid's Fifth Postulate">
<data key="d6">7.0</data>
<data key="d7">Euclid's Fifth Postulate is used to compare angles in triangle ACD, which includes point D.</data>
<data key="d8">angle comparison,geometric proof</data>
<data key="d9">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="三角形ABC" target="三角不等式">
<data key="d6">9.0</data>
<data key="d7">三角不等式直接应用于三角形ABC的三边关系证明。</data>
<data key="d8">几何定理,边角关系</data>
<data key="d9">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="三角形ABC" target="欧几里得第五公理">
<data key="d6">8.0</data>
<data key="d7">第五公理用于比较三角形ACD中的角度与三角形ABC的构造相关。</data>
<data key="d8">公理应用,角度推导</data>
<data key="d9">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="三角形ABC" target="命题19">
<data key="d6">9.0</data>
<data key="d7">命题19被用于证明三角形ABC中边AD与边AC的关系。</data>
<data key="d8">几何推理,边角逻辑</data>
<data key="d9">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="三角形ABC" target="点D">
<data key="d6">7.0</data>
<data key="d7">点D是三角形ABC的延伸构造用于辅助证明边角不等式。</data>
<data key="d8">几何扩展,辅助构造</data>
<data key="d9">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="三角形ABC" target="点P">
<data key="d6">8.0</data>
<data key="d7">点P的存在证明了三角形内部点的角与顶角的关系。</data>
<data key="d8">内部角度,几何性质</data>
<data key="d9">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="几何原本" target="命题19">
<data key="d6">10.0</data>
<data key="d7">命题19源自《几何原本》是证明边角关系的理论来源。</data>
<data key="d8">定理引用,数学经典</data>
<data key="d9">chunk-75b23a7e22383153b011bd3d121184f0</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="BP" target="AC">
<data key="d6">8.0</data>
<data key="d7">BP intersects AC at point D, forming geometric relationships.</data>
<data key="d8">geometric construction,intersection</data>
<data key="d9">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="BP" target="P">
<data key="d6">7.0</data>
<data key="d7">P is the endpoint of BP where ∠BPC is formed.</data>
<data key="d8">angle formation,point-line connection</data>
<data key="d9">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="BP" target="B">
<data key="d6">8.0</data>
<data key="d7">B is the endpoint of BP where it originates.</data>
<data key="d8">line origin,point-line connection</data>
<data key="d9">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="AC" target="C">
<data key="d6">8.0</data>
<data key="d7">C is the endpoint of AC where it terminates.</data>
<data key="d8">line termination,point-line connection</data>
<data key="d9">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="AC" target="A">
<data key="d6">8.0</data>
<data key="d7">A is the endpoint of AC where it originates.</data>
<data key="d8">line origin,point-line connection</data>
<data key="d9">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="∠BPC" target="∠PCD">
<data key="d6">9.0</data>
<data key="d7">∠BPC is the sum of ∠PCD and ∠PDC, showing an exterior angle relationship.</data>
<data key="d8">angle sum,exterior angle theorem</data>
<data key="d9">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="∠BPC" target="∠A">
<data key="d6">7.0</data>
<data key="d7">∠BPC is greater than ∠A due to the sum of angles in the geometric proof.</data>
<data key="d8">angle comparison,inequality</data>
<data key="d9">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="∠BPC" target="△PCD">
<data key="d6">9.0</data>
<data key="d7">∠BPC is an exterior angle of △PCD, equal to the sum of its non-adjacent interior angles.</data>
<data key="d8">angle sum,exterior angle theorem</data>
<data key="d9">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="∠PDC" target="∠DBA">
<data key="d6">9.0</data>
<data key="d7">∠PDC is the sum of ∠DBA and ∠A, demonstrating an exterior angle relationship.</data>
<data key="d8">angle sum,exterior angle theorem</data>
<data key="d9">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="∠PDC" target="△BAD">
<data key="d6">9.0</data>
<data key="d7">∠PDC is an exterior angle of △BAD, equal to the sum of its non-adjacent interior angles.</data>
<data key="d8">angle sum,exterior angle theorem</data>
<data key="d9">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
<edge source="△PCD" target="△BAD">
<data key="d6">7.0</data>
<data key="d7">Both triangles share point D and are part of the geometric proof involving angle relationships.</data>
<data key="d8">geometric proof,shared vertex</data>
<data key="d9">chunk-e2c7bd24a26246e194d4d56ab2ed22f1</data>
<data key="d10">unknown_source</data>
<data key="d11">1752211508</data>
</edge>
</graph>
</graphml>

@ -0,0 +1,12 @@
{
"doc-744d2f4e81528499ae55a82849ed415b": {
"status": "processed",
"chunks_count": 2,
"content": "三角形三边关系的证明\n证明方法如下\n作下图所示的三角形ABC。在三角形ABC中[三角不等式](https://zhida.zhihu.com/search?content_id=248217850&content_type=Article&match_order=1&q=%E4%B8%89%E8%A7%92%E4%B8%8D%E7%AD%89%E5%BC%8F&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3NTIzNzg0NDAsInEiOiLkuInop5LkuI3nrYnlvI8iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyNDgyMTc4NTAsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.rH6r8SvGmu-I9piEsmZfg2HjbXzUduYclZ2jfA3jZRs&zhida_source=entity)可以表示为|AB|+|BC||AC|。\n![](./Images/868c80b8ff2547adb2d6b6c62c9b4c41/media/image1.png)\nheight=\"1.91044072615923in\"}\n①延长直线AB至点D并使|BD|=|BC|,连接|DC|那么三角形BCD为等腰三角形。所以∠BDC=∠BCD。\n②记它们均为α根据[欧几里得第五公理](https://zhida.zhihu.com/search?content_id=248217850&content_type=Article&match_order=1&q=%E6%AC%A7%E5%87%A0%E9%87%8C%E5%BE%97%E7%AC%AC%E4%BA%94%E5%85%AC%E7%90%86&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3NTIzNzg0NDAsInEiOiLmrKflh6Dph4zlvpfnrKzkupTlhaznkIYiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyNDgyMTc4NTAsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.ltcWsMYJv-ZzcuBaSjYN69JC8hnIyPMFsfhIlum4yqc&zhida_source=entity)∠ACD大于角∠ADC(α)。\n③由于∠ACD的对边为AD∠ADC(α)的对边为AC所以根据大角对大边([几何原本](https://zhida.zhihu.com/search?content_id=248217850&content_type=Article&match_order=1&q=%E5%87%A0%E4%BD%95%E5%8E%9F%E6%9C%AC&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3NTIzNzg0NDAsInEiOiLlh6DkvZXljp_mnKwiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyNDgyMTc4NTAsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.Q1rCY0S2bj5Dwp3Fg7xb_VSFESz2_pCUETDybnHANvo&zhida_source=entity)中的命题19)就可以得到|AB|+|BC|=|AB|+|BD|=|AD||AC|。\n求证在三角形ABC中P为其内部任意一点。请证明∠BPC > ∠A。\n证明过程\n![](./Images/868c80b8ff2547adb2d6b6c62c9b4c41/media/image2.png)\n延长BP交AC于D\n∵∠BPC是△PCD的一个外角∠PDC是△BAD的一个外角\n∴∠BPC=∠PCD+∠PDC∠PDC=∠DBA+∠A\n∴∠BPC=∠PCD+∠DBA+∠A\n∴∠BPC∠A",
"content_summary": "三角形三边关系的证明\n证明方法如下\n作下图所示的三角形ABC。在三角形ABC中[三角不等式](https://zhida.zhihu.com/search?content_id=248217850&content_type=Article&match_order=1&q=%E4%B8%89%E8%A7%92%E4%B8%8D%E7%AD%89%E5%BC%8F&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9z...",
"content_length": 1975,
"created_at": "2025-07-11T05:24:21.601678+00:00",
"updated_at": "2025-07-11T05:25:09.796687+00:00",
"file_path": "unknown_source"
}
}

@ -0,0 +1,5 @@
{
"doc-744d2f4e81528499ae55a82849ed415b": {
"content": "三角形三边关系的证明\n证明方法如下\n作下图所示的三角形ABC。在三角形ABC中[三角不等式](https://zhida.zhihu.com/search?content_id=248217850&content_type=Article&match_order=1&q=%E4%B8%89%E8%A7%92%E4%B8%8D%E7%AD%89%E5%BC%8F&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3NTIzNzg0NDAsInEiOiLkuInop5LkuI3nrYnlvI8iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyNDgyMTc4NTAsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.rH6r8SvGmu-I9piEsmZfg2HjbXzUduYclZ2jfA3jZRs&zhida_source=entity)可以表示为|AB|+|BC||AC|。\n![](./Images/868c80b8ff2547adb2d6b6c62c9b4c41/media/image1.png)\nheight=\"1.91044072615923in\"}\n①延长直线AB至点D并使|BD|=|BC|,连接|DC|那么三角形BCD为等腰三角形。所以∠BDC=∠BCD。\n②记它们均为α根据[欧几里得第五公理](https://zhida.zhihu.com/search?content_id=248217850&content_type=Article&match_order=1&q=%E6%AC%A7%E5%87%A0%E9%87%8C%E5%BE%97%E7%AC%AC%E4%BA%94%E5%85%AC%E7%90%86&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3NTIzNzg0NDAsInEiOiLmrKflh6Dph4zlvpfnrKzkupTlhaznkIYiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyNDgyMTc4NTAsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.ltcWsMYJv-ZzcuBaSjYN69JC8hnIyPMFsfhIlum4yqc&zhida_source=entity)∠ACD大于角∠ADC(α)。\n③由于∠ACD的对边为AD∠ADC(α)的对边为AC所以根据大角对大边([几何原本](https://zhida.zhihu.com/search?content_id=248217850&content_type=Article&match_order=1&q=%E5%87%A0%E4%BD%95%E5%8E%9F%E6%9C%AC&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3NTIzNzg0NDAsInEiOiLlh6DkvZXljp_mnKwiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyNDgyMTc4NTAsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.Q1rCY0S2bj5Dwp3Fg7xb_VSFESz2_pCUETDybnHANvo&zhida_source=entity)中的命题19)就可以得到|AB|+|BC|=|AB|+|BD|=|AD||AC|。\n求证在三角形ABC中P为其内部任意一点。请证明∠BPC > ∠A。\n证明过程\n![](./Images/868c80b8ff2547adb2d6b6c62c9b4c41/media/image2.png)\n延长BP交AC于D\n∵∠BPC是△PCD的一个外角∠PDC是△BAD的一个外角\n∴∠BPC=∠PCD+∠PDC∠PDC=∠DBA+∠A\n∴∠BPC=∠PCD+∠DBA+∠A\n∴∠BPC∠A"
}
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,16 @@
{
"chunk-75b23a7e22383153b011bd3d121184f0": {
"tokens": 1200,
"content": "三角形三边关系的证明\n证明方法如下\n作下图所示的三角形ABC。在三角形ABC中[三角不等式](https://zhida.zhihu.com/search?content_id=248217850&content_type=Article&match_order=1&q=%E4%B8%89%E8%A7%92%E4%B8%8D%E7%AD%89%E5%BC%8F&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3NTIzNzg0NDAsInEiOiLkuInop5LkuI3nrYnlvI8iLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyNDgyMTc4NTAsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.rH6r8SvGmu-I9piEsmZfg2HjbXzUduYclZ2jfA3jZRs&zhida_source=entity)可以表示为|AB|+|BC||AC|。\n![](./Images/868c80b8ff2547adb2d6b6c62c9b4c41/media/image1.png)\nheight=\"1.91044072615923in\"}\n①延长直线AB至点D并使|BD|=|BC|,连接|DC|那么三角形BCD为等腰三角形。所以∠BDC=∠BCD。\n②记它们均为α根据[欧几里得第五公理](https://zhida.zhihu.com/search?content_id=248217850&content_type=Article&match_order=1&q=%E6%AC%A7%E5%87%A0%E9%87%8C%E5%BE%97%E7%AC%AC%E4%BA%94%E5%85%AC%E7%90%86&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3NTIzNzg0NDAsInEiOiLmrKflh6Dph4zlvpfnrKzkupTlhaznkIYiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyNDgyMTc4NTAsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.ltcWsMYJv-ZzcuBaSjYN69JC8hnIyPMFsfhIlum4yqc&zhida_source=entity)∠ACD大于角∠ADC(α)。\n③由于∠ACD的对边为AD∠ADC(α)的对边为AC所以根据大角对大边([几何原本](https://zhida.zhihu.com/search?content_id=248217850&content_type=Article&match_order=1&q=%E5%87%A0%E4%BD%95%E5%8E%9F%E6%9C%AC&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3NTIzNzg0NDAsInEiOiLlh6DkvZXljp_mnKwiLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyNDgyMTc4NTAsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.Q1rCY0S2bj5Dwp3Fg7xb_VSFESz2_pCUETDybnHANvo&zhida_source=entity)中的命题19)就可以得到|AB|+|BC|=|AB|+|BD|=|AD||AC|。\n求证在三角形ABC中P为其内部任意一点。请证明∠BPC > ∠A。\n证明过程\n![](./Images/868c80b8ff2547adb2d6b6c62c9b4c41/media/image2.png)\n延长BP交AC于D\n∵∠BPC是△PCD的一个外角∠PDC是△BAD的一个外角\n∴∠BPC=∠PCD+∠PDC∠PDC=∠DBA+∠A\n∴∠BPC=∠PCD+∠DBA",
"chunk_order_index": 0,
"full_doc_id": "doc-744d2f4e81528499ae55a82849ed415b",
"file_path": "unknown_source"
},
"chunk-e2c7bd24a26246e194d4d56ab2ed22f1": {
"tokens": 115,
"content": "2d6b6c62c9b4c41/media/image2.png)\n延长BP交AC于D\n∵∠BPC是△PCD的一个外角∠PDC是△BAD的一个外角\n∴∠BPC=∠PCD+∠PDC∠PDC=∠DBA+∠A\n∴∠BPC=∠PCD+∠DBA+∠A\n∴∠BPC∠A",
"chunk_order_index": 1,
"full_doc_id": "doc-744d2f4e81528499ae55a82849ed415b",
"file_path": "unknown_source"
}
}

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

@ -9,6 +9,7 @@
"embedding_min": null,
"embedding_max": null,
"original_prompt": "小学数学中有哪些常见模型?"
<<<<<<< HEAD
},
"9b37cd625bfa223f5c83501990ad6be1": {
"return": "{\"high_level_keywords\": [\"\\u82cf\\u8f7c\", \"\\u5bb6\\u4eba\", \"\\u5bb6\\u5ead\\u5173\\u7cfb\"], \"low_level_keywords\": [\"\\u82cf\\u6d35\", \"\\u82cf\\u8f99\", \"\\u738b\\u5f17\", \"\\u738b\\u671d\\u4e91\", \"\\u82cf\\u8fc8\", \"\\u82cf\\u8fc7\"]}",
@ -49,6 +50,8 @@
"embedding_min": null,
"embedding_max": null,
"original_prompt": "帮我写一下 如何理解点、线、面、体、角 的教学设计"
=======
>>>>>>> 402c9596e8417ab8a6aefc9985d04acf0169c786
}
}
}

@ -2,7 +2,41 @@ import os
import subprocess
import uuid
from PIL import Image
import os
def resize_images_in_directory(directory_path, max_width=640, max_height=480):
"""
遍历目录下所有图片并缩放到指定尺寸
:param directory_path: 图片目录路径
:param max_width: 最大宽度
:param max_height: 最大高度
"""
# 支持的图片格式
valid_extensions = ('.jpg', '.jpeg', '.png', '.bmp', '.gif')
for root, _, files in os.walk(directory_path):
for filename in files:
if filename.lower().endswith(valid_extensions):
file_path = os.path.join(root, filename)
try:
with Image.open(file_path) as img:
# 计算缩放比例
width, height = img.size
ratio = min(max_width / width, max_height / height)
# 如果图片已经小于目标尺寸,则跳过
if ratio >= 1:
continue
# 计算新尺寸并缩放
new_size = (int(width * ratio), int(height * ratio))
resized_img = img.resize(new_size, Image.Resampling.LANCZOS)
# 保存图片(覆盖原文件)
resized_img.save(file_path)
print(f"已缩放: {file_path} -> {new_size}")
except Exception as e:
print(f"处理 {file_path} 时出错: {str(e)}")
def get_docx_content_by_pandoc(docx_file):
# 最后拼接的内容
content = ""
@ -15,6 +49,9 @@ def get_docx_content_by_pandoc(docx_file):
os.mkdir("./static/Images/" + file_name)
subprocess.run(['pandoc', docx_file, '-f', 'docx', '-t', 'markdown', '-o', temp_markdown,
'--extract-media=./static/Images/' + file_name])
# 遍历目录 './static/Images/'+file_name 下所有的图片缩小于640*480的尺寸上
resize_images_in_directory('./static/Images/' + file_name+'/media')
# 读取然后修改内容,输出到新的文件
img_idx = 0 # 图片索引
with open(temp_markdown, 'r', encoding='utf-8') as f:
@ -23,8 +60,9 @@ def get_docx_content_by_pandoc(docx_file):
if not line:
continue
# 跳过图片高度描述行
if line.startswith('height=') and line.endswith('in"}'):
if line.startswith('height=') and (line.endswith('in"}') or line.endswith('in"')):
continue
# height="1.91044072615923in"
# 使用find()方法安全地检查图片模式
is_img = line.find("![](") >= 0 and (
line.find(".png") > 0 or

@ -97,10 +97,13 @@ async def embedding_func(texts: list[str]) -> np.ndarray:
)
async def initialize_rag(working_dir):
async def initialize_rag(working_dir, graph_storage=None):
if graph_storage is None:
graph_storage = 'NetworkXStorage'
rag = LightRAG(
working_dir=working_dir,
llm_model_func=llm_model_func,
graph_storage=graph_storage,
embedding_func=EmbeddingFunc(
embedding_dim=EMBED_DIM,
max_token_size=EMBED_MAX_TOKEN_SIZE,
@ -139,4 +142,4 @@ def create_embedding_func():
api_key=EMBED_API_KEY,
base_url=EMBED_BASE_URL,
),
)
)

@ -0,0 +1,29 @@
"""
pip install aiomysql
"""
import logging
from aiomysql import create_pool
from Config.Config import *
# 配置日志
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
logger = logging.getLogger(__name__)
# MySQL 配置
MYSQL_CONFIG = {
"host": MYSQL_HOST,
"port": MYSQL_PORT,
"user": MYSQL_USER,
"password": MYSQL_PASSWORD,
"db": MYSQL_DB_NAME,
"minsize": 1,
"maxsize": 20,
"charset": "utf8mb4"
}
# 初始化 MySQL 连接池
async def init_mysql_pool():
return await create_pool(**MYSQL_CONFIG)

@ -0,0 +1,109 @@
import re
from typing import List, Tuple
from py2neo import Graph, Node, Relationship, Subgraph
from Config import Config
def clear(db):
# 清空数据
db.run("MATCH (n) DETACH DELETE n")
# 分步删除约束和索引
try:
# 删除约束
constraints = db.run("SHOW CONSTRAINTS YIELD name").data()
for constr in constraints:
db.run(f"DROP CONSTRAINT `{constr['name']}`")
# 删除索引
indexes = db.run("SHOW INDEXES YIELD name, type WHERE type <> 'LOOKUP'").data()
for idx in indexes:
db.run(f"DROP INDEX `{idx['name']}`")
except Exception as e:
print(f"删除操作失败: {e}")
def create_subgraph(db: Graph, nodes: List[Node], relations: List[Tuple[Node, str, Node]]) -> None:
"""统一创建子图"""
subgraph = Subgraph(
nodes=nodes,
relationships=[Relationship(start, rel_type, end) for start, rel_type, end in relations]
)
db.create(subgraph)
def tx_create(db: Graph, nodes: List[Node], relations: List[Tuple[Node, str, Node]]) -> None:
"""事务方式创建数据"""
try:
tx = db.begin()
subgraph = Subgraph(
nodes=nodes,
relationships=[Relationship(start, rel_type, end) for start, rel_type, end in relations]
)
tx.create(subgraph)
db.commit(tx)
except Exception as e:
db.rollback(tx)
print(f"事务操作失败: {str(e)}")
raise
class Neo4jExecutor:
# 添加类变量存储连接配置
NEO4J_URI = Config.NEO4J_URI
NEO4J_AUTH = Config.NEO4J_AUTH
def __init__(self, uri=None, auth=None):
# 使用默认配置或传入参数
self.graph = Graph(uri or self.NEO4J_URI,
auth=auth or self.NEO4J_AUTH)
@classmethod
def create_default(cls):
"""使用默认配置创建执行器"""
return cls(cls.NEO4J_URI, cls.NEO4J_AUTH)
# 新增文本执行方法
def execute_cypher_text(self, cypher_text: str) -> dict:
"""直接执行Cypher文本"""
stats = {'total': 0, 'success': 0, 'failed': 0}
try:
statements = re.split(r';\s*\n', cypher_text)
statements = [s.strip() for s in statements if s.strip()]
stats['total'] = len(statements)
for stmt in statements:
try:
self.graph.run(stmt)
stats['success'] += 1
except Exception as e:
stats['failed'] += 1
print(f"执行失败: {stmt[:50]}... \n错误: {str(e)[:100]}")
return stats
except Exception as e:
print(f"执行失败: {stmt[:100]}... \n完整错误: {str(e)}") # 原为str(e)[:100]
return stats
def execute_cypher_file(self, file_path: str) -> dict: # 确保方法名称正确
"""执行Cypher文件"""
stats = {'total': 0, 'success': 0, 'failed': 0}
try:
with open(file_path, 'r', encoding='utf-8') as f:
cypher_script = f.read()
statements = re.split(r';\s*\n', cypher_script)
statements = [s.strip() for s in statements if s.strip()]
stats['total'] = len(statements)
for stmt in statements:
try:
self.graph.run(stmt)
stats['success'] += 1
except Exception as e:
stats['failed'] += 1
print(f"执行失败: {stmt[:50]}... \n错误: {str(e)[:100]}")
return stats
except Exception as e:
print(f"文件错误: {str(e)}")
return stats

@ -0,0 +1,67 @@
### 题目1
**题目序号**: 1
**题目内容**: 已知集合 $A=\left\{x \mid -5 < x^{3} < 5\right\}, B=\left\{-3,-1,0,2,3\right\}$,则 $A \cap B=$
**选项**:
A. $\{-1,0\}$
B. $\{2,3\}$
C. $\{-3,-1,0\}$
D. $\{-1,0,2\}$
**答案**: A
**解析**: $A \cap B=\{-1,0\}$,选 A。
---
### 题目2
**题目序号**: 2
**题目内容**: 若 $\frac{2}{z-1}=1+i$,则 $z=$
**选项**:
A. $-1-i$
B. $-1+i$
C. $1-i$
D. $1+i$
**答案**: C
**解析**: 无
---
### 题目3
**题目序号**: 3
**题目内容**: 已知向量 $\vec{a}=(0,1)$$\vec{b}=(2,x)$,若 $\vec{b} \perp (\vec{b}-4\vec{a})$,则 $x=$
**选项**:
A. $-2$
B. $-1$
C. $1$
D. $2$
**答案**: D
**解析**: $\vec{b}-4\vec{a}=(2,x-4)$$\vec{b} \perp (\vec{b}-4\vec{a})$$\therefore \vec{b}(\vec{b}-4\vec{a})=0$$\therefore 4+x(x-4)=0$$\therefore x=2$,选 D。
---
### 题目4
**题目序号**: 4
**题目内容**: 已知 $\cos(\alpha+\beta)=m$$\tan \alpha \tan \beta=2$,则 $\cos(\alpha-\beta)=$
**选项**:
A. $-3m$
B. $-\frac{m}{3}$
C. $\frac{m}{3}$
D. $3m$
**答案**: A
**解析**: $\left\{\begin{array}{l}\cos \alpha \cos \beta-\sin \alpha \sin \beta=m \\\frac{\sin \alpha \sin \beta}{\cos \alpha \cos \beta}=2\end{array}\right.$$\therefore \left\{\begin{array}{l}\sin \alpha \sin \beta=-2m \\\cos \alpha \cos \beta=-m\end{array}\right.$$\cos(\alpha-\beta)=\cos \alpha \cos \beta+\sin \alpha \sin \beta=-m-2m=-3m$,选 A。
---
### 题目5
**题目序号**: 5
**题目内容**: 已知圆柱和圆锥的底面半径相等,侧面积相等,且它们的高均为 $\sqrt{3}$,则圆锥的体积为
**选项**:
A. $2\sqrt{3}\pi$
B. $3\sqrt{3}\pi$
C. $6\sqrt{3}\pi$
D. $9\sqrt{3}\pi$
**答案**: B
**解析**: 设它们底面半径为 $r$,圆锥母线 $l$$\therefore 2\pi r\sqrt{3}=\pi rl$$\therefore l=\sqrt{3}$,则圆锥的体积为 $\frac{1}{3}\pi r^{2}h$。

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save