基于词频的文件相似度

该博客介绍了一种基于两文件公共词汇比例来计算文件相似度的方法,主要针对长度大于1000个英文单词且单词长度不超过10字母的文章。通过读取文件夹中的文本文件,利用特定的输入输出格式,计算并输出文件之间的相似度和公共词汇。解题思路包括文件夹的打开与读取,并提及两个拓展题。
摘要由CSDN通过智能技术生成

题目

实现一种简单原始的文件相似度计算, 即以两文件的公共词汇占总词汇的比例来定义相似
度。为简化问题, 这里不考虑中文(因为分词太难了), 只考虑长度不小于1000个英文单
词的文章, 长度超过10字母的单词只考虑前10个字母。
输入格式:
给出要检查的元素英文文本文件的文件夹位置
输出格式:
1, 以表格形式给出该文件夹下两两文件的相似度数值
2, 可以查询两文件的公共词汇(按装英文顺序输出)
说明:
两文件的相似度定义为两文件的公共词汇量占两文件总词汇量的百分比

文件1:Aaa Bbb Ccc
文件2:Bbb Ccc Ddd
则相似度为50%, 公共词汇为Bbb Ccc

解题思路

(一)文件夹的打开与读取

  • findfirst函数(文件夹)
  • 按路径打开文件夹,生成包含文件路径的文本
#include <stdio.h>
#include<string>
#include<fcntl.h>
//negative positive
char wenjiajia[30];
const char *to_search=wenjiajia;    //欲查找的文件,支持通配符
FILE *fp;
int main(int argc,char *argv[])
{
   
	char weizhi[50];
	int weizhilen=0;
	int kz=0;
	printf("请输入你要检查的英文文本文件的文件夹位置:例如(E:\\位置\\*.txt)\n");
	gets(wenjiajia);
	weizhilen=strlen(wenjiajia);
	for(kz;kz<weizhilen;kz++){
   
		if(wenjiajia[kz]!='*'){
   
		weizhi[kz]=wenjiajia[kz];
		}
		else if(wenjiajia[kz]=='*'){
   
			break;
		}
	}
	
	long handle;                                                     //用于查找的句柄
	struct _finddata_t fileinfo;                                     //文件信息的结构体
	fp = fopen("mulu1.txt", "w+");
	if (fp==0) 
	{
   
		printf("can't open file\n");
		return 0;
	}
	handle=_findfirst(to_search,&fileinfo);                          //第一次查找
	if(-1==handle)
            return -1;
    fprintf(fp,weizhi,fileinfo.name);
	fprintf(fp,"%s!",fileinfo.name);                 //打印出找到的文件的文件名
	while(!_findnext(handle,&fileinfo))                              //循环查找其他符合的文件,直到找不到其他的为止
	{
   
		fprintf(fp,weizhi,fileinfo.name);
		fprintf(fp,"%s!",fileinfo.name);
	}
	_findclose(handle);                                              //关闭句柄
	
	printf("目录生成");
	fclose(fp);
	
	
	return 0;
	}

输入:文件夹路径
输出:目录生成
注意:生成的文本位置与代码位置相同,以!区别不同文件的路径
在这里插入图片描述

  • fopen函数(文件)

  • 按路径打开文件

//编译预处理指令 
#include<stdio.h>
//定义主函数 
int main()
//主函数体开始        
{
     
	定义字符串 
	char file1name[10]; 
	char str1[1000];
	
	//gets从标准流 
	gets(file1name);
	
	//定义文件类型指针变量(FILE *指针变量名)
	//fp是指向FILE结构的指针变量,通过fp可找存放某个文件信息的结构变量,然后按结构变量的提供的信息找到该文件,实施对文件的操作。fp为指向一个文件的指针 
	FILE*fp;
	
	//文件打开fopen函数,以"r"打开只读 
	fp=fopen(file1name,"r");
	
	//判断是否成功
	if(NULL == fp)
	{
   
		printf("文件打开失败");
	 } 
	 
	//获取文件
	while(fgets(str1,1000,fp))
	{
   
		printf("%s",str1);	
	}	
	
	//文件关闭flcose函数  
	fclose(fp)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值