Skip to content
/ qba-js Public

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

Notifications You must be signed in to change notification settings

enncy/qba-js

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