Свернуть с начальной и конечной позициями предложения

Новичок в R. Я использую tidytext::unnest_tokens, чтобы разбить длинный текст на отдельные предложения, используя ниже

tidy_drugs <- drugstext.raw %>% unnest_tokens(sentence, Section, token="sentences")

Итак, я получаю data.frame со всеми предложениями, преобразованными в строки.

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

Вот пример длинного текстового файла. Это с этикетки лекарства.

<< *6.1 Clinical Trial Experience
  Because clinical trials are conducted under widely varying conditions, adverse reaction rates observed in clinical trials of a drug cannot be directly compared to rates in the clinical trials of another drug and may not reflect the rates observed in practice.
 The data below reflect exposure to ARDECRETRIS as monotherapy in 327 patients with classical Hodgkin lymphoma (HL) and systemic anaplastic large cell lymphoma (sALCL), including 160 patients in two uncontrolled single-arm trials (Studies 1 and 2) and 167 patients in one placebo-controlled randomized trial (Study 3).
 In Studies 1 and 2, the most common adverse reactions were neutropenia, fatigue, nausea, anemia, cough, and vomiting.*

Желаемый результат - фрейм данных с тремя столбцами

Dataframe


person Krishna    schedule 23.02.2018    source источник
comment
Обращаясь за помощью, вы должны указать простой воспроизводимый пример. с образцом ввода и желаемым выводом, которые можно использовать для тестирования и проверки возможных решений.   -  person MrFlick    schedule 23.02.2018
comment
Добавлено дополнительное содержание в постановку задачи. Спасибо за помощь.   -  person Krishna    schedule 23.02.2018


Ответы (1)


Вы можете сделать это с помощью str_locate из stringr. В основном это раздражает, потому что символы новой строки и специальные символы могут испортить регулярные выражения при поиске. Здесь мы сначала удаляем новые строки из входного текста с помощью str_replace_all, затем удаляем токены, сохраняя исходный текст и предотвращая изменение регистра. Затем мы создаем новый столбец регулярного выражения, заменяя специальные символы (здесь (, ) и .) правильно экранированными версиями, и используем str_locate для добавления начала и конца каждой строки.

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

library(tidyverse)
library(tidytext)

raw_text <- tibble(section = "6.1 Clinical Trial Experience
  Because clinical trials are conducted under widely varying conditions, adverse reaction rates observed in clinical trials of a drug cannot be directly compared to rates in the clinical trials of another drug and may not reflect the rates observed in practice.
                   The data below reflect exposure to ARDECRETRIS as monotherapy in 327 patients with classical Hodgkin lymphoma (HL) and systemic anaplastic large cell lymphoma (sALCL), including 160 patients in two uncontrolled single-arm trials (Studies 1 and 2) and 167 patients in one placebo-controlled randomized trial (Study 3).
                   In Studies 1 and 2, the most common adverse reactions were neutropenia, fatigue, nausea, anemia, cough, and vomiting."
)

tidy_text <- raw_text %>%
  mutate(section = str_replace_all(section, "\\n", "")) %>%
  unnest_tokens(
    output = sentence,
    input = section,
    token = "sentences",
    drop = FALSE,
    to_lower = FALSE
    ) %>%
  mutate(
    regex = str_replace_all(sentence, "\\(", "\\\\("),
    regex = str_replace_all(regex, "\\)", "\\\\)"),
    regex = str_replace_all(regex, "\\.", "\\\\.")
  ) %>%
  mutate(
    start = str_locate(section, regex)[, 1],
    end = str_locate(section, regex)[, 2]
  ) %>%
  select(sentence, start, end) %>%
  print()
#> # A tibble: 3 x 3
#>   sentence                                                     start   end
#>   <chr>                                                        <int> <int>
#> 1 6.1 Clinical Trial Experience  Because clinical trials are ~     1   290
#> 2 The data below reflect exposure to ARDECRETRIS as monothera~   310   626
#> 3 In Studies 1 and 2, the most common adverse reactions were ~   646   762

Создано 23 февраля 2018 г. с помощью пакета reprex (v0.2.0).

person Calum You    schedule 24.02.2018
comment
Калум, Удивительная помощь !!. Очень ценю!! Знаете ли вы, почему я получаю следующую ошибку, когда запускаю ваш код как есть -- Ошибка в stri_locate_first_regex(строка, шаблон, opts_regex = opts(шаблон)) : Неправильно вложенные круглые скобки в шаблоне регулярного выражения. (U_REGEX_MISMATCHED_PAREN) - person Krishna; 24.02.2018
comment
Я понятия не имею, я сделал это воспроизводимый пример. Вы точно скопировали мой код? Поскольку вы не предоставили свои данные в легко воспроизводимой форме (включая звездочки, произвольные символы новой строки, открытие ‹‹), устранение неполадок затруднено. Скорее всего, что-то в регулярном выражении не соответствует и создает несоответствующую скобку. - person Calum You; 27.02.2018
comment
Calum, Да я точно скопировал код, включая raw_text. Я пробую несколько вещей и дам вам знать. Спасибо за ответ. - person Krishna; 27.02.2018