Daily Report 2012/11/05 陈伯雄(step 6)

  今天的工作主要是把昨天修改的设计方案的框架搭建出来:给数据库建一个倒排索引(这部分应该在pipe组实现搭建数据库之后立即执行,在数据更新前只需运行一次),当用户使用search功能时,调用match函数进行匹配,分局匹配程度返回一个区分优先级的ARRAYLIST,作为变量给呈现部分模块。  

  以下是新设计的基本框架(中文分词,match部分尚未完成,部分sql语句有待修改):

 1 static void Main(string[] args)
 2         {
 3             List<Result> resultList = new List<Result>();
 4             string connectionString = GetConnectionString();                            //SQL Server链接字符串   
 5             using (SqlConnection connection = new SqlConnection(connectionString))      //SQL链接类的实例化
 6             {
 7                 connection.Open();                                                      //打开数据库
 8                 //建立倒排表
 9                 string sqlstr = "CREATE table index3(key varchar(50) primary key, ID varchar(50))";
10                 SqlCommand cmd = new SqlCommand();
11                 cmd.Connection = connection;
12                 cmd.CommandText = sqlstr;
13                 cmd.ExecuteNonQuery();
14                 //读取顺序表
15                 sqlstr = "SELECT * FROM DOC,PDF,VEDIO,QAPAIR";
16                 cmd.CommandText = sqlstr;
17                 SqlDataReader reader = cmd.ExecuteReader();                            //它的返回类型为SqlDataReader。此方法用于用户进行的查询操作。使用SqlDataReader对象的Read();方法进行逐行读取。
18                 try
19                 {
20                     while (reader.Read())
21                     {
22                         string title = reader["title"].ToString();
23                         string keyword = reader["keyword"].ToString();
24                         string ID = reader["ID"].ToString();
25                         //分词处理
26                         string[] words = getWords(title, keyword);
27                         //将keyword信息添加到倒排表
28                         foreach (string word in words)
29                         {
30                             //暂时缺一个判断条件(未完成)
31 
32                             //倒排索引中存在的关键词,加上属性ID信息
33                             cmd.CommandText = "SELECT value FROM index3 WHERE value = word";
34                             string newValue = cmd.ExecuteScalar().ToString() + "," + ID;
35                             cmd.CommandText = "UPDATE index3 SET value = newValue WHERE key = word";
36                             cmd.ExecuteNonQuery();
37 
38                             //倒排表中加入新关键词
39                             cmd.CommandText = "INSERT INTO index3 VALUES(word, ID)";
40                             cmd.ExecuteNonQuery();
41                         }
42                     }
43                 }
44                 finally
45                 {
46                     // Always call Close when done reading.
47                     reader.Close();
48                 }
49                 //匹配(未完成)
50                 match();
51                 connection.Close();                                                     //关闭数据库  
52             }
53         }
54 
55 static private string GetConnectionString()
56         {
57             // To avoid storing the connection string in your code, 
58             // you can retrieve it from a configuration file, using the 
59             // System.Configuration.ConfigurationSettings.AppSettings property 
60             return "Data Source=.;Initial Catalog=FILE;Integrated Security=SSPI;";   //SQL Server链接字符串,本地测试用
61         }
62 
63  //分词(未完成)
64         static private string[] getWords(string title, string keyword)
65         {
66             string str = title + " " + keyword;
67             string[] wordList = str.Split(new char[2] { ' ', ':' }, StringSplitOptions.RemoveEmptyEntries);
68             return wordList;
69         }
70 
71         static private void match()
72         {
73 
74         }

明天将具体实现分词功能,等待match部分的实现再对其进行嵌入。

posted @ 2012-11-05 22:31  DOOM_buaascse  阅读(227)  评论(0编辑  收藏  举报