Как я могу добавить столбец в набор R, содержащий количество совпадений регулярного выражения - PullRequest
0 голосов
/ 30 апреля 2020

Чтобы иметь возможность выполнять регулярные выражения на SQL сервере без использования CLR, я изучаю использование языка R. У меня есть набор текстов, и я хочу посчитать количество совпадений регулярного выражения в каждой строке.

Примечание : часть "R" находится в пределах @script переменная в блоке кода, показанном ниже. Это та часть, где эта проблема.

Для примера: у меня есть таблица InputData:

CREATE TABLE InputData (ID INT IDENTITY(1, 1), Text NVARCHAR(MAX))

Эта таблица содержит 3 строки:

INSERT INTO InputData(Text)
VALUES ('This is the first row'),
       ('This is the second row'),
       ('This is the third row')

Я бы хотел выполнить запрос, который возвращает количество раз, когда буква i находится в каждой строке, с помощью регулярного выражения (поскольку нужный мне поиск немного сложнее). После некоторого поиска в Google я пришел к следующему:

EXEC SP_EXECUTE_EXTERNAL_SCRIPT 
    @Language=N'R', 
    @script = N'pattern = ".*i.*"
    outData <- inData;
    outData$MatchCount <- length(gregexpr(pattern, outData$Text));'
, @input_data_1 = N'select ID, Text, 0 MatchCount from InputData'
, @input_data_1_name = N'inData'
, @output_data_1_name=N'outData'
with result sets ((ID INT, Text NVARCHAR(MAX), MatchCount INT));

Теперь вышеприведенное не работает, потому что regexpr запускает выражение во всем наборе и всегда возвращает «3», так как набор содержит 3 ряда. Я хотел бы, чтобы он возвращал количество совпадений в строке и помещал результат в правильную строку.

Таким образом, результат должен быть:

1, 'This is the first row', 3
2, 'This is the second row' 2
3, 'This is the third row', 3

В идеале, мне даже не нужно было бы возвращать текст в результирующем наборе. Достаточно только идентификатора и количества совпадений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...