private static string getKeyWordsOfCertainPrimaryGroup()
    {
        string        output = "getKeyWordsOfCertainPrimaryGroup\n";
        PrimaryGroups pg     = new PrimaryGroups(primaryGroupId, "");
        List <string> list   = PrimaryGroupKeyWordsManager.getKeyWordsOfCertainPrimaryGroup(pg);

        if (list == null)
        {
            output += "Error! getKeyWordsOfCertainPrimaryGroup失败,返回null。\n";
            errorCount++;
            return(output);
        }
        for (int i = 0; i < count; i++)
        {
            if (!list.Contains(keys[i]))
            {
                output += "Error! 未拿到keyWord为" + keys[i] + "的测试记录!\n";
            }
            else
            {
                output += "Ok! 成功拿到keyWord为" + keys[i] + "的测试记录!\n";
            }
        }

        return(output);
    }
    private static string deleteRecord()
    {
        string output = "deleteRecord\n";

        for (int i = 0; i < count; i++)
        {
            PrimaryGroupKeyWords kw = new PrimaryGroupKeyWords(primaryGroupId, keys[i]);
            if (!PrimaryGroupKeyWordsManager.deleteRecord(kw))
            {
                output += "Error! 删除测试关键词(keyWord为\"" + keys[i] + "\")失败!\n";
                errorCount++;
            }
            else
            {
                output += "Ok! 删除测试关键词(keyWord为\"" + keys[i] + "\")成功!\n";
            }
        }

        return(output);
    }
    private static string addRecord()
    {
        string output = "addRecord\n";

        Random r = new Random();

        for (int i = 0; i < count; i++)
        {
            int no = r.Next(1000, 9000);
            keys[i] = "测试样例" + no;
            PrimaryGroupKeyWords kw = new PrimaryGroupKeyWords(primaryGroupId, keys[i]);
            if (!PrimaryGroupKeyWordsManager.addRecord(kw))
            {
                output += "Error! 新增主分类(id为" + primaryGroupId + ")关键词\"" + keys[i] + "\"失败!返回false。\n";
                errorCount++;
            }
            else
            {
                output += "Ok! 新增主分类(id为" + primaryGroupId + ")关键词\"" + keys[i] + "\"成功!返回true。\n";
            }
        }
        return(output);
    }
Example #4
0
    /**
     * 输入:新主分类的名称,以及相应的关键词列表。各个关键词之间用空格分隔。
     * 输出:返回所有未被分到任何主分类的文章列表
     * 功能:1、新增一个主分类
     *       2、在该主分类下增加一个“其他”子分类
     *       2、调用NewsAssist.cs中getArticleListOfOthers( int userId , GroupNode gn )方法,通过将第二个参数置为null,拿到所有未被分到任何主分类的文章列表;
     *       3、返回这些文章的列表,让管理员查看一下其中有没有可以直接被分到新的主分类去的文章。
     */
    public static List <Article> addPrimaryGroup(string name, string keywordsList)
    {
        // 功能:1、新增一个主分类
        PrimaryGroups pg = new PrimaryGroups();

        pg.GroupName = name;
        int gid = PrimaryGroupMananger.addRecord(pg);
        PrimaryGroupKeyWords pgk = new PrimaryGroupKeyWords();

        pgk.PrimaryGroupId = gid;
        pgk.KeyWord        = keywordsList;
        bool addPGKsuccess = PrimaryGroupKeyWordsManager.addRecord(pgk);

        if (addPGKsuccess)
        {
            addSecondaryGroup(gid, "其他", "");
        }

        // 功能:2、调用Articlemanager.cs 中的方法,返回所有未分类的文章
        PrimaryGroups p = new PrimaryGroups();

        p.GroupId = 0;
        return(ArticleManager.getArticleListByPrimaryGroup(p));
    }
Example #5
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);
    }
Example #6
0
    private static void addPrimaryGroup()
    {
        output += "addPrimaryGroup\n";

        // add
        string name     = "sample123";
        string keywords = "qawsed rftgyh";

        ManagerAssist.addPrimaryGroup(name, keywords);

        // check
        List <string[]> list    = PrimaryGroupMananger.getAllGroups();
        bool            found   = false;
        int             groupId = -1;

        foreach (string[] item in list)
        {
            if (item[1].Equals("sample123"))
            {
                found   = true;
                groupId = int.Parse(item[0]);
                break;
            }
        }
        if (!found)
        {
            output += "Error! addPrimaryGroup执行失败!主分类未加入数据库中。\n";
            errorCount++;
        }
        else
        {
            output += "Ok! addPrimaryGroup执行成功!主分类已加入数据库中。\n";
        }

        PrimaryGroups pg    = new PrimaryGroups(groupId, name);
        List <string> list2 = PrimaryGroupKeyWordsManager.getKeyWordsOfCertainPrimaryGroup(pg);

        if (list2.Count != 2)
        {
            output += "Error! PrimaryGroupKeyWords数目不对!应为2\n";
        }
        else
        {
            output += "Ok! PrimaryGroupKeyWords数目正确!应为2\n";
        }

        if (list2.First().Equals("qawsed") || list2.First().Equals("rftgyh"))
        {
            output += "Ok! PrimaryGroupKeyWords中对应的第一个关键词通过验证!\n";
        }
        else
        {
            output += "Error! PrimaryGroupKeyWords中对应的第一个关键词未通过验证!\n";
            errorCount++;
        }

        List <Tag> tagL = TagManager.getAllTagsByCertainGroupId(groupId);

        if (tagL == null || tagL.Count != 1)
        {
            output += "Error! addPrimaryGroup调用后没有将“其他”子分类插入tag表!\n";
            errorCount++;
        }
        else
        {
            output += "Ok! addPrimaryGroup调用后成功将“其他”子分类插入tag表!\n";
        }

        // delete
        foreach (string item in list2)
        {
            if (!PrimaryGroupKeyWordsManager.deleteRecord(new PrimaryGroupKeyWords(groupId, item)))
            {
                output += "Error! 删除测试关键词失败!\n";
                errorCount++;
            }
        }
        Tag t = new Tag();

        t.TagId = tagL.First().TagId;
        if (!TagManager.deleteTag(t))
        {
            output += "Error! 删除测试主分类下“其他”子分类失败!\n";
            errorCount++;
        }
        PrimaryGroups temp = new PrimaryGroups();

        temp.GroupId = groupId;
        if (!PrimaryGroupMananger.deleteRecord(temp))
        {
            output += "Error! 删除测试主分类失败!\n";
            errorCount++;
        }
    }