我有一些文本,我试图组织一些文本挖掘,并使用TidyText
库。我已经尝试将令牌设置为正则表达式并设置自定义模式,但它只返回括号(或什么都不返回),而不是括号的内容。
library(tidytext)
library(stringr)
df <- data.frame("text" = c("[instruction] [Mortgage][Show if Q1A5]Mortgage Loans","[checkboxes] [min 1] [max OFF] [Show if Q29A2] Please indicate the reason(s) you would not purchase this check package."), "line" = c(1,2))
un <- unnest_regex(df,elements,text,pattern = "\\[(.*?)\\]")
head(un)
line elements
1 1
2 1 mortgage loans
3 2
4 2
5 2
6 2 please indicate the reason(s) you would not purchase this check package.
un2 <- unnest_regex(df,elements,text,pattern = "(?<=\\[).+?(?=\\])")
head(un2)
line elements
1 1 [
2 1 ] [
3 1 ][
4 1 ]mortgage loans
5 2 [
6 2 ] [
我的最终目标是得到这个:
line elements
1 1 [instruction]
2 1 [Mortgage]
3 1 [Show if Q1A5]
4 2 [checkboxes]
5 2 [min 1]
6 2 [max OFF]
这可能吗?
2条答案
按热度按时间qvk1mo1f1#
这应该是可行的,虽然有点笨拙。其想法是使用stringr提取出括号中的所有内容,然后“分解”输出。由于它不是空格分隔的,因此在结束括号中分解,然后稍后将其添加回来。
产出
yqlxgs2m2#
我们可以在
Map
的帮助下,将gregexpr
文本从括号1中取出,然后将其放回括号中。