夏竹青 王竹婷

摘要:采用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
for (XWPFParagraph paragraph : paragraphs) {
text.append(paragraph.getText());}
} catch (Exception e) {
}
return text.toString();}
4.2 檢測缺交名單
可以指定班級或者選定學生名單的excel文件,并且選定作業所在的文件夾,根據作業文件的命名格式,提取學號和姓名與系統里存儲的班級學生進行比對,檢測出沒有提交作業的學生,生成缺交名單。部分實現代碼如下:
public static List
List
File f = new File(fileDir); //作業所在文件夾
String[] fileNames = f.list();
List
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
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).
【通聯編輯:謝媛媛】