Skip to content
/ qba-js Public

question bank analyzer - 题库解析器,将题库文本解析成表格或者可处理的数据

Notifications You must be signed in to change notification settings

enncy/qba-js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Apr 22, 2025
168d74a · Apr 22, 2025

History

95 Commits
Dec 20, 2023
Apr 22, 2025
Apr 7, 2025
Nov 12, 2023
Nov 12, 2023
Nov 15, 2023
Nov 12, 2023
Apr 19, 2024
Apr 22, 2025
Nov 14, 2023
Nov 13, 2023
Nov 25, 2023
Nov 25, 2023

Repository files navigation

qba-js

题库解析器,将题库文本解析成表格或者可处理的数据

在线演示

https://enncy.github.io/qba-js/

引入方法

jsdelivr-CDN引入

<script src="https://cdn.jsdelivr.net/npm/qba-js@latest/dist/index.min.js"></script>

浏览器引入

<script src="./dist/index.js"></script>

ES模块

<script type="module">
	import qba from './dist/index.es.js';
	// ...
</script>

npm

# 下载依赖
npm install qba-js
// cjs nodejs 引入
const qba = require('qba-js');
// es import 引入
import qba from 'qba-js';

标准题目格式

qba-js 解析时需要题库文本为 标准题目格式 :

【题号】.题目类型【题目】
选项
【答案】

题号 题目 答案 都是必要内容,尽管表达的文本可能不同(比如答案,qbajs 可以对 “正确答案”,“标准答案”,等文本也视作“答案”)

使用示例

const content = `...题库文本...`;
const results = qba.parse(content);
console.log(results);

使用答案转换成内容处理器

const content = `...题库文本...`;
const results = qba.parse(content, {
	handlers: [qba.handlers.AnswersChangeToOptionContentHandler]
});
console.log(results);

使用全部通用处理器

const content = `...题库文本...`;
const results = qba.parse(content, {
	handlers: Object.entries(qba.handlers).map((e) => e[1])
});
console.log(results);

处理特殊格式的题库文本

// word 文档处理器
const DocHandler: Handler = {
	before(content) {
		return (
			content
				// 替换中文标点
				.replace(//g, '.')
				// word 格式问题
				.replace(//g, '')
				.replace(//g, '')
				// 处理题目选项前面有点号的格式问题,例如: A. 选项XXX
				.replace(//g, '')
		);
	}
};
// 超星题库文本处理器
const CXQuestionBankHandler: Handler = {
	before(content) {
		const res = content
			/**
				 * 处理以下问题
				 * 	七、坚持统筹推进各领域安全
					题量: xx 满分: xxx.x
					最终成绩xx分
					重做 (剩余 x 次)
					本次成绩xx分
				 */
			.replace(/..+\n.+.+\n\d+\n\s*\(\s*\d+\s*\)\s*\n\d+/g, '')
			// 冗余问题
			.replace(/\d+\n/g, '\n')
			.replace(/[\s\S]+?.+\n/g, '\n')
			.replace(/\n.\n/g, '\n')
			.replace(/\n.\n/g, '\n')
			.replace(/\n/g, '\n')
			// 小节问题,例如 一. 单选题(共17题)
			.replace(/.+\d+\n/g, '\n')
			// 处理同时有我的答案和正确答案的问题
			.replace(/\n.\s*[A-Z]+\n.\s*([A-Z]+)\n/g, '\n正确答案: $1\n')
			// 答案格式
			.replace(/P\d+/g, '')
			.replace(/.([A-Z]+)/g, '正确答案:$1')
			.replace(/\[\]([A-Z]+)/g, '正确答案:$1')
			// 多填空问题
			.replace(/\n./g, '')
			.replace(/\n./g, '#')
			.replace(/\n./g, '#')
			.replace(/\n./g, '#')
			.replace(/\n./g, '#')
			.replace(/\n./g, '#')
			.replace(/\n./g, '#')
			.replace(/\n./g, '#')
			.replace(/\n./g, '#')
			.replace(/\n./g, '#')
			// 题号和题目类型分行的问题
			.replace(/\n(\d+)\n../g, '1、')
			.replace(/\n(\d+)\n..\n/g, '1、')
			// 处理选项后方换行的问题
			.replace(/\n([A-Z])[. ]\n/g, '$1、')
			// 处理【...专题】问题
			.replace(/[\[\]](.+)[\[\]]/g, '$1');
		return res;
	}
};


const results = qba.parse(content, {
	// 使用自定义处理器,吧输入内容处理成 标准题目格式
	handlers: [DocHandler, CXQuestionBankHandler].concat(Object.entries(qba.handlers).map((e) => e[1]))
})

API 文档

https://github.com/enncy/qba-js/blob/main/docs/modules.md

About

question bank analyzer - 题库解析器,将题库文本解析成表格或者可处理的数据

Resources

Stars

Watchers

Forks

Packages

No packages published