如何使用R解析亚马逊产品元数据并生成指定格式CSV导入数据框
R 实现亚马逊产品元数据转换为结构化DataFrame教程
这类半结构化文本以产品Id为单位分块存储,我们只需要先按块拆分数据、跳过已下架产品、再逐块提取目标字段即可,完整实现步骤如下:
步骤1:读取原始文本文件
# 读取原始元数据文件,按行存储 raw_lines <- readLines("你的元数据文件存储路径.txt", warn = FALSE) # 过滤空行,避免后续拆分出错 raw_lines <- raw_lines[raw_lines != ""]
步骤2:按产品拆分文本块
# 定位所有产品块的起始行(即Id行的位置) id_pos <- which(startsWith(trimws(raw_lines), "Id: ")) # 拆分得到每个产品对应的所有行内容 product_blocks <- lapply(seq_along(id_pos), function(i) { start <- id_pos[i] end <- ifelse(i == length(id_pos), length(raw_lines), id_pos[i+1] - 1) raw_lines[start:end] })
步骤3:逐块提取目标字段
我们需要提取的字段为id、title、group、salesrank、review_cnt(总评论数)、downloads(已下载评论数)、rating(平均评分):
# 初始化结果存储列表 result <- list() for (block in product_blocks) { # 跳过已下架的产品 if (any(grepl("discontinued product", block, fixed = TRUE))) next # 提取产品id id_line <- block[startsWith(trimws(block), "Id:")] id <- as.integer(trimws(sub("Id:\\s*", "", id_line))) # 提取产品标题 title_line <- block[startsWith(trimws(block), "title:")] title <- trimws(sub("title:\\s*", "", title_line)) # 提取产品类别 group_line <- block[startsWith(trimws(block), "group:")] group <- trimws(sub("group:\\s*", "", group_line)) # 提取销售排名 salesrank_line <- block[startsWith(trimws(block), "salesrank:")] salesrank <- as.integer(trimws(sub("salesrank:\\s*", "", salesrank_line))) # 提取评论相关字段 review_line <- block[startsWith(trimws(block), "reviews:")] review_info <- strsplit(trimws(review_line), "\\s+")[[1]] review_cnt <- as.integer(review_info[3]) downloads <- as.integer(review_info[5]) rating <- as.numeric(review_info[8]) # 存入结果列表 result[[length(result)+1]] <- data.frame( id = id, title = title, group = group, salesrank = salesrank, review_cnt = review_cnt, downloads = downloads, rating = rating, stringsAsFactors = FALSE ) } # 合并为最终的DataFrame final_df <- do.call(rbind, result)
步骤4:导出为CSV(可选)
如果需要导出为你示例中的CSV格式,可执行以下代码:
write.csv(final_df, "亚马逊产品元数据.csv", row.names = FALSE, quote = TRUE)
注意事项:如果你的原始文件存在字段缺失的情况,可在提取逻辑中增加空值判断,避免运行报错;如果需要提取ASIN、同类产品、分类、单条评论等更多字段,在现有提取逻辑中新增对应匹配规则即可
内容的提问来源于stack exchange,提问作者user11626803
相关产品推荐
相关产品推荐

