Как быстро сравнить текст и список?

spy107

Client
Регистрация
19.08.2012
Сообщения
192
Благодарностей
15
Баллы
18
Например есть код страницы (взяли DOM страницы) это типа наш текст. Нужно максимально быстро узнать есть ли плохие слова из нашего списка в этом тексте который мы взяли со страницы.
Как это сделать не способом перебора, ну чтоб не брать по одному слову из списка и не искать в тексте, а как-то это сделать разом, быстро.
И возможно ли это сделать вообще быстро, если список скажем из 100-200 слов или больше.
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Например есть код страницы (взяли DOM страницы) это типа наш текст. Нужно максимально быстро узнать есть ли плохие слова из нашего списка в этом тексте который мы взяли со страницы.
Как это сделать не способом перебора, ну чтоб не брать по одному слову из списка и не искать в тексте, а как-то это сделать разом, быстро.
И возможно ли это сделать вообще быстро, если список скажем из 100-200 слов или больше.
Перебором 100-200 слов будет быстро, меньше секунды.
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
медленно - это в пм, когда по кубикам прыгает, а зп оно быстро отрабатывает
 

spy107

Client
Регистрация
19.08.2012
Сообщения
192
Благодарностей
15
Баллы
18
медленно - это в пм, когда по кубикам прыгает, а зп оно быстро отрабатывает
Нет, дело в другом, если большой текст (DOM) то ищет долго, задерживается именно на этом моменте долго, секунд 10, если умножить 10 секунд на хотя бы 100, это уже около 17 минут, то есть это реально очень долго, мне нужен результат хотя бы за минуты 3-5 максимум.

Поэтому вопрос остаётся открытым!!!
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
ну так дом же забирается одним кубиком в переменную например, а потом будет в этой переменной быстро искать
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Объединить элементы списка со стоп-словами в переменную (в качестве разделителя использовать | - вертикальную черту) и использовать эту переменную как регулярку для поиска в DOM.
Следующим экшеном проверять переменную с результатом на пустоту, если не пустая - слово из списка присутствует.
 

spy107

Client
Регистрация
19.08.2012
Сообщения
192
Благодарностей
15
Баллы
18
Проблема не в том, чтобы искать в DOM, проблема в том, чтобы искать быстро!!!
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
у всех быстро, у тебя медленно, так не бывает
 

S16er1um

Client
Регистрация
14.04.2016
Сообщения
826
Благодарностей
240
Баллы
43
Проблема не в том, чтобы искать в DOM, проблема в том, чтобы искать быстро!!!
Единственное что можно добавить к тому что вам уже насоветовали это брать странички методами POST/GET, а дальше искать стоп слова теми методами что вам подсказали. Если у вас шаблон отрабатывает долго, то у вас где-то ошибка. Вы берёте DOM модель 1 раз в переменную и потом прогоняете все слова через эту переменную. Не представляю сколько должно быть слов, чтоб эти два экшена отрабатывали дольше чем за пару сек
 

DmitryAk

Client
Регистрация
14.12.2016
Сообщения
860
Благодарностей
824
Баллы
93

spy107

Client
Регистрация
19.08.2012
Сообщения
192
Благодарностей
15
Баллы
18
Спасибо всем откликнувшимся. По теме решение как таковое не было найдено не смотря ни на что.
Пришлось обходными методами вырезать это просто напросто и отказаться от данных действий, тормозящих проект по времени.

Единственное что было мной найдено на просторах интернета, навевающее мысли по поводу решения данной проблемы в 1-ом посте данной темы это вот это:



Проверка содержимого из списка1 в списке2, входящее совпадение:


если есть в списке 2 строки, которые равняются строкам из списка 1, то он удаляет эти строки в списке 2. (только мне удалять строки не нужно, нужно просто проверить наличие совпадения хотя бы одного!!!) Вопрос, как можно сделать так, что бы код проверял не полное соответствие строк, а частичное содержание символов в этих строках и если символы из списка 1 содержаться в строках из списка 2, то удалить полностью эти строки из списка 2. (да, мне нужно именно частичное содержание проверять, но не удалять, просто выводить true или false) Объедините содержимое первого списка через | потом Операции над списком — Удалить строки, соответствующие регулярному выражению и там укажите свою переменную.

C#
Код:
//Списки проекта
var baseEmails = project.Lists["baseEmails"];
var blackList = project.Lists["blackList"];
// проверяем каждую строку
//Лочим для многопотока
lock(SyncObjects.ListSyncer)
{
foreach(string s in blackList)
{
//Ищем в основном списке
for(int i = 0; i < baseEmails.Count; i++)
{
  //Если нашли, удаляем
string check = baseEmails[i];
  if(check.Contains(s))
baseEmails.RemoveAt(i);
}
}
}
Но к сожалению я не разбираюсь в C#, поэтому не могу подогнать под свои нужды данный код. :ah:
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 657
Благодарностей
656
Баллы
113
Я помню парсил поисковик и тоже долго парсило, я удалял все теги регуляркой и потом искал, что нужно.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)