R:将 ConceptNet5 语法解析为数据框
R: Parsing ConceptNet5 syntax into Data frame
我已经用 grep
和 gsub
研究了几个小时,但我觉得我没有真正正确地解决这个问题。
我正在使用一个惊人的公开数据集 ConceptNet5 which maps connection between concepts (which I found on the Open Data 社区)。
'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]]
With /a/
表示在 [,,]
中找到的断言包含三个元素的断言。 /r/
指'language-independent relations',/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 友好格式,我将不胜感激。
您可以使用 read.table
以 space 作为分隔符来读取 csv
文件。这将为您提供一个包含多列的数据框。但是,您可以丢弃除第一列以外的每一列,因为第一列包含构建您在问题中提供的数据框示例所需的所有信息。第一列的值如下所示:
/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
列中。
我会把它留给你作为作业来处理其他专栏。
我已经用 grep
和 gsub
研究了几个小时,但我觉得我没有真正正确地解决这个问题。
我正在使用一个惊人的公开数据集 ConceptNet5 which maps connection between concepts (which I found on the Open Data 社区)。
'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]]
With /a/
表示在 [,,]
中找到的断言包含三个元素的断言。 /r/
指'language-independent relations',/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 友好格式,我将不胜感激。
您可以使用 read.table
以 space 作为分隔符来读取 csv
文件。这将为您提供一个包含多列的数据框。但是,您可以丢弃除第一列以外的每一列,因为第一列包含构建您在问题中提供的数据框示例所需的所有信息。第一列的值如下所示:
/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
列中。
我会把它留给你作为作业来处理其他专栏。