关系三元组提取中的R - TM,stringr,Perl的正则表达式
问题描述:
在从文本本体学习的情况下,假设我有两个概念,我很感兴趣,它们之间的关系:关系三元组提取中的R - TM,stringr,Perl的正则表达式
class <- c(animal.class, dog.class)
individual <- "Snoopy"
animal.class <- c("animal", "animals")
dog.class <- c("dog", "dogs")
sentence1 <- "Snoopy is an animal."
sentence2 <- "Snoopy is a dog."
如何提取与R的语言上下文和语义关系,以便我可以收集数据帧,而不必具有之前定义的上下文/关系(“是(n)”)。
data.frame(CLASS1="animal",CLASS2="Snoopy",context="CLASS2 is an CLASS1")
data.frame(CLASS1="dog",CLASS2="Snoopy",context="CLASS2 is a CLASS1")
可以很容易地提取这种与像有限状态转换器等工具的事情,但我想留在R和我没有R.
发现这样的事情的时刻我想象一下使用perl正则表达式的一些解决方案以及包tm
和stringr
......它们足够吗?
答
我不完全确定你在做什么。这是我想什么办法,我认为你是后:
sentences <- c(
"Snoopy is an animal.",
"Snoopy is a dog.",
"Snoopy likes chocolate!",
"Goofy is a dog"
)
if (!require("pacman")) install.packages("pacman")
pacman::p_load(qdapRegex, dplyr, tidyr)
(out <- rm_default(sentences, pattern = S("@around_", 1, "is a(n*)", 1), extract=TRUE) %>%
unlist %>%
sub("\\s+", "<SPLIT>", .) %>%
data_frame(new = .) %>%
na.omit %>%
separate(new, c("CLASS2", "context", "CLASS1"), sep = "(<SPLIT>)|((?=[^ ]+$))") %>%
mutate(context = sprintf("CLASS 2 %s CLASS 1", context)) %>%
select(c(1, 3, 2)))
## CLASS2 CLASS1 context
## 1 Snoopy animal CLASS 2 is an CLASS 1
## 2 Snoopy dog CLASS 2 is a CLASS 1
## 3 Goofy dog CLASS 2 is a CLASS 1
然后拉出各种类别的具体情况对管道的末端使用filter
:
out %>%
filter(grepl("[Ss]noopy", CLASS2))
## CLASS2 CLASS1 context
## 1 Snoopy animal CLASS 2 is an CLASS 1
## 2 Snoopy dog CLASS 2 is a CLASS 1
out %>%
filter(grepl("[Dd]og", CLASS1))
## CLASS2 CLASS1 context
## 1 Snoopy dog CLASS 2 is a CLASS 1
## 2 Goofy dog CLASS 2 is a CLASS 1
目前还不清楚会是什么是可用的数据,预期的结果是什么。你想扣除给定的一些句子的课程,或生成给定类的句子?要么...? – 2015-04-06 05:39:25
Tyler Rinker的qdap包可能有所帮助。 – lawyeR 2015-04-06 11:04:04
@DominicComtois:可用的数据是句子或语料库。 NLTK(Python)有一个特定的功能:http://www.nltk.org/_modules/nltk/sem/relextract.html – 2015-04-06 12:33:06