下面的算法是我过去的软件中使用的,因为很久没有用了,所以有些一遗忘^-^。源代码删减了部份(因为复串比较的实现算法我不能公开),所以可能会有些问题。此函数可以详细比较两个串的差别,不论串中间有没有间隔。 如果希望能更好的发挥它的功能,建议你在使用前先进行串整理(如:空格处理,符号处理等)。 相信对你会有些作用。// 函数返回字符串比较后的字符差别个数 // ErrNo-原错误数(一般为0) Value-用户输入的字符串 // DataStr-原始数据串 MinTestLength-最小检测宽度(一般用1) function ErrorTest(ErrNo:integer;StrA,StrB:shortstring; MinTestLength:byte=1):integer; var StrListA,StrListB:TStringList; CountA,CountB:integer; Ti,Tj,CmpTV:integer; function Test(ErrNo:integer;StrA,StrB:shortstring):integer; var // 错误检测器 La,Lb:integer; i,j,p:integer; begin la:=length(stra); lb:=length(strb); if (la>0) and (lb>0) and (MinTestLength<=la) then for i:=0 to la-MinTestLength do for j:=1 to i+1 do for p:=1 to lb-la+i+1 do if copy(stra,j,la-i)=copy(strb,p,la-i) then begin errno:=test(errno,copy(stra,1,j-1), copy(strb,1,p-1))+errno; result:=test(errno,copy(stra,la+j-i,i-j+1), copy(strb,la+p-i,lb-la-p+i+1)); exit; end; result:=errno+la+lb; end; begin result:=test(errno,stra,strb); end;举几个例子: ErrorTest(0,'abcde','abc de')=1 ErrorTest(0,'abc de','ab cde')=2 ErrorTest(0,'abcde','a12bcdefg',1)=4
检索“华人”,结果中有“华人组织”,“华人社团”,“海外华人”等等,但是可以排除
“中华人民共和国”,既然它可以分析汉语语义,我想我们的需求它当然可以满足。前面提到不用字典,我想了一下,似乎是不可能的。一定要建立关键词的索引表。欢迎一起开拓思路。
如果希望能更好的发挥它的功能,建议你在使用前先进行串整理(如:空格处理,符号处理等)。
相信对你会有些作用。// 函数返回字符串比较后的字符差别个数
// ErrNo-原错误数(一般为0) Value-用户输入的字符串
// DataStr-原始数据串 MinTestLength-最小检测宽度(一般用1)
function ErrorTest(ErrNo:integer;StrA,StrB:shortstring;
MinTestLength:byte=1):integer;
var
StrListA,StrListB:TStringList;
CountA,CountB:integer;
Ti,Tj,CmpTV:integer; function Test(ErrNo:integer;StrA,StrB:shortstring):integer;
var // 错误检测器
La,Lb:integer;
i,j,p:integer;
begin
la:=length(stra);
lb:=length(strb);
if (la>0) and (lb>0) and (MinTestLength<=la) then
for i:=0 to la-MinTestLength do
for j:=1 to i+1 do
for p:=1 to lb-la+i+1 do
if copy(stra,j,la-i)=copy(strb,p,la-i) then
begin
errno:=test(errno,copy(stra,1,j-1),
copy(strb,1,p-1))+errno;
result:=test(errno,copy(stra,la+j-i,i-j+1),
copy(strb,la+p-i,lb-la-p+i+1));
exit;
end;
result:=errno+la+lb;
end;
begin
result:=test(errno,stra,strb);
end;举几个例子:
ErrorTest(0,'abcde','abc de')=1
ErrorTest(0,'abc de','ab cde')=2
ErrorTest(0,'abcde','a12bcdefg',1)=4