Как получить наиболее близкое слово к справочному слову в мурлыкании - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть следующий список:

list(c("\n", "\n", "oesophagus graded  and fine\n", 
"\n", "\n", "\n", "stomach and  antrum  altough with some rfa response rfa\n", 
"\n", "mucosa washed a lot\n", "\n", "treated with halo rfa ultra \n", 
"\n", "total of 100 times\n", "\n", "duodenum looks ok"))

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

Мойжелаемый результат -

antrum:rfa

Мой первый список:

EventList<-c("rfa", "apc", "dilat", "emr", "clip", "grasp", "probe", "iodine", 
"acetic", "nac", "peg", "botox")

Мой второй список:

tofind<-"ascending|descending|sigmoid|rectum|transverse|caecum|splenic|ileum|rectosigmoid|ileocaecal|hepatic|colon|terminal|terminal ileum|ileoanal|prepouch|pouch|stomach|antrum|duodenum|oesophagus|goj|ogj|cardia|anastomosis"

Код, который я использую:

EventList %>%
        map(
          ~words %>%
            str_which(paste0('^.*', .x)) %>%
            map_chr(
              ~words[1:.x] %>%
                str_c(collapse = ' ') %>%

                str_extract_all(regex(tofind, ignore_case = TRUE)) %>%
                map_if(is_empty, ~ NA_character_) %>%
                flatten_chr()%>%
                `[[`(1) %>%

                .[length(.)]
            ) %>%
            paste0(':', .x)
        ) %>%
        unlist() %>%
        str_subset('.+:')

Это дает мне Событие (в данном случае rfa), но вместо того, чтобы распределить его на antrum, оно выделяет его на oesophagus.

Поэтому оно передает егопервый термин, найденный в списке tofind, а не термин, ближайший к событию.

Я подозреваю, что строка

`[[`(1) %>%

 .[length(.)]

является виновником, но я не знаю, как изменитьэто так, что это дает мне ближайший термин, а не первый термин

1 Ответ

0 голосов
/ 04 февраля 2019

Ниже приводится последний сопоставленный элемент в tofind для каждого сопоставленного элемента в EventList

map(EventList, 
    function(event) {
      indices <- map(words, str_which, pattern = event)
      map(indices, function(i) 
        map2_chr(words, i, ~ .x[seq_len(.y)] %>% 
               str_c(collapse = ' ') %>% 
               str_extract_all(regex(tofind, ignore_case = TRUE), simplify = TRUE) %>% 
               last()) %>%
          map_if(is_empty, ~ NA_character_)
        ) %>% 
        unlist() %>% 
        paste0(':', event)
    })  %>%
  unlist() %>%
  str_subset('.+:')

# [1] "antrum:rfa"     "oesophagus:rfa"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...