'commit'
This commit is contained in:
220
dsLightRag/YunXiao/action.py
Normal file
220
dsLightRag/YunXiao/action.py
Normal file
@@ -0,0 +1,220 @@
|
||||
import os
|
||||
import re
|
||||
import uuid
|
||||
import logging
|
||||
from pathlib import Path
|
||||
|
||||
import Config.Config
|
||||
from Util.ObsUtil import ObsUploader
|
||||
|
||||
# 全局变量
|
||||
logger = None
|
||||
|
||||
# 配置日志
|
||||
def setup_logging():
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(levelname)s - %(message)s',
|
||||
handlers=[logging.FileHandler('image_processing.log'), logging.StreamHandler()]
|
||||
)
|
||||
return logging.getLogger(__name__)
|
||||
|
||||
# 初始化OBS上传器
|
||||
def init_obs_uploader():
|
||||
try:
|
||||
return ObsUploader()
|
||||
except Exception as e:
|
||||
logger.error(f"初始化OBS上传器失败: {str(e)}")
|
||||
return None
|
||||
|
||||
# 生成UUID文件名(保留原始扩展名)
|
||||
def generate_uuid_filename(original_filename):
|
||||
ext = os.path.splitext(original_filename)[1].lower()
|
||||
return f"{uuid.uuid4()}{ext}"
|
||||
|
||||
# 处理单个图片文件上传
|
||||
def upload_image_to_obs(obs_uploader, image_path, target_obs_dir="HuangHai/YunXiao/"):
|
||||
if not os.path.exists(image_path):
|
||||
logger.error(f"图片文件不存在: {image_path}")
|
||||
return None
|
||||
|
||||
# 生成UUID文件名
|
||||
uuid_filename = generate_uuid_filename(os.path.basename(image_path))
|
||||
obs_object_key = f"{target_obs_dir}{uuid_filename}"
|
||||
|
||||
# 上传图片到OBS
|
||||
success, result = obs_uploader.upload_file(
|
||||
object_key=obs_object_key,
|
||||
file_path=image_path
|
||||
)
|
||||
|
||||
if success:
|
||||
https_url = f"https://{Config.Config.OBS_SERVER}/{Config.Config.OBS_BUCKET}/{obs_object_key}"
|
||||
logger.info(f"图片上传成功: {image_path} -> {https_url}")
|
||||
return https_url
|
||||
else:
|
||||
logger.error(f"图片上传失败: {image_path} - {result.get('errorMessage', '未知错误')}")
|
||||
return None
|
||||
|
||||
# 替换Markdown文件中的图片引用
|
||||
def replace_image_references(md_content, image_mapping, md_file_path):
|
||||
updated_content = md_content
|
||||
|
||||
# 处理带属性的Markdown格式图片: {attrs}
|
||||
md_pattern = re.compile(r'!\[([^]]*)\]\(([^)\s]+)(\s+[^)]*)?\)')
|
||||
|
||||
def md_replacer(match):
|
||||
alt_text = match.group(1)
|
||||
image_path = match.group(2)
|
||||
attrs = match.group(3) or '' # 获取可选的属性部分
|
||||
|
||||
# 将相对路径转换为绝对路径进行匹配
|
||||
md_dir = os.path.dirname(md_file_path)
|
||||
abs_image_path = os.path.abspath(os.path.join(md_dir, image_path))
|
||||
|
||||
# 查找映射中的URL
|
||||
for local_path, obs_url in image_mapping.items():
|
||||
if abs_image_path == local_path or image_path in local_path:
|
||||
return f"{attrs}" # 保留原始属性
|
||||
return match.group(0)
|
||||
|
||||
updated_content = md_pattern.sub(md_replacer, updated_content)
|
||||
|
||||
# 处理HTML格式图片: <img src="path" ...>
|
||||
html_pattern = re.compile(r'<img\s+[^>]*src=["\']([^"\']+)["\'][^>]*>')
|
||||
|
||||
def html_replacer(match):
|
||||
image_path = match.group(1)
|
||||
|
||||
# 查找相对路径对应的URL
|
||||
for local_path, obs_url in image_mapping.items():
|
||||
if image_path.endswith(local_path) or local_path.endswith(image_path):
|
||||
return match.group(0).replace(image_path, obs_url)
|
||||
return match.group(0)
|
||||
|
||||
updated_content = html_pattern.sub(html_replacer, updated_content)
|
||||
|
||||
return updated_content
|
||||
|
||||
# 处理单个Markdown文件
|
||||
def process_markdown_file(md_file_path, image_mapping, target_dir, current_md_path):
|
||||
try:
|
||||
with open(md_file_path, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
|
||||
# 处理图片引用
|
||||
new_content = replace_image_references(content, image_mapping, md_file_path)
|
||||
|
||||
# 保存修改后的内容
|
||||
file_name = os.path.basename(md_file_path)
|
||||
target_file_path = os.path.join(target_dir, file_name)
|
||||
with open(target_file_path, 'w', encoding='utf-8') as f:
|
||||
f.write(new_content)
|
||||
logger.info(f"已处理并保存文件到: {target_file_path}")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"处理文件 {md_file_path} 时出错: {str(e)}")
|
||||
|
||||
# 扫描并上传所有media目录中的图片
|
||||
def scan_and_upload_media_images(root_directory, obs_uploader):
|
||||
# 支持的图片扩展名
|
||||
image_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg', '.tiff']
|
||||
|
||||
# 递归查找所有media目录
|
||||
media_directories = []
|
||||
for root, dirs, files in os.walk(root_directory):
|
||||
if 'media' in dirs:
|
||||
media_dir = os.path.join(root, 'media')
|
||||
media_directories.append(media_dir)
|
||||
|
||||
logger.info(f"找到 {len(media_directories)} 个media目录")
|
||||
|
||||
# 图片路径→OBS URL映射字典
|
||||
image_mapping = {}
|
||||
|
||||
# 统计变量
|
||||
total_images = 0
|
||||
uploaded_images = 0
|
||||
|
||||
# 上传每个media目录中的所有图片
|
||||
for media_dir in media_directories:
|
||||
logger.info(f"开始处理media目录: {media_dir}")
|
||||
|
||||
# 获取目录中的所有图片文件
|
||||
image_files = []
|
||||
for file in os.listdir(media_dir):
|
||||
file_ext = os.path.splitext(file)[1].lower()
|
||||
if file_ext in image_extensions:
|
||||
image_path = os.path.join(media_dir, file)
|
||||
image_files.append(image_path)
|
||||
|
||||
logger.info(f"在 {media_dir} 中找到 {len(image_files)} 张图片")
|
||||
total_images += len(image_files)
|
||||
|
||||
# 上传每张图片并记录映射
|
||||
for image_path in image_files:
|
||||
# 使用绝对路径作为映射键
|
||||
abs_image_path = os.path.abspath(image_path)
|
||||
if abs_image_path not in image_mapping:
|
||||
obs_url = upload_image_to_obs(obs_uploader, image_path)
|
||||
if obs_url:
|
||||
image_mapping[abs_image_path] = obs_url
|
||||
uploaded_images += 1
|
||||
else:
|
||||
logger.debug(f"图片已上传,跳过: {abs_image_path}")
|
||||
|
||||
logger.info(f"总共有 {total_images} 张图片,成功上传 {uploaded_images} 张")
|
||||
return image_mapping
|
||||
|
||||
# 主处理函数
|
||||
def main():
|
||||
global logger
|
||||
logger = setup_logging()
|
||||
|
||||
# 配置参数
|
||||
root_directory = r"D:\dsWork\dsProject\dsLightRag\YunXiao\《万有引力定律》试题\基础"
|
||||
target_dir = os.path.join(os.getcwd(), "target")
|
||||
|
||||
try:
|
||||
# 初始化OBS上传器
|
||||
obs_uploader = init_obs_uploader()
|
||||
if not obs_uploader:
|
||||
logger.error("初始化OBS上传器失败,无法继续执行")
|
||||
return
|
||||
|
||||
# 创建target目录
|
||||
os.makedirs(target_dir, exist_ok=True)
|
||||
logger.info(f"已创建target目录: {target_dir}")
|
||||
|
||||
# 扫描并上传所有media目录中的图片
|
||||
image_mapping = scan_and_upload_media_images(root_directory, obs_uploader)
|
||||
if not image_mapping:
|
||||
logger.warning("未找到任何图片或图片上传失败")
|
||||
else:
|
||||
logger.info(f"共上传了 {len(image_mapping)} 张图片到OBS")
|
||||
|
||||
# 递归查找所有Markdown文件并处理
|
||||
logger.info("开始处理Markdown文件...")
|
||||
directory = Path(root_directory)
|
||||
if not directory.exists():
|
||||
logger.error(f"目录不存在: {directory}")
|
||||
return
|
||||
|
||||
md_files = list(directory.glob('**/*.md'))
|
||||
if not md_files:
|
||||
logger.warning(f"在 {directory} 中没有找到Markdown文件")
|
||||
return
|
||||
|
||||
logger.info(f"找到 {len(md_files)} 个Markdown文件")
|
||||
|
||||
# 处理每个Markdown文件
|
||||
for md_file in md_files:
|
||||
process_markdown_file(str(md_file), image_mapping, target_dir, str(md_file))
|
||||
|
||||
logger.info("所有文件处理完成!")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"程序执行出错: {str(e)}", exc_info=True)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
44
dsLightRag/YunXiao/target/《万有引力定律》基础题(简单难度)1.md
Normal file
44
dsLightRag/YunXiao/target/《万有引力定律》基础题(简单难度)1.md
Normal file
@@ -0,0 +1,44 @@
|
||||
> 1\. 下列有关万有引力的说法中,正确的是( )
|
||||
>
|
||||
> A. 物体落到地面上,说明地球对物体有引力,物体对地球没有引力
|
||||
>
|
||||
> B. {width="0.84375in"
|
||||
> height="0.4270833333333333in"}中的*G*是比例常数,牛顿亲自测出了这个常数
|
||||
>
|
||||
> C. 地球围绕太阳做圆周运动是因为地球受到太阳的引力和向心力的作用
|
||||
>
|
||||
> D. 地面上自由下落的苹果和天空中运行的月亮,受到的都是地球的引力
|
||||
>
|
||||
> 【难度】
|
||||
> 简单
|
||||
>
|
||||
> 【答案】
|
||||
>
|
||||
> D
|
||||
>
|
||||
> 【解析】
|
||||
>
|
||||
> 【解答】A、根据牛顿第三定律,地球对物体有引力,物体对地球也有引力,且等大反向,故A错误;
|
||||
>
|
||||
> B、万有引力常量是卡文迪什的扭秤实验测出的,故B错误;
|
||||
>
|
||||
> C、地球围绕太阳做圆周运动是因为受到太阳的引力,向心力是一个效果力,不是真实存在的力,故C错误;
|
||||
>
|
||||
> D、下落的苹果和天空中的月亮受到的力都是同一种力,
|
||||
> 都是地球的引力。故D正确。
|
||||
>
|
||||
> 故答案为:D。
|
||||
>
|
||||
> 【分析】熟练掌握牛顿第三定律的内容与应用。万有引力常量是卡文迪什的扭秤实验测出的,向心力是一个效果力。物体的重力及月亮绕地飞行的向心力均为物体受到地球的引力根据效果命名的。
|
||||
>
|
||||
> 【关联章节】第七章 万有引力与宇宙航行第七章 万有引力与宇宙航行 \> 2.
|
||||
> 万有引力定律第七章 万有引力与宇宙航行 \> 3. 万有引力理论的成就;
|
||||
>
|
||||
> 【关联知识点】经典力学的成就与局限性 \>
|
||||
> 万有引力定律经典力学的成就与局限性 \>
|
||||
> 万有引力定律的适用条件经典力学的成就与局限性 \>
|
||||
> 万有引力定律的应用相互作用与运动规律;
|
||||
>
|
||||
> 【关联素养点】暂无数据
|
||||
>
|
||||
> 【关联关键能力】暂无数据
|
63
dsLightRag/YunXiao/target/《万有引力定律》基础题(简单难度)2.md
Normal file
63
dsLightRag/YunXiao/target/《万有引力定律》基础题(简单难度)2.md
Normal file
@@ -0,0 +1,63 @@
|
||||
> 1\. 关于万有引力及其计算公式 {width="0.84375in"
|
||||
> height="0.4270833333333333in"},下列说法正确的是( )
|
||||
>
|
||||
> A. 万有引力只存在于质量很大的两个物体之间
|
||||
>
|
||||
> B. 根据公式知, {width="0.125in"
|
||||
> height="0.13541666666666666in"}趋近于0时,
|
||||
> {width="0.17708333333333334in"
|
||||
> height="0.17708333333333334in"}趋近于无穷大
|
||||
>
|
||||
> C.
|
||||
> 相距较远的两物体质量均增大为原来的2倍,它们之间的万有引力也会增加到原来的2倍
|
||||
>
|
||||
> D. 地球半径为 {width="0.16666666666666666in"
|
||||
> height="0.17708333333333334in"},将一物体从地面发射至离地面高度为
|
||||
> {width="0.13541666666666666in"
|
||||
> height="0.19791666666666666in"}处时,物体所受万有引力减小到原来的一半,则
|
||||
> {width="0.96875in"
|
||||
> height="0.3333333333333333in"}
|
||||
>
|
||||
> 【难度】
|
||||
> 简单
|
||||
>
|
||||
> 【答案】
|
||||
>
|
||||
> D
|
||||
>
|
||||
> 【解析】
|
||||
>
|
||||
> 【解答】A.
|
||||
> 万有引力存在任何两个物体之间,计算公式适用于质量很大的物体,A不符合题意;
|
||||
>
|
||||
> B.
|
||||
> 对于表达式而言,当两物体间距离r趋近于零时,表达式不适用,故万有引力F不会趋近于无穷大,B不符合题意;\
|
||||
>
|
||||
> C. 相距较远的两物体质量增大到原来的两倍,由
|
||||
>
|
||||
> {width="0.84375in"
|
||||
> height="0.4270833333333333in"}
|
||||
>
|
||||
> 可知,万有引力增大到原来的4倍,C不符合题意;
|
||||
>
|
||||
> D. 若万有引力减小到原来一半,即半径为原来的
|
||||
> {width="0.2604166666666667in"
|
||||
> height="0.23958333333333334in"}倍,则高度
|
||||
>
|
||||
> {width="0.875in"
|
||||
> height="0.23958333333333334in"}
|
||||
>
|
||||
> D符合题意。
|
||||
>
|
||||
> 故答案为:D。
|
||||
>
|
||||
> 【分析】利用万有引力定律的表达式可得出结论。
|
||||
>
|
||||
> 【关联章节】第七章 万有引力与宇宙航行第七章 万有引力与宇宙航行 \> 2.
|
||||
> 万有引力定律;
|
||||
>
|
||||
> 【关联知识点】经典力学的成就与局限性 \> 万有引力定律;
|
||||
>
|
||||
> 【关联素养点】暂无数据
|
||||
>
|
||||
> 【关联关键能力】暂无数据
|
41
dsLightRag/YunXiao/target/《万有引力定律》基础题(简单难度)3.md
Normal file
41
dsLightRag/YunXiao/target/《万有引力定律》基础题(简单难度)3.md
Normal file
@@ -0,0 +1,41 @@
|
||||
> 1\.
|
||||
> 假设在地球周围有质量相等的A、B两颗地球卫星,已知地球半径为R,卫星A距地面高度为R,卫星B距地面高度为2R,卫星B受到地球的万有引力大小为F,则
|
||||
> 卫星A受到地球的万有引力大小为( )
|
||||
>
|
||||
> A. {width="0.28125in"
|
||||
> height="0.4270833333333333in"} B.
|
||||
> {width="0.2916666666666667in"
|
||||
> height="0.4270833333333333in"}
|
||||
>
|
||||
> C. {width="0.28125in"
|
||||
> height="0.4270833333333333in"} D. 4F
|
||||
>
|
||||
> 【难度】
|
||||
> 简单
|
||||
>
|
||||
> 【答案】
|
||||
>
|
||||
> C
|
||||
>
|
||||
> 【解析】
|
||||
>
|
||||
> 【解答】B卫星距地心为3R,根据万有引力的表达式,可知受到的万有引力为
|
||||
> {width="1.5833333333333333in"
|
||||
> height="0.4583333333333333in"} ;A卫星距地心为2R,受到的万有引力为
|
||||
> {width="1.53125in"
|
||||
> height="0.4583333333333333in"} ,则有
|
||||
> {width="0.6354166666666666in"
|
||||
> height="0.4270833333333333in"} ;A,B,D不符合题意;C符合题意.
|
||||
>
|
||||
> 故答案为:C
|
||||
>
|
||||
> 【分析】卫星做圆周运动,万有引力提供向心力,结合卫星的轨道半径,卫星与地球之间的万有引力可以利用公式来计算比较即可。
|
||||
>
|
||||
> 【关联章节】第七章 万有引力与宇宙航行第七章 万有引力与宇宙航行 \> 2.
|
||||
> 万有引力定律;
|
||||
>
|
||||
> 【关联知识点】经典力学的成就与局限性 \> 万有引力定律;
|
||||
>
|
||||
> 【关联素养点】暂无数据
|
||||
>
|
||||
> 【关联关键能力】暂无数据
|
49
dsLightRag/YunXiao/target/《万有引力定律》基础题(简单难度)4.md
Normal file
49
dsLightRag/YunXiao/target/《万有引力定律》基础题(简单难度)4.md
Normal file
@@ -0,0 +1,49 @@
|
||||
> 1\. 质量为 {width="0.17708333333333334in"
|
||||
> height="0.15625in"}的人造地球卫星在地面上空高
|
||||
> {width="0.13541666666666666in"
|
||||
> height="0.19791666666666666in"}处绕地球做匀速圆周运动。地球质量为
|
||||
> {width="0.21875in"
|
||||
> height="0.17708333333333334in"},半径为
|
||||
> {width="0.16666666666666666in"
|
||||
> height="0.17708333333333334in"},引力常量为
|
||||
> {width="0.17708333333333334in"
|
||||
> height="0.19791666666666666in"},则卫星的向心力为( )
|
||||
>
|
||||
> A. {width="0.4895833333333333in"
|
||||
> height="0.4270833333333333in"} B.
|
||||
> {width="0.7604166666666666in"
|
||||
> height="0.5104166666666666in"}
|
||||
>
|
||||
> C. {width="0.4895833333333333in"
|
||||
> height="0.4270833333333333in"} D.
|
||||
> {width="0.5729166666666666in"
|
||||
> height="0.4270833333333333in"}
|
||||
>
|
||||
> 【难度】
|
||||
> 简单
|
||||
>
|
||||
> 【答案】
|
||||
>
|
||||
> B
|
||||
>
|
||||
> 【解析】
|
||||
>
|
||||
> 【解答】根据万有引力提供向心力可得,卫星的向心力为
|
||||
>
|
||||
> {width="1.4583333333333333in"
|
||||
> height="0.4583333333333333in"}
|
||||
>
|
||||
> B符合题意,ACD不符合题意。
|
||||
>
|
||||
> 故答案为:B。
|
||||
>
|
||||
> 【分析】根据万有引力定律公式求解卫星的向心力。
|
||||
>
|
||||
> 【关联章节】第七章 万有引力与宇宙航行第七章 万有引力与宇宙航行 \> 2.
|
||||
> 万有引力定律;
|
||||
>
|
||||
> 【关联知识点】经典力学的成就与局限性 \> 万有引力定律;
|
||||
>
|
||||
> 【关联素养点】暂无数据
|
||||
>
|
||||
> 【关联关键能力】暂无数据
|
52
dsLightRag/YunXiao/target/《万有引力定律》基础题(简单难度)5.md
Normal file
52
dsLightRag/YunXiao/target/《万有引力定律》基础题(简单难度)5.md
Normal file
@@ -0,0 +1,52 @@
|
||||
> 1\.
|
||||
> 观察"神舟十号"在圆轨道上的运动,发现每经过时间2*t*通过的弧长为*L*,该弧长对应的圆心角为*θ*(弧度),如图所示,已知引力常量为*G*,由此可推导出地球的质量为( )
|
||||
>
|
||||
> {width="4.222222222222222in"
|
||||
> height="1.6666666666666667in"}
|
||||
>
|
||||
> A. {width="0.4895833333333333in"
|
||||
> height="0.4583333333333333in"} B.
|
||||
> {width="0.375in" height="0.4583333333333333in"}
|
||||
>
|
||||
> C. {width="0.4895833333333333in"
|
||||
> height="0.4270833333333333in"} D.
|
||||
> {width="0.40625in"
|
||||
> height="0.4583333333333333in"}
|
||||
>
|
||||
> 【难度】\
|
||||
> 简单
|
||||
>
|
||||
> 【答案】
|
||||
>
|
||||
> A
|
||||
>
|
||||
> 【解析】
|
||||
>
|
||||
> 【解答】根据弧长和半径的关系,可得轨道半径为
|
||||
> {width="0.4583333333333333in"
|
||||
> height="0.4270833333333333in"}
|
||||
>
|
||||
> 根据万有引力提供向心力有\
|
||||
>
|
||||
> {width="1.6979166666666667in"
|
||||
> height="0.6979166666666666in"}
|
||||
>
|
||||
> 联立解的,地球的质量
|
||||
>
|
||||
> {width="0.8333333333333334in"
|
||||
> height="0.4583333333333333in"}
|
||||
>
|
||||
> 所以A正确,BCD错误;
|
||||
>
|
||||
> 故选A。
|
||||
>
|
||||
> 【分析】本题考查圆周运动角速度和线速度的计算以及万有引力提供向心力的计算。
|
||||
>
|
||||
> 【关联章节】第七章 万有引力与宇宙航行第七章 万有引力与宇宙航行 \> 2.
|
||||
> 万有引力定律;
|
||||
>
|
||||
> 【关联知识点】经典力学的成就与局限性 \> 万有引力定律;
|
||||
>
|
||||
> 【关联素养点】暂无数据
|
||||
>
|
||||
> 【关联关键能力】暂无数据
|
@@ -158,9 +158,8 @@
|
||||
<button id="randomExampleBtn"
|
||||
class="px-8 py-4 bg-gradient-to-r from-primary to-secondary text-white font-medium rounded-lg shadow-lg hover:shadow-xl transform hover:-translate-y-1 transition-all duration-300 flex items-center"
|
||||
title="随机选择一个示例填充表单">
|
||||
<i class="fa fa-random mr-"></i>随机示例
|
||||
<i class="fa fa-random mr-2"></i>随机示例
|
||||
</button>
|
||||
|
||||
<button id="startEditBtn"
|
||||
class="px-8 py-4 bg-gradient-to-r from-primary to-secondary text-white font-medium rounded-lg shadow-lg hover:shadow-xl transform hover:-translate-y-1 transition-all duration-300 flex items-center">
|
||||
<i class="fa fa-magic mr-2"></i>开始编辑
|
||||
|
Reference in New Issue
Block a user