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

个人项目

时间:2024-09-13 20:06:20浏览次数:1  
标签:String 个人 项目 int 30 length str 字符串

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


Github地址:https://github.com/JiangJiazhe/JiangJiazhe

项目设计

函数功能

函数名 功能
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 {

    public static String getHash(String str) {
        try {
            // 这里使用了MD5获得hash值
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            return new BigInteger(1, messageDigest.digest(str.getBytes("UTF-8"))).toString(2);
        } catch (Exception e) {
            e.printStackTrace();
            return str;
        }
    }

    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 {
    /**
     * 计算并返回两个字符串(假设为哈希值)之间的汉明距离。
     * 汉明距离是两个等长字符串对应位置上不同字符的个数。
     * 如果两个字符串长度不等,则返回-1表示无法计算汉明距离。
     *
     * @param simHash1 第一个字符串(哈希值)
     * @param simHash2 第二个字符串(哈希值)
     * @return 如果两个字符串长度相等,则返回它们之间的汉明距离;否则返回-1。
     */

    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) {
        /**
         * 从指定路径的文本文件中读取全部内容。
         *
         * @param txtPath 文本文件的路径。
         * @return 文件内容作为字符串返回。如果读取失败或文件不存在,则返回空字符串。
         */
        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 计划 60 60
.Estimate 预估这个任务需要多少时间 60 120
.Development 开发 180 240
· Analysis 需求分析(包括学习新技术 60 90
· Design Spec 生成设计文档 30 30
· Design Review 设计复审 20 15
· Coding Standard 代码规范(为目前的开发制定合适的规范) 30 20
· Design 具体设计 30 30
· Coding 具体编码 120 240
· Code Review 代码复审 30 40
· Test 测试(自我测试、修改代码、提交修改) 30 40
Reporting 报告 30 40
· Test Report 测试报告 20 20
· Size Measurement 计算工作量 10 10
· Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 30 30
Total 合计 640 955

标签:String,个人,项目,int,30,length,str,字符串
From: https://www.cnblogs.com/jjz1475983697/p/18412789

相关文章

  • 天空卫士项目荣获“2024 IDC 中国20大杰出安全项目 ”奖项 ,实力见证安全守护
    9月11日,IDC在上海圆满举办安全风险管控峰会,并现场官宣“2024IDC中国20大杰出安全项目(CSO20)”和“2024IDC中国CSO名人堂(十大人物)”奖项名单。联通软研院申报的联通邮件系统安全合规建设项目被评为“2024IDC中国20大杰出安全项目(CSO20)”。峰会现场聚集了近200位意见......
  • 深入解析 MyBatis:从理论到项目实例
    深入解析MyBatis:从理论到项目实例目录MyBatis概述MyBatis项目结构及作用核心概念详解分页功能的实现与深入剖析动态SQL缓存机制详解与Spring集成常见问题与深入分析完整项目示例总结1.MyBatis概述MyBatis是一个轻量级的持久层框架,使用SQL查询语句来访问数据......
  • 解决 Node.js 项目中的 Yarn 安装错误
    在开发Node.js项目时,我们经常需要依赖于各种包来增强项目功能。Yarn是一个流行的包管理工具,由Facebook推出,旨在提供更快、更安全、更可靠的依赖管理。然而,如果你在尝试运行项目时遇到了关于Yarn未安装的错误,这可能会阻碍你的开发流程。本文将指导你如何通过简单的步......
  • 【HBuilderX-从下载到项目创建】编程初学者适用的HBuilderX开发环境(超详细的)下载安装
    简介:HBuilderX是一款由DCloud公司开发的集成开发环境(IDE),专为前端开发设计,同时也支持多平台应用开发。它支持HTML、CSS、JavaScript、Vue、React、Uni-app等多种编程语言和框架,具备代码编辑、调试、测试等功能,并且提供了丰富的插件生态系统以扩展其功能。“......
  • 系统集成项目管理工程师只看教材能过吗?
    今天和一位同学私聊发现,他竟然还在用旧版的系统集成项目管理工程师教程在学习,我当时瞬间石化我马上想到了桃花源记中的这句话:“问今是何世,乃不知有汉,无论魏晋。”也许是去年年底考过之后,就再也没有关注过系统集成项目管理工程师考试,也就不知道上半年教程改版的事情了...所以我可能......
  • 个人项目
    作业GitHub地址https://github.com/Miaomia0QAQ/miaomiaoPSP表格PSP2.1PersonalSoftwareProcessStages预估耗时(分钟)实际耗时(分钟)Planning计划255Estimate估计这个任务需要多少时间2020Development开发5060Analysis需求分析(包括学习新技......
  • 创建一个Django项目
    步骤1:创建Django项目和应用创建Django项目:bashdjango-adminstartprojectmyprojectcdmyproject创建Django应用:bashpythonmanage.pystartappmyapp安装并配置DjangoRestFramework(如果尚未安装):bashpipinstalldjangorestframework将myapp和rest_f......
  • 个人项目:论文查重
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13228这个作业的目标设计一个论文查重程序,了解软件开发流程gitHub项目地址https://github.com/Abaistudy......
  • 【智慧城市】新中地GIS开发实训项目:华农优秀学生学习成果展示(1)云游江城
    项目名称:云游江城项目功能简介地球自转城市建筑桥梁航线图导航系统景点查询美食查询资讯简报☑0基础可学  ☑助力就业 ☑优选赛道嘉薇Gis_17得7天试听课+海量GIS资料授课形式:线上/线下,直播+录播均可......
  • 国家标准 | CSPM-3中级项目管理专业人员认证
    10月底全国CSPM-3考试现场1CSPM介绍项目管理专业人员能力评价(ChinaStandardsProjectManagement,CSPM)是指依据中国标准开展的项目管理专业人员能力评价。它是由中国标准化协会(全国项目管理标准化技术委员会秘书处)设立,运用已发布的项目管理国家标准(国际标准、团体标准),针对项目管理......