APP下载

基于余弦相似度的电子版实验报告管理系统

2019-05-24夏竹青王竹婷

电脑知识与技术 2019年7期
关键词:查重

夏竹青 王竹婷

摘要:采用POI的XWPFDocument对docx文件内容提取,用NLPIR汉语分词系统进行分词处理,计算词频生成向量,用余弦相似度算法计算向量间的相似度,最终实现了一个C/S的实验报告管理系统,该系统提供了检测报告缺交情况、班级内报告的查重、分数汇总等功能,让教师将更多精力投入到报告批改的工作中。系统投入使用后,有效减轻了教师的实验报告管理工作负担,且查重的结果,也为批改提供了依据,同时及时反馈缺交、查重和分数等情况,督促学生端正态度认真完成实验,独立撰写报告,有效提升了教学效果。

关键词:NLPIR;余弦相似度;查重

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2019)07-0100-03

Abstract: XWPF Document of POI is used to extract docx file content, NLPIR Chinese word segmentation system is used to segment words, calculate word frequency generating vectors, and cosine similarity algorithm is used to calculate similarity between vectors. Finally, a C/S experimental report management system is Implemented. The system provides functions of detecting missing reports, reports Duplicate checking in class and summarizing scores, so that teachers can get more Efforts have been devoted to report corrections. After putting the system into use, it effectively lightens the burden of teachers' experimental report management, and the results of the review also provide a basis for the correction. At the same time, it timely feedback the absence of submissions, the check-up and scores, and urges students to complete the experiment correctly and write reports independently, which effectively improves the teaching effect.

Key words:NLPIR; cosine similarity algorithm; duplicate checking

1 背景

由于電子文档便于保存,查找和维护,目前高校学生提交的实验报告逐步由纸质版转向电子版。电子文档在带来便利的同时,也为学生的抄袭提供了极大方便。为了防止学生实验报告出现抄袭现象以及教师批改完报告之后需要人工汇总分数,统计缺交情况,这些工作费时费力,且容易出错,教师急需有效的查重和统分工具来减轻负担,把宝贵的精力投入到更有意义的工作中去。但市场上的查重软件主要是用来对论文进行查重的,收费昂贵,且无法检查班级内部的抄袭情况。为了解决上述问题,设计了一个针对高校电子版实验报告特点的桌面软件,辅助进行实验报告的管理,实现班级内的查重、汇总分数和统计缺交情况,结果自动以excel形式导出,有效降低了教师的实验报告管理工作工作量,杜绝学生抄袭现象,督促学生认真完成实验,独立撰写实验报告。

2 主要技术介绍

2.1 余弦相似度算法

余弦相似度算法是最常用的计算文本相似度的算法。余弦相似度在计算文本相似度时,首先需要对文本进行分词,计算词频,然后文本可以用词频向量来表示,它通过计算两个向量之间的夹角余弦值来度量向量之间的相似程度[1],文本相似度计算效果很好,在文本相似度计算方面获得广泛应用[2]。计算方法如公式1所示。

2.2 NLPIR汉语分词系统

采用中科院的NLPIR汉语分词系统[3],对实验报告文本进行分词,NLPIR基于交叉信息熵算法,能自动计算并提取关键词,并实现了自适用分词和标注词性,因此是文本分词的不二选择,得到了广泛认可和应用。

2.3 POI

本系统采用apache放入POI中对word进行读写操作,POI支持office2003和2007,Excel2003和2007[4]。apache的开发团队一直对POI进行更新维护,功能丰富且完备。其中的hwpf模块可以实现word的doc文件的读写操作。xwpf模块可以实现word的docx文件的读写操作[5]。本系统处理的是docx文件,需要用到xwpf模块,在读写操作中涉及到几个重要的对象,这里做个简单介绍,XWPFDocument的对象表示一个docx文档。XWPFDocument又由下面几个重要对象组成的,其中XWPFParagraph对象表示文档中的一个段落。XWPFRun对象则表示一段具有相同属性的文本。而XWPFTable对象表示文档中的一个表格。XWPFTableRow表示表格的一行。XWPFTableCell则对应表格的一个单元格。

3 系统设计

3.1 系统功能模块设计

系统主要由五大模块组成,学生信息管理和实验报告模板管理两个模块维护基本信息,为检测缺交名单、查重和成绩汇总三个模块的运行提供基础数据。系统功能结构如图1所示。

3.2 数据库设计

采用开源数据库的MySql存储学生、班级和实验报告模板信息,具体表的定义如下。

4 系统核心功能实现

4.1 读取实验报告内容

实验报告要求学生统一提交docx文档,POI可以通过XW PFWord Extractor和XWPF Document两种方式读取docx文档。 XWPF Word Extractor的内部也是引用XWPF Document的,但只能获得简单的文本内容和文档属性,无法获取文档内容的属性,所以系统使用XWPF Document对象,它可以获取文本内容的精确属性信息,比如可以获取到某一个XWPF Paragraph,它的字体、字号和行距等属性。下面是使用XWPF Document遍历XWPF Paragraph,读取实验报告文本的主要代码:

private static String readDocx(String filePath) {

StringBuffer text = new StringBuffer();

OPCPackage pack;

try {

pack = POIXMLDocument.openPackage(filePath);

XWPFDocument doc = new XWPFDocument(pack);

List paragraphs = doc.getParagraphs();

for (XWPFParagraph paragraph : paragraphs) {

text.append(paragraph.getText());}

} catch (Exception e) {

}

return text.toString();}

4.2 检测缺交名单

可以指定班级或者选定学生名单的excel文件,并且选定作业所在的文件夹,根据作业文件的命名格式,提取学号和姓名与系统里存储的班级学生进行比对,检测出没有提交作业的学生,生成缺交名单。部分实现代码如下:

public static List absent(String fileDir, String nameListFile) {

List absentStus = new ArrayList();

File f = new File(fileDir); //作业所在文件夹

String[] fileNames = f.list();

List students = new ArrayList();

students = readExcel(nameListFile); //读取excel中的学生名单

boolean flag = false;

for (Student s : students) {

flag = false;

for (String fileName : fileNames) {

if (fileName.contains(s.getName()) && fileName.contains(s.getSnum())) {

flag = true;

break; //检测到提交了作业,跳出循环体。

}}

if (!flag) {//如果没有提交,则加入缺交列表

absentStus.add(s);}}

return absentStus;}

4.3 报告查重

报告是在本班级范围内进行查重,要将每个学生的报告与其他学生的报告进行相似性检测,对相似度大于设定阈值的报告写入查重报告。具体实现过程:

第一步:选择查重的班级、作业模板和实验报告所在的文件路径。

第二步:根据班级按照序号查询出学生信息,包含序号,学号和姓名

第三步:对学生列表进行循环, 从指定文件路径找到学生的作业,读取作业的内容;对内容进行分词处理,计算词频,循环结束后,生成词频矩阵。

第四步:用余弦算法计算这些词频向量之间的相似度,生成相似度矩阵。

第五步:筛选大于阈值的作业,生成查重结果文件。

4.4 报告成绩导出

电子实验报告中,通常在文档的最后一行有打分的位置,一般会设定得分关键字,测试数据中是“得分(百分制)”。但是部分学生在实验撰写过程中,会不小心删除得分的关键字,或者在得分之后又附上一些实验中的数据。这里事先约定,如果文档中有得分的位置,则在此处打分,否则在文档的最后一段打分。本模块首先选定作业的模板,获得得分关键字,然后读取word文件,获取所有的段落集合,然后依次遍历段落中是否有得分关键字,有则利用正则表达式获得分值,否则,取文档的最后一段,提取其中的分值。最后將汇总的分数生成excel文件。

下面是读取某一份报告得分的部分代码:

OPCPackage pack = POIXMLDocument.openPackage(filePath);

XWPFDocument doc = new XWPFDocument(pack);

List paragraphs = doc.getParagraphs();

for (XWPFParagraph paragraph : paragraphs) {//遍历各个段落,查找有打分关键字的段落

String text = paragraph.getText();

if (text != null && text.contains(keyWord)) {

int pos = text.indexOf(keyWord) + keyWord.length();

result += "," + text.substring(pos).trim();

}

}

if (result == "") result = doc.getLastParagraph().getText().trim();

5 结束语

系统在eclipse平台上采用java语言开发,用POI提供的API读取word文档的文本内容。采用中科院的NLPIR汉语分词系统对文本分词,然后用余弦相似度算法计算相似度,进行查重。系统实现了实验报告缺交检测,在本班级内进行报告内容查重并生成查重报告,读取报告中的成绩并生成excel汇总表。系统有效协助了教师对实验报告的管理,使教师可以集中精力批改实验报告。下一步工作,希望采用B/S模式实现报告的线上提交,批阅和学生交互等操作。

参考文献:

[1] 朱浩,连德富,左志宏,等.余弦相似度在高校综合信息系统中的应用[J].东南大学学报: 自然科学版, 2017(A1).

[2] 许浩,周亚萍,赵亚慧.基于余弦文本相似度计算的英语作文评分算法的应用研究[J]. 教育教学论坛,2018(6).

[3] NLPIR:在信息检索中运用自然语言处理的理论框架[J].图书情报工作动态,2003(3).

[4] 马杰,魏宁,王霄,等.基于 POI 的 Android 阅读器设计与实现[J].电子技术与软件工程, 2013(15).

[5] 黄青云,裴冬菊.POI在Word文档不同颜色文本分离中的应用[J].南昌工程学院学报, 2014(3).

【通联编辑:谢媛媛】

猜你喜欢

查重
学位论文查重乱象引关注
浅谈法学本科毕业论文的改革
论文查重别大意
学术论文该“查”什么?
学术期刊防范非常态化学术不端行为的创新举措
互联网+时代下电子发票对会计核算的影响
浅谈怎样提高图书查重准确率