首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:将ConceptNet5语法解析为数据帧

R:将ConceptNet5语法解析为数据帧
EN

Stack Overflow用户
提问于 2015-03-16 06:57:52
回答 1查看 98关注 0票数 2

我已经用grepgsub做了几个小时了,但我觉得我并没有真正正确地处理这个问题。

我正在使用一个令人惊奇的可公开使用的数据集ConceptNet5,它映射概念之间的连接(我在开放数据社区中找到了)。

文本编辑器读取“csv”文件中的数据时,如下所示:

代码语言:javascript
复制
/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,它如下所示

代码语言:javascript
复制
     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友好的格式,我将非常感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-16 07:26:21

您可以使用csv文件中的空格作为分隔符来读取read.table文件。这将为您提供一个包含许多列的数据框架。但是,除了第一列之外,您还可以丢弃每一列,因为第一列包含构建您在问题中提供的数据框架示例所需的所有信息。第一列的值如下所示:

代码语言:javascript
复制
/a/[/r/RelatedTo/,/c/en/port/,/c/en/on_coast/]

下面是要在csv文件中读取的代码:

代码语言:javascript
复制
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列的正则表达式:

代码语言:javascript
复制
data$assertion <- gsub("\\/a\\/\s*\\[\\/r\\/(.*)\\/\\,", "\\1", data$rawdata)

这个正则表达式将获取它在/a/[/r//,之间找到的所有内容,并将其存储到数据帧的assertion列中。

我会把它留给你作为家庭作业来处理其他专栏。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29071156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档