马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

Mysql写分词算法

[复制链接]
查看4407 | 回复2 | 2013-4-16 22:05:40 | 显示全部楼层 |阅读模式
[C#] 纯文本查看 复制代码
#region  一.先从article表里查询数据
/// <summary>
/// 一.先从article表里查询数据
/// </summary>
public void fenciBind()
{
    string sql = "select * from article;";
    string str = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
    MySqlConnection con = new MySqlConnection(str);
    con.Open();
    MySqlDataAdapter msda = new MySqlDataAdapter(sql, con);
    DataTable dt = new DataTable();
    msda.Fill(dt);
    for (int i = 0; i < dt.Rows.Count; i++)//循环数据库里的数据
    {
        string strcon = dt.Rows[i][1].ToString();//标题
        strcon += dt.Rows[i][3].ToString();//内容
        DateTime strtime = Convert.ToDateTime(dt.Rows[i][4]);//时间
 
        //判断时间 在一天内容不让他进行分词
        if (strtime < DateTime.Now.AddDays(-1))
        {
            string artsrt = dt.Rows[i]["id"].ToString();
            fencistr(strcon, artsrt);
            con.Close();
        }
    }
}
#endregion
 
#region  二.article表里的数据进行分词
/// <summary>
/// 二.article表里的数据进行分词
/// </summary>
/// <param name="strcon">article表里要分词标题和内容的数据</param>
/// <param name="artsrt">article表里数据id编号</param>
/// <returns></returns>
public string fencistr(string strcon, string artsrt)
{
    StringBuilder sb = new StringBuilder();
    sb.Remove(0, sb.Length);
    string t1 = "";
    Analyzer analyzer = new Lucene.China.ChineseAnalyzer();
    StringReader sr = new StringReader(strcon);
    TokenStream stream = analyzer.TokenStream(null, sr);
    Token t = stream.Next();
    while (t != null)
    {
        t1 = t.ToString();   //显示格式: (关键词,0,2) ,需要处理
        t1 = t1.Replace("(", "");
        char[] separator = { ',' };
        t1 = t1.Split(separator)[0];
        sb.Append("," + t1);
        t = stream.Next();
    }
    //三.汉字转换拼音
    pinyinstr(sb.ToString(), sb.ToString(), artsrt);
    return strcon;
}
#endregion
 
#region 三.汉字转换拼音
/// <summary>
///三.汉字转换拼音
/// </summary>
/// <param name="sb">用于转化为pingyin的汉字</param>
/// <param name="sbstr">用于往keywords表里添加的汉字</param>
/// <param name="artsrt">article表里数据id编号</param>
/// <returns></returns>
public string pinyinstr(string sb, string sbstr, string artsrt)
{
    string pystr = null;//pinyin表用逗号隔开的集合
    string s = sb.ToString();
    for (int i = 0; i < s.Length; i++)
    {
        if (ChineseChar.IsValidChar(s[i]))
        {
            ChineseChar CString = new ChineseChar(s[i]);
            for (int ii = 0; ii < CString.PinyinCount; ii++)
            {
                string PinYins = CString.Pinyins[ii].ToString().ToLower();
                if (PinYins[PinYins.Length - 1].CompareTo('5') < 0)
                {
                    pystr += PinYins;
                }
            }
            pystr += "|";
        }
        pystr += ",";
    }
    pystr = pystr.Replace("|,", "").TrimEnd(',');
    Opestr(pystr, sbstr, artsrt);//四.创建拼音数据表并添加数据
    return pystr;
}
#endregion
 
#region 四.创建拼音数据表并添加数据 同时往keywords表里添加数据
/// <summary>
/// 创建拼音数据表并添加数据 同时往keywords表里添加数据
/// </summary>
/// <param name="pystr">要创建的每个pinyin表</param>
/// <param name="sbstr">article表里的数据分词后逗号隔开的字符串</param>
/// <param name="artsrt">article表里数据id编号</param>
public void Opestr(string pystr, string sbstr, string artsrt)
{
    string[] PinYins = pystr.Trim().Split(',');
    for (int i = 1; i < PinYins.Length; i++)
    {
        //四.创建拼音数据表并添加数据
        //************************************1.往keywords表里添加数据*********************************************
        //(1).查询keywords表,并判断keywords表里pinyin是否存在相同的
        string str = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
        MySqlConnection con = new MySqlConnection(str);
        con.Open();
        string kwssql = "select * from `hww_article_search`.`keywords`";
        MySqlDataAdapter kwsmda = new MySqlDataAdapter(kwssql, con);
        DataTable kwdt = new DataTable();
        kwsmda.Fill(kwdt);
        string[] hzstr = sbstr.Trim().Split(',');//汉字用逗号分割的数据
        for (int ii = 1; ii < hzstr.Length; ii++)
        {
            if (kwdt.Rows.Count != 0) //(2).如果pinyin表里有数据,则先进行判断是否有相同的pinyin值
            {
                string kwstr = null;
                for (int ll = 0; ll < kwdt.Rows.Count; ll++)
                {
                    kwstr += "," + kwdt.Rows[ll]["pinyin"].ToString();
                }
                string kwpy = PinYins[i];
                if (!kwstr.Contains(kwpy))
                {
                    //(3).不存在相同的pinyin则添加
                    string kwsql = "INSERT INTO `hww_article_search`.`keywords` (`keyword`, `pinyin`) VALUES ('" + hzstr[ii] + "', '" + PinYins[ii] + "');";
                    MySqlCommand kwcom = new MySqlCommand(kwsql, con);
                    kwcom.ExecuteNonQuery();//添加
                }
            }
            else//如果没有数据则添加
            {
                string kwsql = "INSERT INTO `hww_article_search`.`keywords` (`keyword`, `pinyin`) VALUES ('" + hzstr[ii] + "', '" + PinYins[ii] + "');";
                MySqlCommand kwcom = new MySqlCommand(kwsql, con);
                kwcom.ExecuteNonQuery();//添加
            }
        }
 
        //************************************************2.建库建表**************************************************
        //(1).先建库
        string sqlcre = "create table if not exists `hww_article_search`.`" + PinYins[i] + "` ( `id` int(10) not null auto_increment, `article_id` int(10) unsigned not null,primary key(`id`));";
        MySqlCommand com = new MySqlCommand(sqlcre, con);
        com.ExecuteNonQuery();
        //(2).查询pinyin表,并判断yinpin表里article_id是否存在此相同的id
        string sqlif = "select * from `hww_article_search`.`" + PinYins[i] + "`";
        MySqlDataAdapter msdaif = new MySqlDataAdapter(sqlif, con);
        DataTable dtif = new DataTable();
        msdaif.Fill(dtif);
        //(3).往pinyin表里添加数据sql语句
        string sqladd = " insert into `hww_article_search`.`" + PinYins[i] + "`(`article_id`) values(" + artsrt + ");";
        MySqlCommand comadd = new MySqlCommand(sqladd, con);
        //(4).添加成功后修改article表里的时间为当前时间sql语句
        string uptimesql = "update `hww_article_search`.`article` set `update_time`='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "' where `id`=" + artsrt + ";";
        MySqlCommand comtime = new MySqlCommand(uptimesql, con);
        //如果pinyin表里有数据,则先进行判断是否有相同的id值
        if (dtif.Rows.Count != 0)
        {
            string sdi = null;
            for (int j = 0; j < dtif.Rows.Count; j++)
            {
                sdi += dtif.Rows[j]["article_id"].ToString() + ",";
            }
            string sad = artsrt;
            if (!sdi.Contains(sad))
            {
                //3.不存在相同的id号则添加
                comadd.ExecuteNonQuery();//添加
                comtime.ExecuteNonQuery();//修改
            }
        }
        else//如果没有数据则添加
        {
            comadd.ExecuteNonQuery();//添加
            comtime.ExecuteNonQuery();//修改
        }
    }
}
#endregion
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
chao2332601 | 2013-6-16 01:15:49 | 显示全部楼层
谢谢分享!!!
chao2332601 | 2013-6-16 05:07:52 | 显示全部楼层
谢谢分享!!!
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则