首页 > 其他分享 >个人项目

个人项目

时间:2023-09-20 22:35:07浏览次数:47  
标签:查重 抄袭 String 个人 项目 text List 文本

工程概论作业二:论文查重

这个作业属于哪个课程 工程概论
作业要求 作业要求
这个作业的目标 学习论文查重方法,了解GitHub基本操作

需求

题目:论文查重

描述如下:

设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。

原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:

从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。

开发环境

  • 操作系统:Windows 10 专业版
  • 语言:JAVA
  • JDK:JDK1.8
  • IDE:IntelliJ IDEA 2023.1

PSP表格

PSP2.1\ Personal Software Process Stages\ 预估耗时(分钟)\ 实际耗时(分钟)\
Planning 计划
· Estimate · 估计这个任务需要多少时间 400 500
Development 开发
· Analysis · 需求分析 (包括学习新技术) 70 90
· Design Spec · 生成设计文档 10 25
· Design Review · 设计复审 20 45
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 35 35
· Design · 具体设计 80 45
· Coding · 具体编码 30 30
· Code Review · 代码复审 25 30
· Test · 测试(自我测试,修改代码,提交修改) 25 60
Reporting 报告
· Test Repor · 测试报告 15 15
· Size Measurement · 计算工作量 25 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 20 25
· 合计 300 400 500

算法思路:

  • 预处理:对原文文本和抄袭版论文文本进行预处理,如去除标点、转换为小写等。
  • 分词:将原文文本和抄袭版论文文本分别进行分词,形成原文词语列表和抄袭版词语列表。
  • 特征提取:从词语列表中提取特征,如计算词频、TF-IDF 等。
  • 相似度计算:使用余弦相似度的计算方法计算原文和抄袭版论文之间的相似度得分。
  • 判定:如果相似度得分大于等于相似度阈值,则判定为抄袭,否则判定为非抄袭。
  • 返回判定结果。

函数列表:

函数 作用
preprocessText(text: String): String 预处理
tokenizeText(text: String): List 文本分词
extractFeatures(words: List): List 返回词频列表
calculateSimilarity(origText: String, plagiarizedText: String): double 计算相似度
checkPlagiarism(origText: String, plagiarizedText: String, similarityThreshold: double): boolean 检查相似度阈值
runPlagiarismChecker 写入输出文件

流程图

代码实现

  • 去除标点符号、分词、进行相似度计算
public String preprocessText(String text) {
        // 去除标点符号
        text = text.replaceAll("[\\p{Punct}]", "");
        // 转换为小写字母
        text = text.toLowerCase();
        return text;
    }
    
    public List<String> tokenizeText(String text) {
        // 使用空格进行分词
        return List.of(text.split("\\s+"));
    }
    
    public List<String> extractFeatures(List<String> words) {
        // 在这里可以进行其他特征的提取,这里只返回原始词语列表
        return words;
    }
    
    public double calculateSimilarity(List<String> origWords, List<String> plagiarizedWords) {
        // 在这里进行相似度计算,这里只返回 0.0
        return 0.0;
    }

 public boolean checkPlagiarism(String origText, String plagiarizedText, double similarityThreshold) {
        // 预处理原文文本和抄袭版论文文本
        origText = preprocessText(origText);
        plagiarizedText = preprocessText(plagiarizedText);
        
        // 分词原文文本和抄袭版论文文本
        List<String> origWords = tokenizeText(origText);
        List<String> plagiarizedWords = tokenizeText(plagiarizedText);
        
        // 提取特征
        origWords = extractFeatures(origWords);
        plagiarizedWords = extractFeatures(plagiarizedWords);
        
        // 计算相似度得分
        double similarityScore = calculateSimilarity(origWords, plagiarizedWords);
        
        // 判断相似度得分是否超过相似度阈值
        return similarityScore >= similarityThreshold;
    }

异常处理

   catch (Exception e) {
            // 如果发生异常,将异常包装成 IOException 并重新抛出
            throw new IOException("文本预处理失败", e);
        }
   catch (IOException e) {
            // 捕获并处理 IO 异常
            System.out.println("查重算法执行异常:" + e.getMessage());

单元测试

源文本:This is the original text. It contains some unique content.
查重文本:This is the plagiarized text. It contains some unique content.
使用相似度阈值为 0.8 进行查重
查重代码
public class Main {
    public static void main(String[] args) {
        PlagiarismChecker checker = new PlagiarismChecker();

        String origText = "This is the original text. It contains some unique content.";
        String plagiarizedText = "This is the plagiarized text. It contains some unique content.";
        double similarityThreshold = 0.8;

        try {
            boolean isPlagiarized = checker.checkPlagiarism(origText, plagiarizedText, similarityThreshold);
            
            if (isPlagiarized) {
                System.out.println("The text is plagiarized.");
            } else {
                System.out.println("The text is not plagiarized.");
            }
        } catch (IOException e) {
            System.out.println("An error occurred: " + e.getMessage());
        }
    }
}
查重结果:The text is plagiarized.
表明这两个文本的相似度高于设定的相似度阈值 0.8。

标签:查重,抄袭,String,个人,项目,text,List,文本
From: https://www.cnblogs.com/nihaohhh/p/17718618.html

相关文章

  • 个人项目:论文查重
    一、作业链接链接:github链接二、PSP表格个人开发流程预计耗时实际耗时计划605估计这个任务需要多少时间3015开发600需求分析(包括学习新技术)60生成设计文档30设计复审60代码规范(为目前的开发制定合适的规范)30具体设计60具体......
  • 【Java】个人项目互评——中小学数学卷子自动生成程序
     目录一、简介二、项目要求三、测试与分析1、功能测试2、代码分析四、项目总结1、代码优点2、代码缺点五、结语一、简介本博客用于分析和总结我的结对编程队友王晓婧的个人项目代码,代码使用语言为Java,与本......
  • 个人项目互评
    代码:软件2102王珏评价:软件2102刘良宸一、项目介绍用户:小学、初中和高中数学老师。功能:1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个......
  • HNU个人项目分析互评
    笔者:万宇龙项目作者:梁钰项目目标个人项目:中小学数学卷子自动生成程序用户:小学、初中和高中数学老师。功能:命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小......
  • 软件工程导论个人项目互评
    评价人:软件2101谢先衍评价对象:软件2101方毅前言个人项目是实现一个中小学数学卷子自动生成程序,用户为小学、初中和高中老师,老师可以登录自己的账号生成对应年级的题目并保存到对应的文件夹下,并且还可以切换年级以生成不同难度的题目。具体要求如下:1、命令行输入用户名和密码......
  • 软件工程导论——对结对伙伴袁永杰的个人项目评价
    一前言   很感谢老师安排的这次互评,我从伙伴的代码中得到了一些收获,也对Java编程有了更多的理解,思维也变得更加清晰。同伴选择的也是Java,基于面向对象的思想,在进行评价的同时我也会学习他的优点,不断努力进步。二项目需求与评分标准用户:小学、初中和高中数学老师。功......
  • 与结对队友的个人项目互评
    与我结对的队友是木拉迪力.艾海提同学,接下来我来分析一下他的个人项目:#include<iostream>#include<string>#include<fstream>#include<ctime>#include<cstdlib>usingnamespacestd;classTeacher{public:Teacher();Teacher(stringusername,stringpwd,str......
  • hnu个人项目互评
    对同伴宋玉为的个人项目的互评:1.代码运行结果1.1登录效果:1.2出题效果:出题有提示题目文件保存在绝对路径,为txt格式,题目前有序号,但是题目之间没有空行。 1.3切换效果:输入错误的指令有提示,输入正确的指令切换成功。初中题目:  高中题目,某些题目被大括号扩了起来。......
  • 【个人项目互评】——中小学数学试卷生成系统
    项目名称:中小学数学试卷生成系统编程语言:java代码作者:符南山评价人:秦凯一、简介我与符南山同学结对,并且都是采用java语言。因此下面博客,我们以java的角度来测试分析南山同学的代码,功能。通过这次互评来互相学习彼此间的优点,同时认识到自己的不足,来提升自己的编程思维。二......
  • 个人项目
    这个作业属于哪个课程软件工程这个作业要求在哪里个人项目这个作业的目标项目管理,github使用github链接开发环境win10IDE:eclipse需求分析需求分析:题目:论文查重描述如下:设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论......