/// <summary> /// Обработчик нажатия кнопки "Проверить текст" /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonCheck_Click(object sender, EventArgs e) { dataGridViewBasicResult.Rows.Clear(); dataGridViewExtraResult.Rows.Clear(); string text = "Введите текст для анализа."; if (richTextBoxText.Text == text) { MessageBox.Show("Ошибка анализа! Введите в пустое поле текст и попробуйте еще раз.", "Сообщение об ошибке"); } else { Text enterText = new Text(richTextBoxText.Text); richTextBoxText.Text = enterText.fullText; ExtremistAnalysisText analysis = new ExtremistAnalysisText(enterText); textsResult = analysis.AvailabilityExtremistText(textVocabulary); phrasesResult = analysis.AvailabilityExtremistPhrases(phraseVocabulary); extremistPhrasesColor = RandomColors(textsResult.Count); if (textsResult.Count > 0 || phrasesResult.indexSpacesOfStartUsingPhrases.Count > 0) { buttonCancell.Enabled = true; buttonCheck.Enabled = false; if (textsResult.Count == 0) { MessageBox.Show("Совпадений с экстремистскими текстами из базы данных не найдено, но были найдены экстремистские фразы.", "Результат анализа"); tabControlProcessing.SelectedIndex = 1; } else if (phrasesResult.indexSpacesOfStartUsingPhrases.Count == 0) { MessageBox.Show("Совпадений с экстремистскими фразами из базы данных не найдено, но были найдены совпадения с экстремистскими текстами.", "Результат анализа"); tabControlProcessing.SelectedIndex = 0; } for (int indexResult = 0; indexResult < textsResult.Count; indexResult++) { dataGridViewBasicResult.Rows.Add(); dataGridViewBasicResult.Rows[indexResult].Cells[0].Value = textVocabulary.texts.IndexOf(textsResult[indexResult].usingExtremistText) + 1; dataGridViewBasicResult.Rows[indexResult].Cells[1].Value = "Начало использованного текста - \"" + textsResult[indexResult].usingExtremistText.startWords + "...\", конец текста - \"..." + textsResult[indexResult].usingExtremistText.endWords + "\"."; dataGridViewBasicResult.Rows[indexResult].Cells[2].Value = Convert.ToString(textsResult[indexResult].usindProbability) + " %"; dataGridViewBasicResult.Rows[indexResult].Cells[3].Style.BackColor = extremistPhrasesColor[indexResult]; } for (int indexExtrType = 0; indexExtrType < phrasesResult.probabilityUsingExtremistPhrases.Length; indexExtrType++) { dataGridViewExtraResult.Rows.Add(); dataGridViewExtraResult.Rows[indexExtrType].Cells[0].Value = phraseVocabulary.ExtremistTypes()[indexExtrType]; dataGridViewExtraResult.Rows[indexExtrType].Cells[1].Value = Convert.ToString(phrasesResult.probabilityUsingExtremistPhrases[indexExtrType]) + " %"; } tabControlProcessing_SelectedIndexChanged(this, EventArgs.Empty); richTextBoxText.ReadOnly = true; } else { MessageBox.Show("Совпадений с экстремистскими текстами и фразами из базы данных не найдено.", "Результат анализа"); } } }
/* * Функция расчета количества встречавшихся экстремистских фраз и выражений * по их виду экстремизма. * vocabulary - словарь экстремистских фраз и слов. * textWords - исходный текст в виде массива слов. * occurenceExtremistPhrases - массив частот встречающихся экстремистских фраз и слов * в тексте. * indexSpacesOfStartPhrases - индексы пробелов перед экстремистскими фразами в тексте. * indexSpacesOfEndPhrases - индексы пробелов после экстремистских фраз в тексте. */ private int[] OccurenceCountExtremistPhrases(ExtremistPhraseVocabulary vocabulary, string[] textWords, out List <int> indexSpacesOfStartPhrases, out List <int> indexSpacesOfEndPhrases) { List <string> extremistTypes = vocabulary.ExtremistTypes(); int[] occurenceExtremistPhrases = new int[extremistTypes.Count]; indexSpacesOfStartPhrases = new List <int>(); indexSpacesOfEndPhrases = new List <int>(); foreach (ExtremistPhrase extremistPhrase in vocabulary.phrases) { string[] phraseWords = extremistPhrase.PhraseWords(); for (int wordIndex = 0; wordIndex < textWords.Length; wordIndex++) { if (WordCoincidence(textWords[wordIndex], phraseWords[0])) { int availability = 1; if (textWords.Length - wordIndex >= phraseWords.Length) { for (int phraseWordIndex = 1; phraseWordIndex < phraseWords.Length; phraseWordIndex++) { if (WordCoincidence(textWords[wordIndex + phraseWordIndex], phraseWords[phraseWordIndex])) { availability++; } else { break; } } if (availability == phraseWords.Length) { occurenceExtremistPhrases[extremistTypes.IndexOf(extremistPhrase.typePhrase)]++; indexSpacesOfStartPhrases.Add(enterText.SpaceElementLocationTextIndex(wordIndex)); indexSpacesOfEndPhrases.Add(enterText.SpaceElementLocationTextIndex(wordIndex + phraseWords.Length)); } } wordIndex += availability - 1; } } } return(occurenceExtremistPhrases); }