Ejemplo n.º 1
0
    private static string deleteRecord()
    {
        string output = "deleteRecord\n";

        for (int i = 0; i < count; i++)
        {
            LocalParse lp = new LocalParse(sampleArticle.ArticleId, titles[i], "n", sampleArticle.ArticleId + 1);
            if (!LocalParseManager.deleteRecord(lp))
            {
                output += "Error! 删除WordContent为\"" + titles[i] + "\"的LocalParse记录失败!\n";
                errorCount++;
            }
            else
            {
                output += "Ok! 删除WordContent为\"" + titles[i] + "\"的LocalParse记录成功!\n";
            }
        }

        // delete Global Parse
        for (int i = 0; i < count; i++)
        {
            GlobalParse gp = new GlobalParse();
            gp.WordContent = titles[i];
            if (!GlobalParseManager.deleteRecord(gp))
            {
                output += "Error! 删除WordContent为\"" + titles[i] + "\"的GlobalParse记录失败!测试无法继续进行。请先解决GlobalParseManager中的错误。\n";
                errorCount++;
            }
        }

        return(output);
    }
Ejemplo n.º 2
0
        void addFiles(IEnumerable <string> path)
        {
            // parse them
            var parseResult = LocalParse.Parse(path.Select(file => new PathPair(file, file)).ToList());

            // add them to the origlist
            if (origResults == null)
            {
                origResults = new List <parseResult>();
            }
            foreach (parseResult pr in parseResult)
            {
                if (origResults.Find(match => match.full_filename == pr.full_filename) == null)
                {
                    origResults.Add(pr);
                }
            }

            // now merge them with the changes
            List <parseResult> allResults = (List <parseResult>)IdentifyChanges(true);

            foreach (parseResult pr in parseResult)
            {
                if (allResults.Find(match => match.full_filename == pr.full_filename) == null)
                {
                    allResults.Add(pr);
                }
            }

            // and refresh the grid
            FillGrid(allResults);
        }
Ejemplo n.º 3
0
    // 删除传入参数中id所示的记录,不对除LocalParse表之外的任何表进行操作。仅读取传入参数中的ArticleId字段
    // 仅供测试函数调用
    public static bool deleteRecord(LocalParse lp)
    {
        string     sqlStr = "DELETE FROM localParse WHERE articleId=@aId";
        SqlCommand cmd    = new SqlCommand(sqlStr);

        cmd.Parameters.AddWithValue("@aId", lp.ArticleId);
        return(DBHelper.ExecSQL(cmd));
    }
Ejemplo n.º 4
0
    //通过传入参数的articleId和wordContent字段找到相应记录,并将其count字段更新为传入参数中的相应值(仅读取传入参数中除type之外的字段)
    //成功返回true,失败返回false
    public static bool updateRecord(LocalParse lp)
    {
        int    articleId   = lp.ArticleId;
        string wordContent = lp.WordContent;
        string type        = lp.Type;
        int    count       = lp.Count;
        string sqlStr      = "UPDATE localParse SET type='" + type + "', counts=" + count + " WHERE articleId=" + articleId + " AND wordContent='" + wordContent + "'";

        return(SqlManager.ExecSQL(sqlStr));
    }
Ejemplo n.º 5
0
    //根据传入参数的articleId和wordContent查询一条localParse的记录(仅读取传入参数中的articleId和wordContent字段)
    //返回一个LocalParse的bean
    public static LocalParse selectRecord(LocalParse lp)
    {
        int     articleId   = lp.ArticleId;
        string  wordContent = lp.WordContent;
        string  sqlStr      = "SELECT * FROM localParse WHERE articleId=" + articleId + " AND wordContent='" + wordContent + "'";
        DataSet dataset     = SqlManager.GetDataSet(sqlStr, "localParse");

        if (dataset.Tables[0].Rows.Count == 0)
        {
            return(null);
        }
        lp.Type  = dataset.Tables[0].Rows[0]["type"].ToString();
        lp.Count = Convert.ToInt32(dataset.Tables[0].Rows[0]["counts"]);
        return(lp);
    }
Ejemplo n.º 6
0
        private void DoLocalParsing()
        {
            LocalParse runner = new LocalParse();

            runner.LocalParseCompleted += new LocalParse.LocalParseCompletedHandler(//runner_LocalParseCompleted);
                results =>
            {
                allFoundFiles = results.Select(r => r.PathPair).ToList();
                OnlineParsing.RemoveFilesInDB(ref results);
                this.labelWaitParse.Text = "Local File Parsing is done, displaying Results...";
                MPTVSeriesLog.Write(this.labelWaitParse.Text);
                origResults = results.ToList <parseResult>();
                FillGrid(results);
                this.labelWaitParse.Text = "Please make changes to the Results below, and/or add files. Click Next to continue.";
                // fire off event so user can click Next in wizard
                if (ParsingGridPopulated != null)
                {
                    ParsingGridPopulated();
                }
            });
            runner.AsyncFullParse();
        }
Ejemplo n.º 7
0
    //根据传入参数增加一条新的记录
    //注:传入参数中的count字段值需要上层设置好,本函数只管存储
    //成功返回true,失败返回false
    public static bool addRecord(LocalParse lp)
    {
        /*
         * int articleId = lp.ArticleId;
         * string wordContent = lp.WordContent;
         * string type = lp.Type;
         * int count = lp.Count;
         * string sqlStr = "INSERT INTO localParse (articleId, wordContent, type, counts) VALUES (" + articleId + ",'" +
         * wordContent + "','" + type + "'," + count + ")";
         * //string sqlStr = "INSERT INTO localParse (articleId, wordContent, type, counts) VALUES (" + articleId + ",俄罗斯,n," + count + ")";
         * return SqlManager.ExecSQL(sqlStr);
         */


        string     sqlStr = "INSERT INTO localParse (articleId, wordContent, type, counts) VALUES (@aId, @wContent, @type, @counts)";
        SqlCommand cmd    = new SqlCommand(sqlStr);

        cmd.Parameters.AddWithValue("@aId", lp.ArticleId);
        cmd.Parameters.AddWithValue("@wContent", lp.WordContent);
        cmd.Parameters.AddWithValue("@type", lp.Type);
        cmd.Parameters.AddWithValue("@counts", lp.Count);
        return(DBHelper.ExecSQL(cmd));
    }
Ejemplo n.º 8
0
    private static string selectRecord()
    {
        string output = "selectRecord\n";

        for (int i = 0; i < count; i++)
        {
            LocalParse lp = new LocalParse(sampleArticle.ArticleId, titles[i], "n", sampleArticle.ArticleId);
            //output += sampleArticle.ArticleId + "\t" + titles[i] + "\n";
            lp = LocalParseManager.selectRecord(lp);
            //output += lp.ArticleId + "\n";
            if (lp == null)
            {
                output += "Error! 通过ArticleId和WordContent获取LocalParse记录失败!返回值为空。\n";
                errorCount++;
            }
            else
            {
                output += "Ok! 通过ArticleId和WordContent获取LocalParse记录成功!返回值为空。\n";
            }
        }

        return(output);
    }
Ejemplo n.º 9
0
    private static string updateRecord()
    {
        string output = "updateRecord\n";

        for (int i = 0; i < count; i++)
        {
            LocalParse lp = new LocalParse(sampleArticle.ArticleId, titles[i], "n", sampleArticle.ArticleId + 1);
            if (!LocalParseManager.updateRecord(lp))
            {
                output += "Error! 调用updateRecord对WordContent为\"" + titles[i] + "\"的记录失败!返回值为false。\n";
                errorCount++;
                return(output);
            }
            else
            {
                output += "Ok! 调用updateRecord对WordContent为\"" + titles[i] + "\"的记录成功!返回值为true。\n";
            }
            lp = LocalParseManager.selectRecord(lp);
            if (lp == null)
            {
                output += "Error! 通过WordContent\"" + titles[i] + "\"查询记录失败!返回值为空。\n";
                errorCount++;
                continue;
            }
            if (lp.Count != sampleArticle.ArticleId + 1)
            {
                output += "Error! 对WordContent为\"" + titles[i] + "\"的记录更新Count字段失败!Count被更改为" + lp.Count + "。\n";
                errorCount++;
            }
            else
            {
                output += "Ok! 对WordContent为\"" + titles[i] + "\"的记录更新Count字段成功!Count被更改为" + lp.Count + "。\n";
            }
        }

        return(output);
    }
Ejemplo n.º 10
0
    private static string addRecord()
    {
        string output = "addRecord\n";

        Random r = new Random();

        // add Global Parse
        for (int i = 0; i < count; i++)
        {
            int no = r.Next(1000, 9000);

            titles[i] = no + "";
            GlobalParse gp = new GlobalParse(titles[i], "n", sampleArticle.ArticleId);
            if (!GlobalParseManager.addRecord(gp))
            {
                output += "Error! 新增GlobalParse记录\"" + titles[i] + "\"失败!测试无法继续进行。请先解决PrimaryGroupManager中的错误。\n";
                errorCount++;
            }
        }


        for (int i = 0; i < count; i++)
        {
            LocalParse lp = new LocalParse(sampleArticle.ArticleId, titles[i], "n", sampleArticle.ArticleId);
            if (!LocalParseManager.addRecord(lp))
            {
                output += "Error! 为id是\"" + sampleArticle.ArticleId + "\"的样例文章新增wordContent为\"" + titles[i] + "\"的记录失败!\n";
                errorCount++;
            }
            else
            {
                output += "Ok! 为id是\"" + sampleArticle.ArticleId + "\"的样例文章新增wordContent为\"" + titles[i] + "\"的记录成功!\n";
            }
        }
        return(output);
    }
Ejemplo n.º 11
0
        void TestParsing_Start(bool bForceRefresh)
        {
            if (!bForceRefresh && listView_ParsingResults.Items.Count > 0 || initLoading)
                return;

            // refresh regex and replacements
            FilenameParser.reLoadExpressions();

            listView_ParsingResults.Items.Clear();
            listView_ParsingResults.Columns.Clear();
            // add mandatory columns
            ColumnHeader columnFileName = new ColumnHeader();
            columnFileName.Name = DBEpisode.cFilename;
            columnFileName.Text = "FileName";
            listView_ParsingResults.Columns.Add(columnFileName);

            ColumnHeader columnSeriesName = new ColumnHeader();
            columnSeriesName.Name = DBSeries.cParsedName;
            columnSeriesName.Text = "Parsed Series Name";
            listView_ParsingResults.Columns.Add(columnSeriesName);

            ColumnHeader columnSeasonNumber = new ColumnHeader();
            columnSeasonNumber.Name = DBEpisode.cSeasonIndex;
            columnSeasonNumber.Text = "Season ID";
            listView_ParsingResults.Columns.Add(columnSeasonNumber);

            ColumnHeader columnEpisodeNumber = new ColumnHeader();
            columnEpisodeNumber.Name = DBEpisode.cEpisodeIndex;
            columnEpisodeNumber.Text = "Episode ID";
            listView_ParsingResults.Columns.Add(columnEpisodeNumber);

            ColumnHeader columnEpisodeTitle = new ColumnHeader();
            columnEpisodeTitle.Name = DBEpisode.cEpisodeName;
            columnEpisodeTitle.Text = "Episode Title";
            listView_ParsingResults.Columns.Add(columnEpisodeTitle);

            MPTVSeriesLog.Write("Starting Parsing test, getting all files");

            LocalParse runner = new LocalParse();
            runner.LocalParseProgress += new LocalParse.LocalParseProgressHandler(TestParsing_LocalParseProgress);
            runner.LocalParseCompleted += new LocalParse.LocalParseCompletedHandler(TestParsing_LocalParseCompleted);
            runner.AsyncFullParse();
        }
Ejemplo n.º 12
0
    /*
     * 输入:一个Article的model实例以及其content字符串
     * 输出:执行结果标示符(暂定如下:0表示成功;-1~-5表示不同类型的失败)
     * 功能:
     *      1、对传入参数标示的文章内容进行分词、词频统计、TF·IDF计算等
     *      2、将文章总词数(article表的wordCount字段)更新到Article表中
     *      3、将分词结果更新到GlobalParse数据表中,注意参数中的articleNumber字段值要设置好:如果GlobalParse表中尚无该词记录,则
     *         articleNumber设为1;若GlobalParse表中已有该词记录,则读取其articleNumber并加一再存进去
     *      4、将分词结果更新到LocalParse数据表中,注意参数中的count字段值的设置要设置好:如果LocalParse表中尚无该词记录,则
     *         count设为1;若LocalParse表中已有该词记录,则读取其count并加一再存进去
     *      5、对文章进行分类,并将分类结果更新到Article2Group数据表中。若没有任何类别适合该文章,则默认应该将其分到groupId为0的类别中,该类别即“分组失败”类别或“其他”类别(视用户需求而定)
     *      6、返回执行结果。请实现者自己定义一下不同的返回值标示何种类型的失败
     *
     * 用途说明:该函数为私有函数,只被addArticleWrapper函数在将新文章添加到数据库后自动调用,用于解析新文章。
     *
     */
    private static void parseArticle(Article a, string content)
    {
        // 在这里先行数据库中读出 各个 primary group 的 关键词列表
        List <List <string> > allGroupKeywordList = new List <List <string> >();
        List <string[]>       allGroup            = PrimaryGroupMananger.getAllGroups();

        foreach (string[] ag in allGroup)
        {
            PrimaryGroups g = new PrimaryGroups();
            g.GroupId   = Convert.ToInt32(ag[0]);
            g.GroupName = ag[1];
            allGroupKeywordList.Add(PrimaryGroupKeyWordsManager.getKeyWordsOfCertainPrimaryGroup(g));
        }


        List <String[]> parseList = stringParse(content);

        a.WordCount = parseList.Count;
        Dictionary <String, Int32> dic = new Dictionary <String, Int32>();
        int wordMount = 0;

        foreach (String[] tempString in parseList)
        {
            if (stop_list.Contains(tempString[0]))
            {
                continue;
            }
            if (!dic.ContainsKey(tempString[0]))
            {
                dic.Add(tempString[0], 1);
                wordMount++;
            }
            else
            {
                int tempInt = dic[tempString[0]];
                dic[tempString[0]] = tempInt + 1;
            }
        }
        int articleID = a.ArticleId;
        Dictionary <String, Double> tf_idf = new Dictionary <String, Double>();

        foreach (KeyValuePair <String, Int32> keyPair in dic)
        {
            GlobalParse tempGP = new GlobalParse();
            tempGP.ArticleNumber = 1; tempGP.WordContent = keyPair.Key; tempGP.Type = "q";
            if (GlobalParseManager.addRecord(tempGP) == false)
            {
                int num = GlobalParseManager.selectRecordByWordContent(tempGP).ArticleNumber + 1;
                tempGP.ArticleNumber = num;
                GlobalParseManager.updateRecord(tempGP);
            }
            tempGP = GlobalParseManager.selectRecordByWordContent(tempGP);
            LocalParse tempLP = new LocalParse();
            tempLP.ArticleId = articleID; tempLP.WordContent = tempGP.WordContent; tempLP.Count = keyPair.Value;
            tempLP.Type      = "q";
            LocalParseManager.addRecord(tempLP);

            // Counting tf_idf
            int    tf_fenzi = tempLP.Count; int tf_fenmu = wordMount;
            int    total_document_number     = ArticleManager.countArticleNum();
            int    document_number_with_word = tempGP.ArticleNumber;
            double tf_idf_value              = ((double)tf_fenzi) / tf_fenmu;// *Math.Log((total_document_number / document_number_with_word), Math.E);
            tf_idf.Add(keyPair.Key, tf_idf_value);
        }
        //tf_idf.OrderByDescending(s => s.Value);
        double[] answer = new double[allGroup.Count];
        for (int i = 0; i < answer.Length; i++)
        {
            answer[i] = 0;
        }
        //Console.Write(tf_idf.ElementAt(0).Key);
        //Console.WriteLine(other.Count);

        for (int i = 0; i < answer.Length; i++)
        {
            List <string> list = allGroupKeywordList[i];
            if (list == null)
            {
                continue;
            }
            foreach (String tempS in list)
            {
                if (tf_idf.ContainsKey(tempS))
                {
                    answer[i] += tf_idf[tempS];
                }
            }
        }
        Article2Group a2g = new Article2Group();

        a2g.ArticleId = a.ArticleId;
        a2g.GroupId   = max(answer);
        Article2GroupManager.addRecord(a2g);
    }
Ejemplo n.º 13
0
 private void DoLocalParsing()
 {            
     LocalParse runner = new LocalParse();
     runner.LocalParseCompleted += new LocalParse.LocalParseCompletedHandler(//runner_LocalParseCompleted);
         results => 
         {
             allFoundFiles = results.Select(r => r.PathPair).ToList();
             OnlineParsing.RemoveFilesInDB(ref results);
             this.labelWaitParse.Text = "Local File Parsing is done, displaying Results...";
             MPTVSeriesLog.Write(this.labelWaitParse.Text);
             origResults = results.ToList<parseResult>();                    
             FillGrid(results);
             this.labelWaitParse.Text = "Please make changes to the Results below, and/or add files. Click Next to continue.";
             // fire off event so user can click Next in wizard
             if (ParsingGridPopulated != null)
                 ParsingGridPopulated();
         });
     runner.AsyncFullParse();
 }