Извлечь возраст из текста в R
У меня есть CSV-файл со столбцом, содержащим описания книг, вырезанные из Интернета, которые я импортирую в R для дальнейшего анализа. Моя цель - извлечь возраст героев из этой колонки в R, так что я представляю себе следующее:
- Сопоставьте строки типа "age" и "-year-old" с регулярным выражением
- Скопируйте предложения, содержащие эти строки, в новый столбец (чтобы я мог убедиться, что предложение не соответствует этому, например "В средние века 50 человек жили в xy").
- Извлеките числа (и, если возможно, несколько числовых слов) из этого столбца в новый столбец.
Результирующая таблица (или, возможно, 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", чтобы указать нам, какое предложение вытащить, а затем извлекаем возраст, за которым следует эта строка.