HostServer001/jee_mains_pyqs_data_base

GitHub: HostServer001/jee_mains_pyqs_data_base

基于语义嵌入聚类的 JEE Mains 历年真题数据库工具,支持多维度过滤、相似题聚类和 HTML/PDF 渲染输出。

Stars: 5 | Forks: 1

# 备注 本项目已不再维护,但[网站](https://jee-data-base.streamlit.app/)仍可正常访问和使用。 如果你极其希望使用本项目,请查看[这个项目](https://github.com/HostServer001/jee_pyqs/tree/main/jee_data_base),它的源代码是库的早期版本,在发生分支冲突并不得不删除历史记录之前。它更稳定,因为它是我们[网站](https://jee-data-base.streamlit.app/)的后端。如果你想要安装它,需要克隆该仓库并将其作为本地模块使用;如需进行 pip install 操作,请获取此仓库中的 setup.py 和 pyproject.toml 文件,将它们放入那个仓库的根目录中,然后执行 pip install 命令。 # JEE Mains PYQS 数据库 ![image](https://github.com/HostServer001/jee_mains_pyqs_data_base/blob/main/assets/image.png) 本项目提供了一个包含超过 14,000 道 JEE Mains 往年真题(PYQS)的结构化数据库。这些问题是从订阅站点的 API 端点逆向工程得来,并进行了缓存以提高使用效率。它支持聚类、过滤以及将题目渲染为 HTML 以便于学习。 ## 功能特性 * 访问 14,000+ 道 JEE Mains 往年真题 * 使用 `intfloat/e5-large-v2` 模型预先计算 embeddings,以实现高效聚类 * 基于语义 embeddings 将相似问题聚类在一起 * 应用可链式调用的过滤器(按章节、主题、年份等过滤) * 使用主题样式将过滤或聚类后的题目渲染为 HTML ## 项目结构 core 文件夹包含以下模块: * **cache.py** – 定义了用于创建和加载内部缓存的 `Cache` 类。不打算供用户直接交互使用。 * **chapter.py** – 定义了 `Chapter` 类,该类存储在 `DataBaseChapters` 缓存文件中。仅供内部使用。 * **data_base.py** – 定义了 `DataBase` 类。在任何操作之前必须初始化此类。 * **filter.py** – 定义了 `Filter` 类。提供可链式调用的方法来过滤问题并更新当前集合。 * **question.py** – 定义了 `Question` 对象。 * **styles.py** – 包含用于渲染的主题 HTML 样式。 * **pdfy.py** – 提供将聚类或问题集合转换为 HTML 的功能。 ## 安装说明 * **使用 pip 安装**: * 安装软件包 ``` pip install jee_data_base ``` * 安装 chromium ```plawright install chromium``` * **克隆仓库**: ``` git clone https://github.com/HostServer001/jee_mains_pyqs_data_base ``` 进入项目目录并确保已安装依赖项。 ## 使用说明 ### 基础初始化 ``` import os from jee_data_base import DataBase, Filter, pdfy # 初始化数据库 db = DataBase() # 初始化过滤器 filter = Filter(db.chapters_dict) # 检查可用章节 print(filter.get_possible_filter_values()["chapter"]) ``` **强烈建议尽可能多地进行过滤,以便你的 HTML 文件能在浏览器中流畅打开** **始终建议使用 `cluster` 方法和 `render_cluster_to_html` 方法来获取输出结果,这提供了最高效的练习方式** **如果你对各章的准备不够扎实,想要快速浏览并从中获取最大收益,`render_cluster_to_html_skim` 方法会非常棒(请在执行 `cluster` 之后使用)** ### 最实用的功能 ``` from jee_data_base import DataBase,Filter import asyncio path = "" chpater = "" #Load the data base db = DataBase() #Initialize filter filter = Filter(db.chapter_dict) #Create html file asyncio.run(filter.render_chap_last5yrs(path,chpater,skim=False,output_file_format="pdf")) ``` ### 按章节和年份过滤 ``` # 获取特定章节过去 3 年内的所有问题 questions = filter.by_chapter("thermodynamics").by_n_last_yrs(3).get() for q in questions: print(q.question) ``` ### 聚类与渲染 ``` # 按主题对问题进行聚类并渲染到 HTML filter.current_set = filter.by_chapter("organic-compounds").by_n_last_yrs(5).get() cluster = filter.cluster() pdfy.render_cluster_to_html( cluster, "organic_compounds.html", "Organic Compounds - Last 5 Years" )# can use render_cluster_to_html_skim() function to make a file which #makes a html file perfected for skiming through a chapter ``` ### 示例:按主题渲染章节问题 ``` def render_chapter(chapter_name: str): all_q = filter.by_chapter(chapter_name).by_n_last_yrs(5).get() os.makedirs(chapter_name, exist_ok=True) for topic in filter.get_possible_filter_values()["topic"]: filter.current_set = all_q filter.by_topic(topic) cluster = filter.cluster() pdfy.render_cluster_to_html_skim( cluster, f"{chapter_name}/{topic}.html", topic ) render_chapter("alcohols-phenols-and-ethers") ``` ## 输出 * 输出效果大致如下所示 [PDF 📄](assets/pdf-file.pdf) ## 数据缓存 * **DataBaseChapters** – 包含一个字典,以章节名称作为键,以 `Chapter` 对象作为值。 * **EmbeddingsChapters** – 包含所有问题的预计算 embeddings,以节省计算时间。 ## 许可证 本项目仅供教育目的使用。请查看仓库以了解详细的许可信息。
标签:Apex, API提取, CISA项目, e5-large-v2, HTML渲染, JEE Mains, Kubernetes, PYQS, Python, Ruby, Streamlit, URL抓取, 云资产清单, 历年真题, 向量模型, 教育科技, 数据抓取, 文本嵌入, 无后门, 机器学习, 特征检测, 知识库, 考试复习资料, 考试题库, 访问控制, 语义聚类, 调试辅助, 逆向工具, 逆向工程