#include "come.h"
/*
1.长度为N的字串,a字符串的长度为n,b的字符串长度为m
2.N-gram相似度计算:交集子串个数/并集子串个数
3.a的N子串个数为 n+1-N,b的子串个数为m+1-N
4.设相交子串的个数为count;
5.相似度公式为 count/(m+n+2-2*N-count)
*/
float NG::ngram()
{
int i,j,k,temp=0;
int count=0;
result=0;
int n = strlen(a);
int m = strlen(b);
if(m<N||n<N)
{
printf("\n\t !!!字符串长度不符合N\n");
return 0;
}
int **astr=new int*[(n+1-N)*sizeof(int*)];//a字符串的所有字串
for(i=0;i<n+1-N;i++)
{
astr[i]=new int[N*sizeof(int)];//N gram中字串长度为N
for(j=0;j<N;j++)
{
astr[i][j]=i+j; //将所有字串组合存起来
}
}
int **bstr=new int*[(m+1-N)*sizeof(int*)];
for(i=0;i<m+1-N;i++)
{
bstr[i]=new int[N*sizeof(int)];
for(j=0;j<N;j++)
{
bstr[i][j]=i+j;
}
}
for(i=0;i<n+1-N;i++)
{
for(j=0;j<m+1-N;j++)
{
temp=0;
for(k=0;k<N;k++)
{
//printf("\t go^……%c\n",a[astr[i][k]]);
if(a[astr[i][k]]==b[bstr[j][k]])
temp++;
}
if(temp>=N)
{
count++;
break;
}
}
}
for(i=0;i<n+1-N;i++) //空间释放
{free(astr[i]);}
for(i=0;i<m+1-N;i++)
{free(bstr[i]);}
free(astr);
free(bstr);
result=(float)count/(float)(m+n+2-2*N-count);
if(result>1)//aaa与aaaa的情况
{
result=1/result;
}
return result;//返回相似度
}
楚楚的小窝空间
- 粉丝: 0
- 资源: 1
最新资源
- Matlab版本2023b的Embedded Coder Support Package for ARM Cortex-M Processors支持包免费分享,1.8G压缩包分成3个(2/3)
- ghostscript-10.0.0
- 医疗保障信息平台定点医药机构接口规范
- Python编程基础入门到高级开发技巧指南
- 手机充电头外观尺寸检测机工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- JSP EIMS系统-OA子系统的设计与开发(源代码+LW).zip
- (JSP)JTBC_CMS_2.0.0.8.zip
- linux java jdk8
- Windows系统上Tomcat的安装与配置详解
- Linux-Shell基础命令语言
- 服装图像数据集,衣服图像数据,包含服装属性
- Matlab版本2023b的Embedded Coder Support Package for ARM Cortex-M Processors支持包免费分享,1.8G压缩包分成3个(3/3)
- glove11111wwee.pdf
- ECharts象形柱图-圣诞愿望清单和山峰高度-4.zip
- ECharts象形柱图-人体含水量-2.zip
- ECharts象形柱图-驯鹿的速度-6.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈