Проблемы проста ...
Дано:Поиск списка фраз против словесного списка и подсчитать количество появлений
-> список нечестных слов, скажу List1.
-> список строк (или фраз) для поиска этих мерзких слов-, скажем list2
Желаемый результат: граф фраз, которые соответствовали по меньшей мере, один из нечистых-слов.
Пример:
List1: "кошка", "собака", "мышь", "Ницца животное"
List2: "Кошка хорошо". «Плохая собака», «Хорошая кошка и собака», «Хорошее животное», «Привет», «Привет, мышь», «Это плохо»
Вывод: 5 фраз содержат по крайней мере 1 грязное слово.
Что я сделал:.
int sum = list1.Sum(s => list2.Count(t => t.Contains(s)));
Это занимает около 38 секунд для списка фола слов 5600 фраз, а также около 4000 строк для поиска в (четырехъядерный, 4 Гб оперативной памяти) .. WAYYYYYY TOO SLOW!
Я искал решения или алгоритмы, которые могут существовать для этого ... Не удалось найти.
Даже если кто-то может указать мне в правильном направлении, назвав алго, показывая фрагмент кода или просто указав палец (!!), было бы здорово!
Я понятия не имею, если это действительно поможет, но вы могли бы попытаться составить регулярное выражение из всех мерзких слов (один регулярное выражение, содержащее их все, и скомпилируйте его), чем запустить его против фраз. Я просто догадываюсь, что скомпилированное регулярное выражение быстрее, чем ваш запрос linq. – Alxandr
[Инвертированный индекс] (http://en.wikipedia.org/wiki/Inverted_index) или [Индексирование поисковых систем] (http://en.wikipedia.org/wiki/Search_engine_indexing) – I4V
Возможно, использование регулярных выражений будет более эффективным , – filipko