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

个人项目

时间:2024-09-11 11:04:19浏览次数:9  
标签:String 个人 项目 int 30 length str new

这个作业属于哪个课程 22级计科2班
这个作业要求在哪里 作业要求
这个作业目标 设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率

Github地址:<>

项目设计

整体流程

函数功能

函数名 功能
readText 读取传入地址中文件的内容信息
writeText 将对应内容写进文件
getHash 同过MD5加密将字符串转换为二进制串
getSimHash 对字符串进行关键词的分组并转换为二进制串,在对其进行加权累加,最后进行降维成二进制串
getHammingDistance 计算两个字符串的海明距离
getSimilary 计算两个字符串的相似程度

算法实现

计算hamming值

package Utils;

import com.hankcs.hanlp.HanLP;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.List;

public class SimHashUtil {
    /*用MD5获取输入字符串对应的二进制编码*/
    public static String getHash(String str) {
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            return new BigInteger(1, messageDigest.digest(str.getBytes("UTF-8"))).toString(2);
        } catch (Exception e) {
            e.printStackTrace();
            return str;
        }
    }
    /*计算simHash值*/
    public static String getSimHash(String str) {
        if (str.length() < 66) {
            System.out.println("输入文本过短");
        }
        int[] weight = new int[128];
        List<String> keywordList = HanLP.extractKeyword(str, str.length());
        int size = keywordList.size();
        int i = 0;
        for (String keyword : keywordList) {
            String hash = getHash(keyword);
            if (hash.length() < 128) {
                int distance = 128 - hash.length();
                for (int j = 0; j < distance; j++) {
                    hash += "0";
                }
            }
            for (int j = 0; j < weight.length; j++) {
                if (hash.charAt(j) == '1') {
                    weight[j] += (10 - (i / (size / 10)));
                } else {
                    weight[j] -= (10 - (i / (size / 10)));
                }
            }
            i++;
        }
        String simHash = "";
        for (int j = 0; j < weight.length; j++) {
            if (weight[j] > 0) {
                simHash += "1";
            } else simHash += "0";
        }
        return simHash;
    }
}

测试函数

package Utils;
public class HammingUtil {
   public static int getHammingDistance(String simHash1, String simHash2){
       if(simHash1.length()!=simHash2.length())
           return -1;
       int distance=0;
       System.out.println("str1的simHash值:"+simHash1);
       System.out.println("str2的simHash值:"+simHash2);
       for (int i=0;i<simHash1.length();i++){
           if(simHash1.charAt(i)!=simHash2.charAt(i))
               distance++;

       }
       System.out.println("海明距离为:"+distance);
       return distance;
   }

   public static double getSimilarity(int distance){

       return 1-distance/128.0;
   }

}

异常处理

package Utils;

import java.io.*;

public class IOUtil {

    public static String readTxt(String txtPath) {
        String str = "";
        String strLine;
        // 将 txt文件按行读入 str中
        File file = new File(txtPath);
        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream(file);
            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            // 字符串拼接
            while ((strLine = bufferedReader.readLine()) != null) {
                str += strLine;
            }
            // 关闭资源
            inputStreamReader.close();
            bufferedReader.close();
            fileInputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return str;
    }

    public static void writeTxt(String  str,String txtPath){

        File file = new File(txtPath);
        FileWriter fileWriter = null;
        try {
            fileWriter = new FileWriter(file, true);
            fileWriter.write(str, 0, str.length());
            fileWriter.write("\r\n");
            // 关闭资源
            fileWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

结果显示

性能分析



PSP分析

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

标签:String,个人,项目,int,30,length,str,new
From: https://www.cnblogs.com/Ccjx3/p/18407206

相关文章

  • OJ在线判题系统项目笔记
    项目介绍在线评测编程题目代码的系统,出题人预先设置题目的输入样例和输出样例,根据用户提交代码,进行编译代码,运行代码,判断代码执行结果是否正确。后端服务网关服务接收前端请求,转发到对应的服务用户服务用户注册、用户登录、用户退出题目服务题目浏览,在线做题,题目提......
  • 云计算-配置节点亲和污点容忍保证节点为项目独占
    在生产集群,经常需要配置几个节点为项目独占,有以下要求1、节点只能运行指定项目的容器pod2、其他项目的的容器pod不能调度到这些节点上为了满足需求需要如下配置1、节点配置污点,pod不能随意调度2、节点配置标签,部署pod使用节点亲和性往指定标签节点调度3、在部署pod时候,yaml配置污点......
  • VScode python 调试深度学习项目 debugpy 库
    以前打OI,限于辣鸡NOILinux没有靠谱的IDE。只能用终端gdb来调试C++。gdb基本功能还是有的,但是每次启动,之前的东西(断点,监控变量)都会消失,需要重新输一遍。所以当时发现还是输出调试好,当然前置条件是写的两百行左右的程序编译时间短(1s左右),从头运行一遍也快(一个题规定的运......
  • Gitee开源WebGIS项目-openlayers广西水利信息在线分析服务系统
    介绍Openlayers项目,广西水利信息在线分析服务系统。模拟广西壮族自治区的水利信息相关数据,结合GIS应用,通过地图标注、图表与动态推演等方式,直观模拟展现广西壮族自治区当前的水情、雨情状况,以及台风情况。本仓库代码为后端代码,所用数据都是模拟的。前端代码网址:https://git......
  • 计算机毕业设计选题推荐-作品分享交流平台(摄影、绘画、书法)-Java/Python项目实战(亮点:
    ✨作者主页:IT毕设梦工厂✨个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。☑文末获取源码☑精彩专栏推荐⬇⬇⬇Java项目Python项目安卓项目微信小程序项目......
  • 计算机毕业设计选题推荐-企业人事管理系统-Java/Python项目实战
    ✨作者主页:IT毕设梦工厂✨个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。☑文末获取源码☑精彩专栏推荐⬇⬇⬇Java项目Python项目安卓项目微信小程序项目......
  • C#/.NET/.NET Core优秀项目和框架2024年8月简报
    思维导航前言EasySQLiteYuebonCoreMailKitFluentEmailAI-Lossless-ZoomerThingsGatewayIoTGatewayNSmartProxyNotepadsMaterialDesign前言公众号每月定期推广和分享的C#/.NET/.NETCore优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众......
  • 采集DNP3设备数据 转 IEC61850项目案例
    目录1 案例说明 12 VFBOX网关工作原理 13 准备工作 24 配置网关采集DNP3协议数据 25 用IEC61850协议转发数据 46 网关使用多个逻辑设备和逻辑节点的方法 67 案例总结 71 案例说明设置网关采集DNP3协议设备数据把采集的数据转成IEC61850协议转发给其他系统。2 VFBOX网......
  • 井下甲烷气体报警器研发(工程教育课程项目报告)
    目录井下甲烷气体报警器研发......................................................................................3一、   项目概况..............................................................................................31.    项目内容...........
  • spring boot 项目报错找不到compose.yaml文件
    springboot的项目引用了spring-boot-docker-compose,运行时没问题,但是将该项目放到了一个父项目中作为一个module后,在idea里直接运行的话会报错找不到compose.yaml文件,因为idea试图去父项目的路径下找。如果直接在子项目的路径里运行:mvnspring-boot:run是没问题的,可以启动。......