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 数据库

本项目提供了一个包含超过 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抓取, 云资产清单, 历年真题, 向量模型, 教育科技, 数据抓取, 文本嵌入, 无后门, 机器学习, 特征检测, 知识库, 考试复习资料, 考试题库, 访问控制, 语义聚类, 调试辅助, 逆向工具, 逆向工程