Извлечь возраст из текста в R

У меня есть CSV-файл со столбцом, содержащим описания книг, вырезанные из Интернета, которые я импортирую в R для дальнейшего анализа. Моя цель - извлечь возраст героев из этой колонки в R, так что я представляю себе следующее:

  1. Сопоставьте строки типа "age" и "-year-old" с регулярным выражением
  2. Скопируйте предложения, содержащие эти строки, в новый столбец (чтобы я мог убедиться, что предложение не соответствует этому, например "В средние века 50 человек жили в xy").
  3. Извлеките числа (и, если возможно, несколько числовых слов) из этого столбца в новый столбец.

Результирующая таблица (или, возможно, data.frame) будет выглядеть так:

|Description             |Sentence           |Age
|YY is a novel by Mr. X  |The 12-year-old boy| 12
|about a boy. The 12-year|is named Dave.     |
|-old boy is named Dave..|                   |

Если бы вы могли мне помочь, это было бы здорово, так как мои R-навыки все еще очень ограничены, и я не нашел решения этой проблемы!

2 ответа

Решение

Вы можете попробовать следующее

library(stringr)

description <- "YY is a novel by Mr. X about a boy. The 12-year-old boy is named Dave. Dave is happy."

sentence <- str_extract(description, pattern = "\\.[^\\.]*[0-9]+[^\\.]*.") %>% 
  str_replace("^\\. ", "")
> sentence
[1] "The 12-year-old boy is named Dave."

age <- str_extract(sentence, pattern = "[0-9]+")
> age
[1] "12"

Другой вариант, если строка содержит другие цифры / описания, кроме возраста, но вам нужен только возраст.

library(stringr)
description <- "YY is a novel by Mr. X about a boy. The boy is 5 feet tall. The 12-year-old boy is named Dave. Dave is happy. Dave lives at 42 Washington street."
sentence <- str_split(description, "\\.")[[1]][which(grepl("-year-old", unlist(str_split(description, "\\."))))]
> sentence 
[1] " The 12-year-old boy is named Dave"

age <- as.numeric(str_extract(description, "\\d+(?=-year-old)"))
> age
[1] 12

Здесь мы используем строку "-year-old", чтобы указать нам, какое предложение вытащить, а затем извлекаем возраст, за которым следует эта строка.

Другие вопросы по тегам