我正在使用(带有openNLP的R)从给定语句中提取数值数据。
声明为"The room temperature is 37 to 39 C. The Air flow is near 80 cfm".
此处为预期输出"Temperature > 37 - 39c",
"Air flow -> 80cfm"
。
你能否在POS标签上建议任何正则表达式模式来获取Noun(NN)和下一个可用数字数据(CD)?
是否有其他方法可以提取类似数据?
答案 0 :(得分:0)
从自然文本中提取数据很难!我希望这个解决方案能够很快打破。但这是一个让你入门的方法。你没有提供整个标记的句子,所以我插入了自己的标签。您可能需要为标记集更改此设置。此代码既不高效也不向量化,只适用于单个字符串。
library(stringr)
text <- "The_DT room_NN temperature_NN is_VBZ 37_CD to_PRP 39_CD C_NNU. The_DT Air_NN flow_NN is_VBZ near_ADV 80_CD cfm_NNU"
# find the positions where a Number appears; it may be followed by prepositions, units and other numbers
matches <- gregexpr("(\\w+_CD)+(\\s+\\w+_(NNU|PRP|CD))*", text, perl=TRUE)
mapply(function(position, length) {
# extract all NN sequences
nouns <- text %>% str_sub(start = 1, end = position) %>%
str_extract_all("\\w+_NN(\\s+\\w+_NN)*")
# get Numbers
nums <- text %>% str_sub(start=position, end = position + length)
# format output string
result <- paste(tail(nouns[[1]], n=1), nums, sep = " > ")
# clean tags
gsub("_\\w+", "", result)
}, matches[[1]], attr(matches[[1]], "match.length"))
# output: [1] "room temperature > 37 to 39 C." "Air flow > 80 cfm"
答案 1 :(得分:0)
也许你可以从下面的方法开始。希望这有帮助!
[1] "temperature 37 to 39 C. flow 80 cfm"
输出是:
{{1}}