private static void CheckOnCriteria(double scienceFile, double funFile, double poemFile, double file, ParserFileInfo fileClass) { var sumCriteria = Math.Abs(scienceFile - file) + Math.Abs(funFile - file) + Math.Abs(poemFile - file); CheckFile data = new CheckFile(); if (sumCriteria == 0) { sumCriteria = 1; } data.ScienceClass = (sumCriteria - Math.Abs(scienceFile - file)) / sumCriteria * 100; data.FunClass = (sumCriteria - Math.Abs(funFile - file)) / sumCriteria * 100; data.PoemClass = (sumCriteria - Math.Abs(poemFile - file)) / sumCriteria * 100; fileClass.checkData.Add(data); }
public void LoadFile(string Type, bool directory = false) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Title = "Выберите имя"; string path = string.Empty; if (Type != "Проверка") { foreach (var item in _info) { if (Type == item.Type) { _info.Remove(item); break; } } } else { int count = 0; foreach (var item in _info) { switch (item.Type) { case "Эталон Научной": count++; break; case "Эталон художественного": count++; break; case "Эталон стихотворения": count++; break; } } if (count != 3) { MessageBox.Show("Загрузите все 3 эталона"); return; } } if (openFileDialog.ShowDialog() == true) { path = openFileDialog.FileName; } string[] files = { path }; if (directory) { files = Directory.GetFiles(Path.GetDirectoryName(path)); } if (string.IsNullOrEmpty(path)) { return; } foreach (var file in files) { var fileInfo = new ParserFileInfo(); fileInfo.Type = Type; fileInfo.FileName = file.Split('\\').Last(); if (Type == "Проверка") { fileInfo.NeedCheck = true; } LoadFile(file, fileInfo); fileInfo.CorrelationFirstCriteria = Math.Round(FirstCriteriaWork(fileInfo.CriteriaFirst), 4); if (double.IsNaN(fileInfo.CorrelationFirstCriteria)) { fileInfo.CorrelationFirstCriteria = 0; } fileInfo.CorrelationSecondCriteria = Math.Round(FirstCriteriaWork(fileInfo.CriteriaSecond), 4); if (double.IsNaN(fileInfo.CorrelationSecondCriteria)) { fileInfo.CorrelationSecondCriteria = 0; } Infos.Add(fileInfo); } }
private static void LoadFile(string path, ParserFileInfo fileInfo) { var text = File.ReadAllText(path, Encoding.UTF8); for (int i = 0; i < 10; i++) { text = text.Replace("\r\n\r\n\r\n", "\r\n\r\n"); } var pattern = "\r\n\r\n"; var paragraphSplit = System.Text.RegularExpressions.Regex.Split(text, pattern); var paragraphWords = 0; fileInfo.WordCount = text.Split(' ').Where(q => q.Length > 2).ToArray().Length; fileInfo.AverageWordLength = fileInfo.WordCount / text.Length; Dictionary <string, int> wordsLanguages = new Dictionary <string, int>(); foreach (var word in text.Split(' ').Where(q => q.Length > 2).ToArray()) { var language = LanguagetText(word); if (wordsLanguages.ContainsKey(language)) { wordsLanguages[language]++; } else { wordsLanguages.Add(language, 1); } } var mainLanguage = wordsLanguages.First(q => q.Value == wordsLanguages.Max(l => l.Value)); fileInfo.ForeignWordsCount = wordsLanguages.Where(q => q.Key != mainLanguage.Key).Sum(q => q.Value); foreach (var paragparh in paragraphSplit) { var line = paragparh.Split(' '); paragraphWords = line.Where(q => q.Length > 2).ToArray().Length; var sentece = paragparh.Split(new char[] { '.', '!', '?' }); var sentenceWords = paragraphWords / (double)sentece.Length; fileInfo.CriteriaFirst.Add(new CriteriaData() { Words = paragraphWords, SenteceWord = sentenceWords, }); var newLineCount = System.Text.RegularExpressions.Regex.Split(paragparh, "\r\n"); foreach (var newLine in newLineCount) { var words = newLine.Split(' '); var LineSenteces = newLine.Split(new char[] { '.', '!', '?' }); fileInfo.CriteriaSecond.Add(new CriteriaData() { Words = words.Where(q => q.Length > 2).ToArray().Length, SenteceWord = LineSenteces.Length, }); } } fileInfo.ParagraphWordsCount = fileInfo.WordCount / paragraphSplit.Length; for (int i = 0; i < text.Length; i++) { var letter = text[i]; if (letter == '.' || letter == '!' || letter == '?') { fileInfo.SentenceCount++; } if (letter == '\n') { if (i + 2 < text.Length && text[i + 2] == '\n') { fileInfo.ParagraphCount++; while (i + 2 < text.Length && text[i + 2] == '\n') { i += 2; } } else { fileInfo.LineBreaksCount++; } } if (letter == ',') { fileInfo.CommasCount++; } if (letter == '–' && text[i - 2] == '\n') { fileInfo.DirectSpeechCount++; } if (letter == '\"' || letter == '«') { fileInfo.QuotesCount++; } } }