You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言处理亚马逊商品数据:提取[前文本及解决冗余字符与文件适配问题

问题分析与解决方案

你遇到的两个核心问题:多余的c字符是因为对列表直接做字符串处理导致的;批量处理文件则需要精准提取每行的ASIN和分类信息,再统一格式化。下面分步解决:


1. 解决多余的c字符问题

str_split返回的是列表类型,直接对列表用gsub会把R的列表默认打印格式(比如c()也包含进去。正确的做法是先提取列表中的向量元素,再做后续处理:

library(stringr)
line <- "|Books[283155]|Subjects[1000]|Religion &amp; Spirituality[22]|Christianity[12290]|Clergy[12360]|Preaching[12368]"

# 提取列表中的向量,过滤空字符串
x <- str_split(line, fixed("|"))[[1]]
x <- x[x != ""]

# 精准删除[数字]格式的内容,保留&符号
ans <- gsub("\\[\\d+\\]", "", x)
ans <- str_replace_all(ans, "&amp;", "&")

ans
# 输出结果:
# [1] "Books"                  "Subjects"               "Religion & Spirituality"
# [4] "Christianity"           "Clergy"                 "Preaching"

这里用\\[\\d+\\]精准匹配删除[数字]格式的内容,比替换所有标点更稳妥,避免误删&这类需要保留的符号。


2. 批量处理整个亚马逊商品文件

要处理整个文件,需要循环每行提取ASIN、分类信息,再统一格式化输出。完整代码如下:

library(stringr)

# 读取文件
products <- readLines("https://raw.githubusercontent.com/pranavn91/PhD/master/Expt/amazon.txt")

# 定义处理单行数据的函数
process_single_line <- function(line) {
  # 提取ASIN
  asin <- str_extract(line, "ASIN: ([A-Z0-9]+)", group = 1)
  if (is.na(asin)) return(NULL)
  
  # 提取categories部分
  cat_raw <- str_extract(line, "categories: \\d+ \\|(.+)\\| reviews:")
  if (is.na(cat_raw)) return(NULL)
  
  # 清理分类字符串的前后无关内容
  cat_clean <- str_remove(cat_raw, "categories: \\d+ \\|")
  cat_clean <- str_remove(cat_clean, "\\| reviews:")
  
  # 分割并处理分类项
  categories <- str_split(cat_clean, fixed("|"))[[1]]
  categories <- categories[categories != ""]
  categories <- gsub("\\[\\d+\\]", "", categories)
  categories <- str_replace_all(categories, "&amp;", "&")
  
  # 组合成目标格式的向量
  c(asin, categories)
}

# 处理所有行,过滤无效数据
processed_rows <- lapply(products, process_single_line)
processed_rows <- Filter(Negate(is.null), processed_rows)

# 生成表头(根据最长分类数自动生成V1-Vn)
max_col_count <- max(sapply(processed_rows, length))
header <- c("ASIN", paste0("V", 1:(max_col_count - 1)))
cat(paste(header, collapse = " "), "\n")

# 输出每一行数据
for (row in processed_rows) {
  # 分类数不足时补空(可选,按需调整)
  row <- c(row, rep("", max_col_count - length(row)))
  cat(paste(row, collapse = " "), "\n")
}

关键细节说明

  • 精准字段提取:用str_extract配合正则表达式,准确抓取ASIN和分类内容,避免分割整行字符串带来的混乱。
  • 异常处理:跳过没有ASIN或分类的无效行,避免运行报错。
  • 格式统一:根据最长的分类数量自动生成表头,确保输出格式和你期望的完全一致。

内容的提问来源于stack exchange,提问作者pranav nerurkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:56:14