C# - 防止重复检索帖子

时间:2013-07-18 01:39:02

标签: c# facebook-graph-api

我很新,我正在尝试创建一个使用FB API从Facebook检索帖子的C#程序。

我有一个字数统计功能,可以检查否定词词典。 这意味着它将显示负字以及其频率出现。

我现在面临的问题是,我想显示包含这些否定词的帖子。但是,如果帖子中的否定词存在3次,那么帖子就会出现三次。我该如何解决这个问题?

Below is my code:

(For designer)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

    namespace empTRUST
    {
        public partial class PostAnalysis : Form
        {
            DBStatusDL ad;
            string target_fbid;
            public PostAnalysis(string target_fbid)
            {
                InitializeComponent();
                this.target_fbid = target_fbid;
                ad = new DBStatusDL();

            }

            private void button_Displayposts_Click(object sender, EventArgs e)
            {
                int i = 1;
                var dir = new DirectoryInfo(Application.StartupPath + "\\Dictionary"); //Load the dictionary from debug folder
                var ed = new matchingWordsWithPosts();
                var rows = ad.LoadStatus(target_fbid); //Call the load status function based on fb_id
                foreach (FileInfo file in dir.GetFiles()) //For loop, to loop through files
                {
                    var dict = File.ReadAllLines(dir.FullName + "\\" + file);
                    foreach (var row in rows)
                    {
                        List<DataRow> words = ed.countWordsInStatus(row, dict); // Retrieves word dictionary returned from function

                        foreach (var word in words)
                        {
                            var item = new ListViewItem(new[] { i.ToString() ,word["Status_message"].ToString(), word["Status_time"].ToString() });
                            listViewPosts.Items.Add(item);
                            i++;
                        }
                    }
                }

            }

            private void button_Back_Click(object sender, EventArgs e)
            {
                this.Close();
                var abc = new AnalysisPage(target_fbid);
                abc.Show();
            }
        }
    }

(For class)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Data;

    namespace empTRUST
    {
        class matchingWordsWithPosts
        {
            public List<DataRow> countWordsInStatus(DataRow status, string[] dictArray)
            {
                List<DataRow> statusList = new List<DataRow>();
                var words = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); // local word dictionary is created here
                foreach (var dictEntry in dictArray)
                {
                    var wordPattern = new Regex(@"\w+");
                    string smallDictEntry = dictEntry.ToLower();
                    foreach (Match match in wordPattern.Matches(status["Status_message"].ToString()))
                    {
                        if (match.ToString() == smallDictEntry)
                        {
                            statusList.Add(status);
                        }
                    }
                }
                return statusList;   // returns local word dictionary to receiving end
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

因为你没有提供countWordsInStatus()功能,所以我不知道这是不是问题。但是,看起来就像问题一样,即使它已经匹配了一个这样的单词,该函数也会继续通过帖子。要解决此问题,您可以在将帖子添加到要返回的列表后添加continue;(或者可能是break;,具体取决于您正在使用的代码)。这将循环跳到下一篇文章,并确保它不会继续计算已经匹配的帖子中的单词。

如果您发布该功能,则应该更容易理解该问题。

答案 1 :(得分:0)

在匹配一个单词并处理后退出循环。