private void poAutoruToolStripMenuItem_Click(object sender, EventArgs e) { try { OdbcConnection connection = new OdbcConnection(); connection.ConnectionString = "DSN=PostgreSQL35W;UID=masterwordcounter;PWD=masterwordcounter"; connection.Open(); string q = "SELECT * FROM (SELECT sum(s.num_of_repeats) prosjek, avg(s.pct_of_occurence), s.word_text, t.author FROM stats s, texts t WHERE s.text_id = t.id AND t.author = 'Agatha Christie' AND type_of_stats = 2 GROUP BY s.word_text,t.author ORDER BY prosjek DESC) top_sve OFFSET 0 LIMIT 200"; OdbcCommand getAllTexts = new OdbcCommand(q, connection); OdbcDataReader odr = getAllTexts.ExecuteReader(); int a = 0; lista_stats_text.Clear(); double ukupno = 0; while (odr.Read()) { a++; Statistika s = new Statistika(); s.Broj_ponavljanja = odr.GetInt32(0); s.Procenat_pojave_unutar_teksta = odr.GetDecimal(1) * 100; s.Id = a; s.Rijec_tekst = odr.GetString(2); lista_stats_text.Add(s); ukupno += s.Broj_ponavljanja; } odr.Close(); List <koordinate> pravi_rez = new List <koordinate>(); List <koordinate> ideal_rez = new List <koordinate>(); double suma_razlike = 0; for (int i = 0; i < lista_stats_text.Count; i++) { if (double.IsNegativeInfinity(Math.Log10(lista_stats_text[i].Broj_ponavljanja))) { break; } if (double.IsNegativeInfinity(Math.Log10(lista_stats_text[0].Broj_ponavljanja / (i + 1)))) { break; } koordinate k = new koordinate(); k.X = Math.Log10(i + 1); k.Y = Math.Log10(lista_stats_text[i].Broj_ponavljanja); pravi_rez.Add(k); koordinate k1 = new koordinate(); k1.X = Math.Log10(i + 1); k1.Y = Math.Log10(lista_stats_text[0].Broj_ponavljanja / (i + 1)); ideal_rez.Add(k1); } try { for (int i = 0; i < pravi_rez.Count; i++) { double a1 = Math.Round(Math.Pow((pravi_rez[i].X - ideal_rez[i].X), 2) + Math.Pow((pravi_rez[i].Y - ideal_rez[i].Y), 2), 4); suma_razlike += a1; suma_razlike = Math.Round(suma_razlike, 4); } } catch (ArithmeticException ae) { MessageBox.Show(ae.Message); } double MSE = suma_razlike / pravi_rez.Count; double[] lista_x = new double[ideal_rez.Count]; double[] lista_y = new double[ideal_rez.Count]; int j = 0; foreach (koordinate k in pravi_rez) { lista_x[j] = k.X; lista_y[j] = k.Y; j++; } double[] f = Fit.Polynomial(lista_x, lista_y, 2, MathNet.Numerics.LinearRegression.DirectRegressionMethod.NormalEquations); var bestfit = Tuple.Create(0.0, 0.0); bestfit = Fit.Line(lista_x, lista_y); l_text_stats.Text = "Date riječi u tabeli predstavljaju " + Math.Round((double)(podsuma / ukupno) * 100, 2) + "% od cijelog teksta. Ukupno posebnih riječi ima " + lista_stats_text.Count + " a cijeli tekst ima " + ukupno + " riječi."; l_nastavak.Text = "Suma odstupanja od idealnog Zipfovog zakona je " + suma_razlike + ", MSE je " + Math.Round(MSE, 5) + ", RMSE je " + Math.Round(Math.Sqrt(MSE), 5) + ". Best-fit polinom za rezultate je y(x) = " + Math.Round(f[1], 2) + "X + " + Math.Round(f[2], 2) + "X ^ 2 + " + Math.Round(f[0], 2); if (c_analiza.SelectedIndex == 0) { MSENDPF = Math.Round(MSE, 5); } else { MSEGPDF = Math.Round(MSE, 5); } if (MSENDPF != 0.0 && MSEGPDF != 0.0) { StatistikaTekst st = new StatistikaTekst(); st.Ime_teksta = c_tekst.SelectedItem.ToString(); st.RMSE_G1 = MSEGPDF; st.RMSE_N1 = MSENDPF; double h = Math.Round(st.RMSE_N1 - st.RMSE_G1, 5); st.Pct_diff = Math.Round(h / st.RMSE_N1, 5); if (st.Pct_diff > 1) { st.Pct_diff = st.Pct_diff - 1; } lista_PDF.Add(st); MSEGPDF = 0.0; MSENDPF = 0.0; } } catch (Exception es) { MessageBox.Show(es.Message); } }
private void saveTextStatsToolStripMenuItem_Click(object sender, EventArgs e) { Tekst trenutni_tekst = (Tekst)(c_tekst.SelectedItem); try { OdbcConnection connection = new OdbcConnection(); connection.ConnectionString = "DSN=PostgreSQL35W;UID=masterwordcounter;PWD=masterwordcounter"; connection.Open(); string q = "SELECT * FROM (SELECT sum(num_of_repeats) prosjek, avg(pct_of_occurence), word_text FROM stats WHERE text_id = ? AND type_of_stats = ? GROUP BY word_text ORDER BY prosjek DESC) top_sve"; OdbcCommand getAllTexts = new OdbcCommand(q, connection); getAllTexts.Parameters.Add("@text_id", OdbcType.Int).Value = trenutni_tekst.Id; getAllTexts.Parameters.Add("@type_of_stats", OdbcType.Int).Value = c_analiza.SelectedIndex+1; OdbcDataReader odr = getAllTexts.ExecuteReader(); int a = 0; lista_stats_text.Clear(); double ukupno = 0; while (odr.Read()) { a++; Statistika s = new Statistika(); s.Broj_ponavljanja = odr.GetInt32(0); s.Procenat_pojave_unutar_teksta = odr.GetDecimal(1) * 100; s.Id = a; s.Rijec_tekst = odr.GetString(2); lista_stats_text.Add(s); ukupno += s.Broj_ponavljanja; } odr.Close(); List<koordinate> pravi_rez = new List<koordinate>(); List<koordinate> ideal_rez = new List<koordinate>(); double suma_razlike = 0; for (int i = 0; i < lista_stats_text.Count; i++) { if (double.IsNegativeInfinity(Math.Log10(lista_stats_text[i].Broj_ponavljanja))) break; if (double.IsNegativeInfinity(Math.Log10(lista_stats_text[0].Broj_ponavljanja / (i + 1)))) break; koordinate k = new koordinate(); k.X = Math.Log10(i + 1); k.Y = Math.Log10(lista_stats_text[i].Broj_ponavljanja); pravi_rez.Add(k); koordinate k1 = new koordinate(); k1.X = Math.Log10(i + 1); k1.Y = Math.Log10(lista_stats_text[0].Broj_ponavljanja / (i + 1)); ideal_rez.Add(k1); } try { for (int i = 0; i < pravi_rez.Count; i++) { double a1 = Math.Round(Math.Pow((pravi_rez[i].X - ideal_rez[i].X), 2) + Math.Pow((pravi_rez[i].Y - ideal_rez[i].Y), 2), 4); suma_razlike += a1; suma_razlike = Math.Round(suma_razlike, 4); } } catch (ArithmeticException ae) { MessageBox.Show(ae.Message); } double MSE = suma_razlike / pravi_rez.Count; double[] lista_x = new double[ideal_rez.Count]; double[] lista_y = new double[ideal_rez.Count]; int j = 0; foreach (koordinate k in pravi_rez) { lista_x[j] = k.X; lista_y[j] = k.Y; j++; } double[] f = Fit.Polynomial(lista_x, lista_y, 2, MathNet.Numerics.LinearRegression.DirectRegressionMethod.NormalEquations); var bestfit = Tuple.Create(0.0,0.0); bestfit = Fit.Line(lista_x, lista_y); l_text_stats.Text = "Date riječi u tabeli predstavljaju "+ Math.Round((double)(podsuma/ukupno)*100,2) +"% od cijelog teksta. Ukupno posebnih riječi ima "+lista_stats_text.Count + " a cijeli tekst ima " + ukupno+" riječi."; l_nastavak.Text = "Suma odstupanja od idealnog Zipfovog zakona je "+suma_razlike+", MSE je "+Math.Round(MSE,5)+", RMSE je "+Math.Round(Math.Sqrt(MSE),5)+". Best-fit polinom za rezultate je y(x) = "+Math.Round(f[1],2)+"X + "+Math.Round(f[2],2)+"X ^ 2 + "+Math.Round(f[0],2); if (c_analiza.SelectedIndex == 0) MSENDPF = Math.Round(MSE, 5); else MSEGPDF = Math.Round(MSE, 5); if (MSENDPF != 0.0 && MSEGPDF != 0.0) { StatistikaTekst st = new StatistikaTekst(); st.Ime_teksta = c_tekst.SelectedItem.ToString(); st.RMSE_G1 = MSEGPDF; st.RMSE_N1 = MSENDPF; double h = Math.Round(st.RMSE_N1 - st.RMSE_G1, 5); st.Pct_diff = Math.Round(h / st.RMSE_N1, 5); if (st.Pct_diff > 1) st.Pct_diff = st.Pct_diff - 1; lista_PDF.Add(st); MSEGPDF = 0.0; MSENDPF = 0.0; } } catch (Exception es) { MessageBox.Show(es.Message); } }