在词库里查找相似单词,用最小编辑距离算法实现

问题描述

在词库里查找相似单词,用最小编辑距离算法实现

在一个文本词库里查找相似单词,就是输入一个单词,在词库里找与这个单词相似的单词,由相似度大到小,用最小编辑距离实现C++
#include
#include

#include

#include

#include

#include

#include
using namespace std;

typedef struct

{

char english[20];

char chinese[30];

char word_class[10];

} Word;

Word words[8000]; //将词典数组设置成全局的结构体数组

int wordsNum=0; //词典中的词条数目

typedef struct
{
int length;
char english[20];
}st;

st sth[8000];
int N=0;

void readDictionary()

{

FILE *fp;

//将文件中的数据读入到对象数组中

fp = fopen("G:毕业设计dictionary.txt","r"); //以输入的方式打开文件

if(fp==NULL) //测试是否成功打开

{

printf("dictionary open error!n");

exit(1);

}

while (!feof(fp))

{

fscanf(fp, "%s%s%s", words[wordsNum].english, words[wordsNum].chinese,words[wordsNum].word_class);

++wordsNum;

}

fclose(fp);

}

char s1[1000],s2[1000];
int min(int a,int b,int c)
{
int t = a < b ? a : b;
return t < c ? t : c;
}
int editDistance(int len1,int len2)
{
int ** d=new int *[len1+1];
for (int k=0;k<=len1;k++)
{
d[k]=new int [len2+1];
}
int i,j;
for (i = 0;i <= len1;i++)
{
d[i][0] = i;
}
for (j = 0;j <= len2;j++)
{
d[0][j] = j;
}
for (i = 1;i <= len1;i++)
{
for (j = 1;j <= len2;j++)
{
int cost = s1[i] == s2[j] ? 0 : 1;
int deletion = d[i-1][j] + 1;
int insertion = d[i][j-1] + 1;
int substitution = d[i-1][j-1] + cost;
d[i][j] = min(deletion,insertion,substitution);
}
}
return d[len1][len2];
for (int s=0;i<=len1;s++)
{
delete[] d[s];
}
delete[] d;
}

void bubble(int a[],int size) //冒泡排序
{
int i,temp;

for(int pass=1; pass
for(i=0; i
if(a[i]>a[i+1]){
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}

void main()
{
//int n;
char key1[20];
char key2[20];

// key1=new char [20];
// key2=new char [20];

readDictionary();

printf("请输入待查找的单词:n");
scanf("%s",&key1);

for(int num=0;num<wordsNum;num++)
{
    int len1,len2;

//  readDictionary();
    printf("1n");
    //key2=words[num].english;
    strcpy(key2,words[num].english);
    printf("2n");
    len1=strlen(key1);
    len2=strlen(key2);
    printf("3n");
    sth[num].length = editDistance(len1,len2);
    printf("4n");
}

printf("输出结果:n");

bubble(sth[wordsNum].length,wordsNum);
for(int k;k<wordsNum;k++)
{
    strcpy(words[k].english,sth[k].english);
}
for(int i=0;i<wordsNum;i++)
{
    if(sth[i].length>0&&sth[i].length<4)
        printf("%s ---> %s t %sn",words[i].english , words[i].word_class, words[i].chinese);
}

}

解决方案

什么问题呢?建议先单步
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

时间: 2024-08-31 07:29:22

在词库里查找相似单词,用最小编辑距离算法实现的相关文章

SEO中期如何建立“黄金”关键词词库

做SEO是一项辛苦而极具挑战性的工作,他最大成本其实就是时间成本,需要站长们有超强的毅力,广大的SEO辛辛苦苦把排名做上去很不容易,可最可怕的并不是做排名,而是我们把排名做上去了但是转换率却低的可怜,导致我们前期投入都白白浪费,站长们有时候也会碰到这样的尴尬境地,造成这样的主要原因是在优化中期我们的关键词没有进行关键词在挖掘,建立一个高质量的关键词词库,到底怎样挖掘我们的关键词呢,挖掘关键词要注重细节方面的处理,这样才能找到行业内好的关键词,今天给大家分享一下建立一个关键词词库的几个步骤.​ 一

百度推广助手新增本地词库 不联网也能管理关键词喽

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   最近,推广助手的关键词推荐功能(Editor KR)又有新升级啦! 新增本地词库,建立关键词上线前管理的入口,让您在本地也能轻松便捷地管理关键词,方便您对备选关键词进行有效的管理和整合,科学有效地提高上线关键词质量! 下面我们一起来看具体的操作. 1. 在推广助手的"工具"下拉菜单中,找到本地词库. 2.验证账号后,就可以进入本地词库的界面了

map-大文件里查找单词的问题

问题描述 大文件里查找单词的问题 RT?Definea function that, given an istream& and a constvector&, produces a map> holding each string (keyword) and the numbers of the line on which thestring appears. The line number of the first line is 1. ?Printin the order of

深蓝词库转换1.3版本发布——增强单词注音功能

"深蓝词库转换"是我在闲暇时写的一个词库转换程序,实现了各种输入法的用户词库.网络词库(细胞词库)之间的相互转换. 目前支持的输入法有: PC端: *搜狗拼音 *QQ拼音 *QQ五笔(纯汉字) *谷歌拼音 *搜狗五笔 *紫光拼音 *拼音加加 手机端: *QQ手机拼音 *百度手机拼音 由于工作和个人的原因,所以深蓝词库转换很久很久没有更新了,趁着这个国庆有时间,所以对该小程序做了下版本更新,主要更新的功能有: 1.增强了单词注音功能. 有些词库是只有汉字而完全没有拼音的词库,这种词库要转

求大学英语四六级单词词库(JAVA)

问题描述 各位IT大神,我们最近想做一款关于背单词的软件,可是不知道去哪里找四六级单词包,麻烦大神门有资源给小弟分享一下,找了很久了,是做安卓系统的记单词软件.拜谢!跪求! 解决方案 解决方案二:自己搜一个四六级单词表,然后把单词提取出来格式化一下,比如一行一个单词,不就是一个词库了至于怎么提取那就看你了,如果你能找到excel形式的应该比较方便解决方案三:解压缩后,可以获得CET4.dict.dz,CET4.idx等文件,其中CET4.dict.dz其实是个gzip文件,解压可以获得UTF8格

必应输入法词库怎么导入

  必应输入法支持导入一行一词的文本词库,支持导入搜狗拼音.百度.QQ拼音输入法的用户词库.使用该功能需预先导出要用的词库.(这个小编就不多说了,大家可以导出搜狗拼音输入法等等) 第一步:我们先必应输入法的状态栏找到"设置属性" 第二步:将准备好的用户词库导入必应输入法词库,现在词库这里选择导入词库 或者你可以在"设置向导"里导入词库 第三步:选择你要导入的词库,找到你放词库的文件夹 然后就会提示你导入词库成功,这样就导入好了,导出的方法一样 如果你觉得你的输入的词

lucene和solr的分词器词库如何从数据库加载?求代码

问题描述 lucene和solr的分词器词库如何从数据库加载?求代码 1,由于我们加入了同义词,所以需要定义一个IK的同义词工厂类IKSynonymFilterFactory继承TokenFilterFactory类并实现ResourceLoaderAware接口和Runnable接口,并重写create方法,在solr的里使用 2,我们定义一个ISSAnalyer类继承Analyzer,并重写必要方法,方便在控制台下测试. 3,定义一个IKTokenizerFactory类继承Tokenize

深蓝词库转换2.0发布——支持仓颉、注音、五笔、郑码、二笔等

经过了2个多月的改进,终于深蓝词库转换2.0版正式与大家见面了.在1.9版本中增加了对Rime拼音输入法的支持,也得到了网友的反馈,所以在2.0版本中增加了几个新功能: 一.支持多种编码的Rime输入法. Rime输入法是一款跨平台的输入法框架,在Windows下叫小狼毫,Linux下叫中州韵,Mac下叫鼠须管.这个输入法框架异常强大,支持各种常用的输入法,而且还可以通过简单的配置自定义输入法.深蓝词库转换在1.9版本中增加了对Rime拼音输入法的支持,现在在2.0中进行了增强,除了拼音外,还能

百度输入法新版发布 地域词库更懂用户

4月29日消息,近日,"更懂中文输入"的百度输入法新版发布,新版本基于百度多年来的搜索技术积累以及强大的 云端服务不仅扩充了海量词库,为大家提供了良好的输入体验,还增加了地域词库.标点符号自定义.候选栏设置等新功能,提升了输入的趣味性,下面就让我们一起下载最新版的百度输入法(http://shurufa.baidu.com/),来体验一下最新版带给我们的惊喜吧!地域词库推送 懂中文更懂用户在日常的文字输入情境中,我们很 多时候都会遇到一些生僻的地方名称,这个时候 往往都要花费好一段时间