Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
1

Сравнить несколько строк, и отсеять одинаковые

04.07.2017, 12:43. Показов 1270. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как бы вы ускорили данный вариант, или какие способы вы знаете?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Func<string, IEnumerable<string>> getKey = str => Regex.Split(str, @"[.!?()\[\]{}\n]")
    .Where(s => !string.IsNullOrWhiteSpace(s))
    .Distinct();
 
items = items
    .Where((item, i) =>
    {
        var key1 = getKey(item.Text);
        var isAdd = items
        .Where((_, j) => i != j)
        .All(it =>
        {
            var key2 = getKey(it.Text);
            var ex12 = key1.Except(key2);
            var ex21 = key2.Except(key1);
            var middle = ((double)ex12.Count() + ex21.Count()) / 2;
            var add = (1 - middle / key1.Count()) < 0.9;
            return add;
        });
        return isAdd;
    })
    .ToList();
В принципе, алгоритм можно переделать под цикл внутри цикла, что ускорит процесс...
Если я начну сравнивать 5000+ текстов, это займет не мало времени.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.07.2017, 12:43
Ответы с готовыми решениями:

Сравнить несколько матриц, и из их строк сформировать новую матрицу
Ребят помогите написать программу которая будет сравнивать допустим три матрицы и из их строк...

Как сравнить значения ComboBox и листа ячейки, если одинаковые вывод сообщения, если разные сравнить с ячейкой ниже
Добрый день. Как сравнить значения ComboBox и значения ячейки на листе, если одинаковые вывод...

Сравнить массивы на одинаковые буквы
Кто поможет решить задачку? 1) Дано 2 массива. Сравнить массивы на одинаковые буквы. Тоесть если...

Сравнить и сгруппировать одинаковые массивы
Добрый день. Помогите в решении задачи, пожалуйста. Есть массив из 261 элемента, каждый элемент...

7
1 / 1 / 1
Регистрация: 22.11.2015
Сообщений: 139
04.07.2017, 13:29 2
EveKS, нужно точное вхождение ? есть же алгоритмы по типу Кнута-Морриса-Пратта
0
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
04.07.2017, 13:58  [ТС] 3
Jexio, сейчас я разбиваю на предложения, используя символы [.!?()\[\]{}\n], затем убираю повторы предложений, затем нахожу количество различных предложений между первым и вторым предложением, затем наоборот(2-1), нахожу среднеарифметическое, затем процент совпавших предложений относительно этого среднеарифметического, и если это более 90%, текст исключается.
0
1 / 1 / 1
Регистрация: 22.11.2015
Сообщений: 139
04.07.2017, 14:14 4
EveKS, я не знаю корректны ли ваши 90% , вам виднее, но это задача нечеткого поиска и я знаю только три варианта - Расстояние Левенштейна с различными модификациями , суффиксные деревья(но вам видимо не подойдут из-за большого объема информации) и хэширование по сигнатуре(как раз для большого объема строк). Думаю это лишь малая часть.
0
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
04.07.2017, 14:31  [ТС] 5
Jexio, назвал тему не верно. Сравниваться будут тексты. 90%, там должны оба текста совпасть, случай вхождения части текста в другой текст, большего объема, допускается. (эти алгоритмы посмотрю)
0
1 / 1 / 1
Регистрация: 22.11.2015
Сообщений: 139
04.07.2017, 14:46 6
Лучший ответ Сообщение было отмечено EveKS как решение

Решение

EveKS, Тогда вам нужен алгоритм longest common subsequence. Всякие утилиты для сравнения файлов вроде на нем построены. Думаю, в скорости с вашим решением выиграет, хотя реализацию я не помню уже, могу и наврать)
0
3560 / 2501 / 1174
Регистрация: 14.08.2016
Сообщений: 8,206
05.07.2017, 01:04 7
а задача то какой? типа антиплагиат? "мама мыла раму" и " мама раму мыла" и "раму мыла мама" как считать?
0
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
05.07.2017, 08:07  [ТС] 8
Diamante, как бы это 3 разных предложения.
0
05.07.2017, 08:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2017, 08:07
Помогаю со студенческими работами здесь

Записать в файл несколько строк, а затем записать несколько строк из этого файла в другой
Заранее создать текстовый файл 1.txt и записать в него несколько строк текста. Программа должна...

Сравнить два ассоциативных массива и вывести одинаковые значения.
Есть два ассоциативных массива : $array1 = array('blue' =&gt; 1, 'red' =&gt; 2, 'green' =&gt; 3,...

Сравнить две матрицы, одинаковые соответствующие элементы заменить на 1
Здраствуйте, такое задание: Сравнить две матрицы, одинаковые соответствующие элементы заменить на...

Сравнить элементы и, если они одинаковые, то оставить один из них
Как в массиве сравнить элементы и если они одинаковые,то оставить один из них?Например: дана...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru