号外!论文查重必杀技之图文混编,快编不下去了。。

2023-11-22 03:38

本文主要是介绍号外!论文查重必杀技之图文混编,快编不下去了。。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

最近作者去图文上自习,忙着写论文,像我这么渣渣的还面临着写毕业论文的困扰的时候,别人已经都论文查重了,跟我一起上自习的基友,在那捣鼓,捣鼓啥呢? 把论文中的字截图,然后粘进原文,做到鱼龙混珠。他说这样做是为了减少查重率。纳尼?窝草,这样!也行??重复率降低先不说,但是一个字一个字用QQ截图再插入论文方法太土了吧,这样做的效率太低了吧。程序员的第一反应就是我能用java来实现, 一个 idea ocurred on me 。

缕一缕

先需求分析一下,输入一段文字,让其自动的转换成图文混编的形式,看上去就好像都是一句话,其实实际上里边惨杂着好多字的图片形式。
如果使用java来实现的话需要用到文字转换图片的技术,还有就是写入doc的技术。

原理

大概已经知道了什么情况,使用两个手段就能实现这个小小的需求。
1.验证码生成技术
2.java操作doc技术
验证码笔者了解,而且会做,java操作doc技术还是第一玩,于是查了一下,感觉实现不是很难。

效果

这里写图片描述

这里写图片描述

实现

文字转成图片

将文字转换成图片的图片生成代码
使用了Graphics2D 生成图片,代码很简单。

public ByteArrayOutputStream makeOne(String word,Params param) throws Exception {//创建内存图像image = new BufferedImage(params.getWidth(), height, BufferedImage.SCALE_SMOOTH) ;Graphics2D g = image.createGraphics() ;g.setColor(Color.white);g.drawRect(0,0, width, height); //画边框g.fillRect(0,0, width, height); //填充背景颜色g.setColor(param.getTextColor()); //设置字体颜色Font font = new Font("simsun",0,20) ;g.setFont(font);// 设置字体g.drawString(word,0,18);ByteArrayOutputStream bos = new ByteArrayOutputStream() ;ImageIO.write(image, "png", bos) ; //将图片格式转换成 bos数组return  bos ;}

有人问为什么要将图片BufferedImage对象转换为ByteArrayOutputStream 流呢? 因为在doc生成中要用到bos流的构造所以需要转换一下。

写入DOC

java操作doc有很多优秀的开源框架,其中有名的一个就是使用itext ,itext提供强大的java操控数据库,包括表格,图片,段落等等。这里我们只需要如何把图片和文字写进去就行了。
创建一个WoldHelper 类负责插入文字和图片

导入Itextjar包

IText 2.1.7 jar 包,可以利用此包来导出word文档
http://download.csdn.net/detail/ap0906230/6821411

WoldHelper.java


public class WordHelper {private Document document  ;private BaseFont bfChinese ; private Paragraph context ;public WordHelper(Document document,Paragraph context) {this.document  = document ;this.context = context ;}public void openDocument(String filePath) throws DocumentException,  IOException {  
//       建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中  RtfWriter2.getInstance(this.document, new FileOutputStream(filePath));  this.document.open();  
//       设置中文字体  
/*        this.bfChinese = BaseFont.createFont("STSongStd-Light",  "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);*/}/** * @param contextStr 内容 * @param fontsize 字体大小 * @param fontStyle 字体样式 * @param elementAlign 对齐方式 * @throws com.lowagie.text.DocumentException*/  public void insertContext(String contextStr,int fontsize) throws DocumentException{  // 正文字体风格  Font contextFont = new Font(fontsize);  //  context = new Paragraph(contextStr) ;//设置行距  context.setLeading(3f);// 正文格式左对齐  //  context.setAlignment(elementAlign);context.setFont(contextFont);  // 离上一段落(标题)空的行数  //   context.setSpacingBefore(1);// 设置第一行空的列数  //  context.setFirstLineIndent(20);  context.add(contextStr) ;}/*** * @param os 图片os流* @param param 格式参数*/public  void insertPhoto(ByteArrayOutputStream os,Params param){       byte [] b = os.toByteArray() ;Image img = null;try {img = Image.getInstance(b);// img.setAbsolutePosition(0, 0);//设置图片的绝对位置img.setAlignment(Image.MIDDLE);// 设置图片显示位置//  img.scaleAbsolute(param.getWidth(), param.getHeight());// 直接设定显示尺寸//  img.scalePercent(70);// 表示显示的大小为原尺寸的20%} catch (BadElementException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {context.add(img) ; //加上图片} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

控制写入

有了生成图片,有了写入图片和文字的方法。如何控制哪些字体是文字哪些字体是图片,这里我使用了将字符串分割,使用随机方法的方式去挑选一些文字作为图片。组织有规律的写入doc。

public class Converter {private Document document  ;private BaseFont bfChinese ; private WordHelper wordHelper ;private String contnet ; private Params param  ;private Paragraph context ;//组织转换方法。public int convert(List<StringBuilder> sbList,Params param) throws Exception{int flag = 0 ;StringBuilder sb = new StringBuilder() ;Document document = new Document() ;Paragraph context = new Paragraph();wordHelper = new WordHelper(document,context) ;wordHelper.openDocument("E:\\shaoduo_paper.doc"); //存到的路径if(sbList!=null||sbList.toString().length()!=0){for(int i = 0 ;i<sbList.size(); i++){Random r = new Random() ;String detail[] = sbList.get(i).toString().split(""); int position = r.nextInt(detail.length) ;for(int j = 0 ; j<detail.length ;j++){if(position==j){PhotoMaker maker = new PhotoMaker(param);ByteArrayOutputStream os =maker.makeOne(detail[position], param) ;wordHelper.insertPhoto(os, param);}else{wordHelper.insertContext(detail[j], 20);}}}document.add(context);  document.close(); //更改文档完成flag = 1 ;}return flag ;}// 通过,分割语句public List<StringBuilder> splitWordsToArry(String str){  String strArry[]  = str.split("") ;StringBuilder sb = new StringBuilder() ;List<StringBuilder> sbList =new ArrayList<StringBuilder>();for(int i=0 ;i<strArry.length;i++){if(!strArry[i].equals(",")&&!strArry[i].equals("。")&&i!=strArry.length-1){sb.append(strArry[i]) ;}else{sb.append(strArry[i]) ; // 只为把逗号加上不然就落下了sbList.add(sb);sb = new StringBuilder() ;}}return sbList;}}

总结

以上代码只是核心代码,源代码附上。
http://pan.baidu.com/s/1slk8Rq1


版权声明
author :shaoduo
原文来自:http://blog.csdn.net/shaoduo/article/details/72829724
其他出处均为转载,原创作品,欢迎读者批评指正。

这篇关于号外!论文查重必杀技之图文混编,快编不下去了。。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/407230

相关文章

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

OmniGlue论文详解(特征匹配)

OmniGlue论文详解(特征匹配) 摘要1. 引言2. 相关工作2.1. 广义局部特征匹配2.2. 稀疏可学习匹配2.3. 半稠密可学习匹配2.4. 与其他图像表示匹配 3. OmniGlue3.1. 模型概述3.2. OmniGlue 细节3.2.1. 特征提取3.2.2. 利用DINOv2构建图形。3.2.3. 信息传播与新的指导3.2.4. 匹配层和损失函数3.2.5. 与Super

SigLIP——采用sigmoid损失的图文预训练方式

SigLIP——采用sigmoid损失的图文预训练方式 FesianXu 20240825 at Wechat Search Team 前言 CLIP中的infoNCE损失是一种对比性损失,在SigLIP这个工作中,作者提出采用非对比性的sigmoid损失,能够更高效地进行图文预训练,本文进行介绍。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注

BERT 论文逐段精读【论文精读】

BERT: 近 3 年 NLP 最火 CV: 大数据集上的训练好的 NN 模型,提升 CV 任务的性能 —— ImageNet 的 CNN 模型 NLP: BERT 简化了 NLP 任务的训练,提升了 NLP 任务的性能 BERT 如何站在巨人的肩膀上的?使用了哪些 NLP 已有的技术和思想?哪些是 BERT 的创新? 1标题 + 作者 BERT: Pre-trainin

[论文笔记]LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

引言 今天带来第一篇量化论文LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale笔记。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 大语言模型已被广泛采用,但推理时需要大量的GPU内存。我们开发了一种Int8矩阵乘法的过程,用于Transformer中的前馈和注意力投影层,这可以将推理所需

CentOS 7 x64下安装MySql5.7图文详解

参考: https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ http://www.jianshu.com/p/7cccdaa2d177 http://www.linuxidc.com/Linux/2016-09/135288.htm 最近搞了台阿里云服务器,搭载的是CentOS 7系统,这里记录下mysql5.7的安装流程 查