public void Learn(Sentence sentence) { if(sentence.Sentiment == Sentiment.Positive) { positiveSentances++; allCount++; for (int i = 0; i < context.SentimentWords.Count; i++) { var w = context.SentimentWords[i]; if (!positiveDict.ContainsKey(w)) positiveDict.Add(w, new int[2]); if (sentence.SentimentWords.Contains(i)) positiveDict[w][1]++; else positiveDict[w][0]++; } } else { negtiveSentances++; allCount++; for (int i = 0; i < context.SentimentWords.Count; i++) { var w = context.SentimentWords[i]; if (!negativeDict.ContainsKey(w)) negativeDict.Add(w, new int[2]); if (sentence.SentimentWords.Contains(i)) negativeDict[w][1]++; else negativeDict[w][0]++; } } }
public void Analize(Sentence sentence) { var distpos = GetDist(sentence, positiveDict, positiveSentances); var distneg = GetDist(sentence, negativeDict, negtiveSentances); if (distpos > distneg) sentence.Sentiment = Sentiment.Positive; else sentence.Sentiment = Sentiment.Negative; }
static void Print(Sentence s, AnalysisContext context) { Console.WriteLine(s.Text); Console.WriteLine("Entities:"); foreach(var i in s.Entities) { var word = context.Entities[i]; Console.WriteLine("-->"+word.ToString()); } Console.WriteLine("Sentiment:" + s.Sentiment); Console.WriteLine(); }
static void Main(string[] args) { //Stemmer st = new Stemmer(); //while (true) { // var res = st.Stem(Console.ReadLine()); // Console.WriteLine(res); } //var matrix = WordsMatrix.Build("Files\\input_learn_pos.txt"); var cont = AnalysisContext.CreateContext(); BaesianClassifier baes = new BaesianClassifier(cont); baes.Teach(); /*foreach (var line in File.ReadAllLines("Files\\input_learn_pos.txt")) { Sentence s = new Sentence(cont, line); s.GetWords(); s.Sentiment = Sentiment.Positive; baes.Learn(s); } foreach (var line in File.ReadAllLines("Files\\input_learn_neg.txt")) { Sentence s = new Sentence(cont, line); s.GetWords(); s.Sentiment = Sentiment.Negative; baes.Learn(s); } */ List<Tuple<IWord, Sentiment>> list = new List<Tuple<IWord, Sentiment>>(); foreach (var line in File.ReadAllLines("Files\\input.txt")) { Sentence s = new Sentence(cont, line); s.GetWords(); baes.Analize(s); Print(s, cont); foreach (var i in s.Entities) { var word = cont.Entities[i]; list.Add(new Tuple<IWord, Sentiment>(word, s.Sentiment)); } } Console.WriteLine("Результат анализа"); foreach (var t in list) Console.WriteLine(t.Item1 + " -> " + t.Item2); Console.ReadLine(); }
public static int Analize([MarshalAs(UnmanagedType.LPWStr)]string text) { var sentance = new Sentence(Classifier.Context, text); Classifier.Analize(sentance); return (int)sentance.Sentiment; }
public void Teach() { foreach (var line in File.ReadAllLines(Constants.LearnPositiveFile)) { Sentence s = new Sentence(context, line); s.GetWords(); s.Sentiment = Sentiment.Positive; Learn(s); } foreach (var line in File.ReadAllLines(Constants.LearnNegativeFile)) { Sentence s = new Sentence(context, line); s.GetWords(); s.Sentiment = Sentiment.Negative; Learn(s); } }
double GetDist(Sentence sentence, Dictionary<IWord,int[]> dict, int classcount) { double dist = classcount / (allCount * 1.0); for (int i = 0; i < context.SentimentWords.Count; i++) { var word = context.SentimentWords[i]; if (sentence.SentimentWords.Contains(i)) dist *= dict[word][1] / (classcount * 1.0); else dist *= dict[word][0] / (classcount * 1.0); } return dist; }