
2、代码中多增加一些注释。
扫描软件就应该检查不出来了。
如果是老师不用工具自己检查的话,还是自己写吧。
问题里既然说是代码了,那就可以看到源码了?(我默认)最简单的就是diff一下啦,对策可以改改代码风格,排版,变量命名,甚至插曲一些无用代码等等。这些只是看起来不同了。另外几位大神的答案,似乎忽略了程序运行时的状况呢,如果程序本身逻辑没变,只是文本和语法上做些处理(忽略lisp之类的奇葩),程序运行起来之后,比较调用堆栈的变化,这种方法很容易识破。你说运行起来比较难的话,那就忽略了测试人员的作用了,把程序/代码段/模块 当成黑盒,通过mock等方式,还是可以一部分一部分搞的。那改变调用层次,函数套函数?甚至某些地方变成宏?模块重构?诸如此类。这就不好识别了。模块都给重构了的话,姑且不算抄了,但是设计上一样的,人工code review,去了解它的设计,还是能识破。首先可以diff一下,然后看运行状态,如果是差别很大的,看设计,做code review,看文档,如果自己的代码特别多,而人家的代码又拿不到,可以在自己的代码里加些【水印】,比如搞些magic number,运行时去调试,就找这个magic number,有的话,基本就是盗的。计算的话,我觉得评级比较靠谱,列规则,挨个检测,根据规则中q程度评级,完全量化的方法应该很难做到,但是规则+评级 可以糙快猛的构造出一个比较相似度的系统,工程思维哈,不断根据实践,去调整这个系统,让它更接近准确就可以啦~我说的都是土方法,期待学术大神给个系统答案。以下是基于余弦定理的C语言代码,用于计算两篇文章的相似度:#include <stdio.h>
#include <math.h>
#include <string.h>
#define MAX_WORDS 10000 // 最大单词数
#define MAX_LEN 100 // 最大单词长度
int main()
{
char article1[MAX_WORDS][MAX_LEN]// 存储文章1的单词
char article2[MAX_WORDS][MAX_LEN]// 存储文章2的单词
double freq1[MAX_WORDS] = {0}// 存储文章1中每个单词的出现频率
double freq2[MAX_WORDS] = {0}// 存储文章2中每个单词的出现频率
int count1 = 0, count2 = 0, i, j// 存储文章1和文章2中单词的数目
// 读入文章1
FILE *fp1 = fopen("article1.txt", "r")
if (fp1 == NULL) {
printf("无法打开文件!\n")
return 1
}
while (fscanf(fp1, "%s", article1[count1]) != EOF) {
count1++
}
fclose(fp1)
// 读入文章2
FILE *fp2 = fopen("article2.txt", "r")
if (fp2 == NULL) {
printf("无法打开文件!\n")
return 1
}
while (fscanf(fp2, "%s", article2[count2]) != EOF) {
count2++
}
fclose(fp2)
// 计算文章1中每个单词的出现频率
for (i = 0i <count1i++) {
for (j = 0j <count1j++) {
if (strcmp(article1[i], article1[j]) == 0) {
freq1[i]++
}
}
freq1[i] /= count1
}
// 计算文章2中每个单词的出现频率
for (i = 0i <count2i++) {
for (j = 0j <count2j++) {
if (strcmp(article2[i], article2[j]) == 0) {
freq2[i]++
}
}
freq2[i] /= count2
}
// 计算余弦相似度
double dot_product = 0
double norm1 = 0, norm2 = 0
for (i = 0i <count1i++) {
dot_product += freq1[i] * freq2[i]
norm1 += freq1[i] * freq1[i]
norm2 += freq2[i] * freq2[i]
}
double similarity = dot_product / (sqrt(norm1) * sqrt(norm2))
// 输出相似度
printf("两篇文章的相似度为: %.4f\n", similarity)
return 0
}
在这个示例代码中,我们假设文章存储在名为 "article1.txt" 和 "article2.txt" 的文件中,单词之间以空格分隔。程序首先读入两篇文章,并统计每个单词在文章中出现的频率。然后,程序使用余弦相似度公式计算两篇文章的相似度,并输出结果。
需要注意的是,这个示例代码只是一个简单的实现,实际上还有很多其他的因素需要考虑,例如停用词、词干提取等。具体的实现方法可以根据需要和实际情况进行调整和修改。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)