Как сделать обработку стоплиста по пользовательскому вводу

Исходная задача

Есть потребность выявлять проблемные слова в текстовом вводе от пользователя.

Решение

Создаем таблицу as_stopwords

Нюанс - первичный ключ здесь будет само слово для ускорения процесса обработки. 

CREATE TABLE [dbo].[as_stopwords](
	[word] [nvarchar](32) NOT NULL,
 CONSTRAINT [PK_as_stopwords] PRIMARY KEY CLUSTERED 
(
	[word] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Слова в таблицу проще внести через SQL (к примеру есть файл со словами через пробел или каждое слово на отдельной строке): 

insert into as_stopwords
select distinct value from dbo.split('...тут большой текст... ', char(10))
where len(value)>0

Функция поиска проблемных слов в тексте: 

CREATE OR ALTER FUNCTION [dbo].[moderate_checkTexByStoplist]
(       
	@text nvarchar(max)
)
RETURNS @res table(word nvarchar(64), position int) as
BEGIN	
	insert into @res(word, position)
	select word, CHARINDEX(word, @text) position from as_stopwords where @text like '%'+word+'%'	
	return
END 

Использование функции: 

select word,position
from [dbo].[moderate_checkTexByStoplist](@text)

Если функция что-то выдала, то значит было некое стоп слово в тексте и можно дальше делать различную обработку данного события: 

  1. запретить ввод
  2. отправить уведомление модерацию для дальнейшей ручной модерации.
  3. просто зафиксировать факт, что пользователь вводит что-то подозрительное. 
Страница-источник на сайте falconspace.ru