static void Main(string[] args) { Console.WriteLine("[START]\tTraining started"); NaiveBayesClassifier sentimentClassifier = new NaiveBayesClassifier(); sentimentClassifier.Train(new TestDataParser("Resources/SentimentTrainingData.txt")); Console.WriteLine("[END]\tTraining"); Console.WriteLine(); Console.WriteLine("[START]\tFriendlist parsing"); FriendListParser parser = new FriendListParser("Resources/friendships.reviews.txt"); parser.Parse(); File.WriteAllText("graph.csv", parser.Community.ToGraph()); Console.WriteLine("[END]\t\tFriendlist parsing"); Console.WriteLine(); Console.WriteLine("[START]\t\tIdentifying communities"); CommunityIdentifier communityIdentifier = new CommunityIdentifier(parser.Community); DateTime start = DateTime.Now; List<Community> subCommunities = communityIdentifier.Identify(); Console.WriteLine("[END]\t\tIdentifying communities"); Console.WriteLine(); Console.WriteLine("[START]\t\tAnalysing communities"); CommunityAnalyzer communityAnalyzer = new CommunityAnalyzer(sentimentClassifier, subCommunities); string filename = "result.csv"; communityAnalyzer.Analyze(filename); Console.WriteLine("[END]\t\tAnalysing communities: Results written to {0}", filename); Console.WriteLine("Identied communities: " + subCommunities.Count); Console.WriteLine("\nSub communities:"); foreach (var community in subCommunities) { Console.WriteLine(community.Size); community.Dispose(); } communityAnalyzer.Dispose(); communityIdentifier.Dispose(); sentimentClassifier.Dispose(); Console.WriteLine(DateTime.Now.Subtract(start).ToString("g")); Console.WriteLine("Finished everything. Press to exit"); Console.ReadLine(); }
public static void Main() { double averageLog = 0; double average = 0; Console.WriteLine("Started parsing"); TestDataParser parser = new TestDataParser("Resources/SentimentTrainingData.txt"); parser.Parse(); Console.WriteLine("Finished parsing\n"); List<Review> posReviews = new List<Review>(); List<Review> negReviews = new List<Review>(); Console.WriteLine("Sorting reviews"); foreach (var review in parser.Reviews) { if (review.Rating == Label.Neg) negReviews.Add(review); else if (review.Rating == Label.Pos) posReviews.Add(review); } List<Review>[] folds = SplitReviews(posReviews, 10); List<Review>[] negFold = SplitReviews(negReviews, 10); Console.WriteLine("Combing reviews"); for (int i = 0; i < folds.Length; i++) { folds[i].AddRange(negFold[i]); } Console.WriteLine("Testing reviews:\n"); for (int j = 0; j < folds.Length; j++) { List<Review> testReviews = folds[j]; List<Review> trainReviews = new List<Review>(); NaiveBayesClassifier classifier = new NaiveBayesClassifier(); for (int i = 0; i < folds.Length; i++) { if (j == i) continue; trainReviews.AddRange(folds[i]); } classifier.Train(trainReviews); int correctLog = 0; int correct = 0; foreach (var testReview in testReviews) { double posScoreLog = classifier.ScoreLog(testReview.Summary + testReview.Text, Label.Pos); double negScoreLog = classifier.ScoreLog(testReview.Summary + testReview.Text, Label.Neg); Label calculatedLabel; if (posScoreLog > negScoreLog) calculatedLabel = Label.Pos; else calculatedLabel = Label.Neg; if (calculatedLabel == testReview.Rating) correctLog++; double posScore = classifier.Score(testReview.Summary + testReview.Text, Label.Pos); double negScore = classifier.Score(testReview.Summary + testReview.Text, Label.Neg); if (posScore > negScore) calculatedLabel = Label.Pos; else calculatedLabel = Label.Neg; if (calculatedLabel == testReview.Rating) correct++; } averageLog += ((double)correctLog)/testReviews.Count; Console.WriteLine("[LogS]\tTest fold {0}: {1} / {2} = {3}", j, correctLog, testReviews.Count, ((double)correctLog)/testReviews.Count); Console.WriteLine("[S]\tTest fold {0}: {1} / {2} = {3}", j, correct, testReviews.Count, ((double)correct) / testReviews.Count); } Console.WriteLine("[LogS]\tAverage: " + averageLog * 100); Console.WriteLine("[S]\tAverage: " + average * 100); Console.ReadLine(); }
public CommunityAnalyzer(NaiveBayesClassifier sentimentClassifier, List<Community> communities) { _communities = communities; _sentimentClassifier = sentimentClassifier; }