如何实现模糊查找?我在做一个小的查询软件,j2se,access,swing.输入:中国建行
能找到:中国建设银行输入:中国建设银行
能找到:中国建行
要求是输入关键字后,查询,得到一个查找结果的列表,根据匹配程度排序,就像百度一样。我找了很多资料,正则,sql模糊查找,java分割字符串等,还是没能解决,请高手来教教我。
能找到:中国建设银行输入:中国建设银行
能找到:中国建行
要求是输入关键字后,查询,得到一个查找结果的列表,根据匹配程度排序,就像百度一样。我找了很多资料,正则,sql模糊查找,java分割字符串等,还是没能解决,请高手来教教我。
解决方案 »
- 问一下,有这样的方法吗? 将字符串String中的\udddd转化为字符的函数?
- Netbeans编的代码
- C#的CLIENT与JAVA的SERVER使用SOCKET的一些问题
- 怎样读取一个300多M的文本文件??急
- 在eclipse中怎样将Java Project改成Tomcat Project
- runtime的参数问题,高手快来帮帮我,进来都有分
- 如何用java程序获取所有的网络共享资源?
- IQ测试,看看你的智商是多少。我刚测完,IQ:124。
- ArrayList 可不可以去除重复的值?
- 菜鸟求助! 请各位大虾一定帮忙。。。。。。!!!! 一定给分!
- java 这样 去掉 换行,怎么实现?
- 求教JAVA如何将txt文件的大量数据内容导入到mysql中
输入:中国建行
能找到:中国建设银行输入:中国建设银行
能找到:中国建行
---------------
但达到这些效果做法也不一样。词库维护、检索为了做到人性化是需要考虑简称转化问题。好的分词,词库分词功能中都包含简称和全称转化。
该功能也类似于中文数字和阿拉伯数字的转化等等。大多是做统一的转化。一般是在查询时通过把简称转化为全称(即简称词库检索得到后,自动返回对应的全称)。即 中国建行 -> 中国建设银行所以一般如下需求输入:中国建设银行
能找到:中国建行这种需求是不太会去做的。因为搜索检索的索引文件都是以一个一致的内容在做索引,要不就是全称要不就是简称。
但撇开以上的说法,把 中国建设银行、中国建行 放在同样的地位上,那么要达到楼主的需求,就需要考虑对输入的文字进行分词时,采用最大分词(即分词最多的模式)。然后再通过分到的词去检索。
取个例子吧
词库包含:中国 建设 银行 建行 建设银行 中国建行 中国银行 中国建设银行 ......输入:中国建设银行
分词得到:中国、中国建设、中国建设银行、建设、建设银行、银行根据分到词拼装query term(配置单元)匹配情况如下:
中国 -> 中国、中国建设、中国建行、中国银行、中国建设银行
中国建设 -> 中国建设、中国建设银行
中国建设银行 -> 中国建设银行
建行 -> 建设、建设银行
建设银行 -> 建设银行
银行 -> 银行不涉及简称转化,词库中的只有‘建行’是查不出来的,只能查到建设银行。这个还只是一个小例子。但查出来的东西太多了,这个往往不是最好的结果。
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();
}
}