如何实现模糊查找?我在做一个小的查询软件,j2se,access,swing.输入:中国建行
能找到:中国建设银行输入:中国建设银行
能找到:中国建行
要求是输入关键字后,查询,得到一个查找结果的列表,根据匹配程度排序,就像百度一样。我找了很多资料,正则,sql模糊查找,java分割字符串等,还是没能解决,请高手来教教我。

解决方案 »

  1.   

    这个属于词库检索问题,的确是搜索引擎中经常遇到的问题。---------------
    输入:中国建行
    能找到:中国建设银行输入:中国建设银行
    能找到:中国建行
    ---------------
    但达到这些效果做法也不一样。词库维护、检索为了做到人性化是需要考虑简称转化问题。好的分词,词库分词功能中都包含简称和全称转化。
    该功能也类似于中文数字和阿拉伯数字的转化等等。大多是做统一的转化。一般是在查询时通过把简称转化为全称(即简称词库检索得到后,自动返回对应的全称)。即 中国建行 -> 中国建设银行所以一般如下需求输入:中国建设银行
    能找到:中国建行这种需求是不太会去做的。因为搜索检索的索引文件都是以一个一致的内容在做索引,要不就是全称要不就是简称。
    但撇开以上的说法,把 中国建设银行、中国建行 放在同样的地位上,那么要达到楼主的需求,就需要考虑对输入的文字进行分词时,采用最大分词(即分词最多的模式)。然后再通过分到的词去检索。
    取个例子吧
    词库包含:中国  建设  银行  建行  建设银行   中国建行   中国银行  中国建设银行 ......输入:中国建设银行
    分词得到:中国、中国建设、中国建设银行、建设、建设银行、银行根据分到词拼装query term(配置单元)匹配情况如下:
    中国         ->  中国、中国建设、中国建行、中国银行、中国建设银行
    中国建设     ->  中国建设、中国建设银行
    中国建设银行 ->  中国建设银行
    建行         ->  建设、建设银行
    建设银行     ->  建设银行
    银行         ->  银行不涉及简称转化,词库中的只有‘建行’是查不出来的,只能查到建设银行。这个还只是一个小例子。但查出来的东西太多了,这个往往不是最好的结果。
      

  2.   

    http://qieqie.javaeye.com/blog/110148这个是 王切切 的blog地址,里面有他写的分词器,里面有你需要的东西。如果简单做只需要它的词库检索部分代码。他的代码值得你花时间全部读一次,写的不错。具体你再有问题再问吧。方法告诉你了,做要自己了。
      

  3.   

    我不知道你的swing編程是怎麼樣子的. 但是在j2ee中是這樣實現的.將前臺的值得到.. 在寫sql語句的時候package com.spring.mvc;import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;public class csnd2 {
    public static void main(String args[])throws Exception{
    String driver= "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    String url="jdbc:sqlserver://localhost:1433;database=???";
    String username = "?";
    String password ="";
    Connection conn;
    PreparedStatement pstmt;
    Class.forName(driver);
    conn = DriverManager.getConnection(url,username,password);
    String str = "???";
    String sql="select ???? from tableName where ?? like '"+str+"'";
    pstmt = conn.prepareStatement(sql);
    pstmt.executeUpdate();

    }
    }
      

  4.   

    如果仅仅是在众多词条中查找相似的词语,可以试试一些搜索引擎中查询扩展的方法。有一种算法叫字符串编辑距离,可以算算"中国建设银行"与"中国建行"的编辑距离。或者使用NLP领域的点互信息方法,计算"中国建设银行"与"中国建行"的PMI值,来确定两者是否有很大的联系。现在基于维基百科做的词条相似度计算也很多,看看一些信息检索中查询扩展的论文应该很有用