我已经用grep和gsub做了几个小时了,但我觉得我并没有真正正确地处理这个问题。
我正在使用一个令人惊奇的可公开使用的数据集ConceptNet5,它映射概念之间的连接(我在开放数据社区中找到了)。
文本编辑器读取“csv”文件中的数据时,如下所示:
/a/[/r/RelatedTo/,/c/en/port/,/c/en/on_coast/] /r/RelatedTo /c/en/port /c/en/on_coast /ctx/all 0.02592754036220567 /s/site/verbosity /e/4251f811726a5bc2d5c37636e6d9323b1d1f0d97 /d/verbosity [[port]] is related to [[on coast]]
/a/[/r/RelatedTo/,/c/en/port/,/c/en/ship_offload/] /r/RelatedTo /c/en/port /c/en/ship_offload /ctx/all 0.04264433740849372 /s/site/verbosity /e/0756f548fdcf0f2534719cce5c19f514cc32c037 /d/verbosity [[port]] is related to [[ships offload]]
/a/ [/r/RelatedTo/,/c/en/port/,/c/en/wooden/] /r/RelatedTo /c/en/port /c/en/wooden /ctx/all 0.01010845347428868 /s/site/verbosity /e/f95913c8a1c1263b494bdda44c12a3c50d025c8b /d/verbosity [[port]] is related to [[wooden]]使用/a/表示在[,,]中找到的断言有三个元素。/r/指的是‘语言独立关系’、/c/概念、/en/英语以及/port/和/on_coast/。如我所能理解的,这里第一行的意思是表达港口与海岸相关的断言。
为了使该数据在R中易于处理,我希望将其转换为一个dataframe,它如下所示
assertion subject object lang1 lang2
[1] RelatedTo port on_coast en en
[2] RelatedTo port ship_offload en en
[3] RelatedTo port wooden en en如果您滚动到数据的右侧,那么断言信息的表示似乎是相同的。我不知道这是干什么用的。还有一些关于断言/s/的来源的其他信息。我想我不需要这些信息。
如果有人能为我指出正确的方向,如何将这些数据转换成一个R友好的格式,我将非常感激。
发布于 2015-03-16 07:26:21
您可以使用csv文件中的空格作为分隔符来读取read.table文件。这将为您提供一个包含许多列的数据框架。但是,除了第一列之外,您还可以丢弃每一列,因为第一列包含构建您在问题中提供的数据框架示例所需的所有信息。第一列的值如下所示:
/a/[/r/RelatedTo/,/c/en/port/,/c/en/on_coast/]下面是要在csv文件中读取的代码:
data <- read.table("datafile.csv",
header=FALSE,
sep= "") # delimeter is any amount of whitespace
data <- data[, 1] # retain only the first column
colnames(data) <- c("rawdata") # rename first column要提取出最终数据框架所需的信息,需要在数据框架data的第一列上使用正则表达式。下面是一个用于提取assertion列的正则表达式:
data$assertion <- gsub("\\/a\\/\s*\\[\\/r\\/(.*)\\/\\,", "\\1", data$rawdata)这个正则表达式将获取它在/a/[/r/和/,之间找到的所有内容,并将其存储到数据帧的assertion列中。
我会把它留给你作为家庭作业来处理其他专栏。
https://stackoverflow.com/questions/29071156
复制相似问题