R语言处理亚马逊商品数据:提取[前文本及解决冗余字符与文件适配问题
问题分析与解决方案
你遇到的两个核心问题:多余的c字符是因为对列表直接做字符串处理导致的;批量处理文件则需要精准提取每行的ASIN和分类信息,再统一格式化。下面分步解决:
1. 解决多余的c字符问题
str_split返回的是列表类型,直接对列表用gsub会把R的列表默认打印格式(比如c()也包含进去。正确的做法是先提取列表中的向量元素,再做后续处理:
library(stringr) line <- "|Books[283155]|Subjects[1000]|Religion & 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, "&", "&") 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, "&", "&") # 组合成目标格式的向量 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
相关产品推荐
相关产品推荐

