TextBox中输入以下内容:
北京市 朝阳区 朝阳门北大街 天辰大厦 东林花屋想模糊匹配出数据库中已有的数据,比如:
北京 朝阳门北大街 东林花屋
北京市 朝阳区 天辰大厦 金枝名店
北京市 海淀区 知春路 天辰实业请帮忙推荐一下这方面的文章,我在网上没搜明白。

解决方案 »

  1.   

    正则就算了。效率跟不上。我写了一个KMP算法改进版本,你看看能否用的上。全文关键字检索-KMP改进算法
    http://blog.csdn.net/wuyazhe/archive/2010/10/05/5922167.aspx
      

  2.   

    哦。数据库。听说数据库可以用正则或是like之类的
    select * from table wehere address like %(北京市|朝阳区|朝阳门北大街|天辰大厦|东林花屋)%
    这样?不懂数据库。1楼贴的看来用不上了。
      

  3.   

    select * from table wehere address like %北京市% or like %朝阳区% or like %朝阳门北大街% or like %天辰大厦% or like %东林花屋%要我就这么写了
      

  4.   


    俺只是举一个例子,但TextBox中每次输入的内容都是不同的。
    而且我举例子的内容中间的空格是为了让帮我解决问题的老大们看着方便,实际并不是每个词都如此。
    所以,我的问题是:在TextBox中输入:北京市朝阳区朝阳门北大街天辰大厦东林花屋
    会从数据库中查出很多条近似的信息,比如:
    北京朝阳门北大街东林花屋
    北京市朝阳区天辰大厦金枝名店
    北京市海淀区知春路天辰实业
    ……如果老大认为此问题比较乱,可以推荐些文章给我。
      

  5.   

    SQL全文检索
    检索表中既包含b又包含c的所有行(注:列名不带引号)
    select * from TableName where contains(列名(, 列名), 'b*' and 'c*')
    检索表中包含a,b,c之一的所有列
    select * from TableName where freetext(列名(, 列名), 'a b c')
      

  6.   

    自己弄确实比较麻烦,不过有些现成的,例如Lucense.net,像LS说的,用Sql Server的全文索引也可以,就是效果差点,做索引和搜索都比较慢(不过也有好多年没用了,不知道现在是否改进了)
      

  7.   

    用我以前 用.net写一个
    数据库函数 
    输入两个字符串A,B 返回 这两个字符串 的相近度 
    相近度就是把A串通过插入或删除两个操作变成B串 所需要的最短步与串长度的差using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;
    using Microsoft.SqlServer.Server;public partial class UserDefinedFunctions
    {
        [Microsoft.SqlServer.Server.SqlFunction]
        public static SqlInt32 simil(string str1, string str2)
        {  
            int len1 = str1.Length;
            int len2 = str2.Length;
            int lenLCS;
            // unsigned  *previous, *next;
            if (len1 == 0 || len2 == 0)
                return 0;
            int[] previous = new int[len1 + 1];
            int[] next = new int[len1 + 1];
            int[] temp = new int[len1 + 1];
            //next=(unsigned *)calloc( len1+1, sizeof(unsigned));
            for (int j = 0; j < len2; ++j)
            {
                for (int k = 1; k <= len1; ++k)
                    if (str1[k - 1] == str2[j])
                        next[k] = previous[k - 1] + 1;
                    else next[k] = previous[k] >= next[k - 1] ? previous[k] : next[k - 1];
                temp = next;
                next = previous;
                previous = temp;
                //swap( &previous, &next);
            }
            lenLCS = previous[len1];
            return new SqlInt32(lenLCS);
        }
    };