我正在使用文本挖掘包将一组PDF文档读成纯文本,我想将此明文导出为dataframe / CSV / text文件 (为了便于使用RTextTools进行进一步分析)
首先,我使用 tm 包将PDF文档拖入VCorpus。 tm包的VCorpus对象存储包含元数据和明文的“PlainTextDocument”和“TextDocument”对象的列表。即“元数据:DocumentName1”......和内容,“X的条款是......”。
library(tm)
docs <- VCorpus(DirSource(getwd()),readerControl = list(reader = readPDF))
# Creates large VCorpus containing ~700 PlainTextDocuments
# (which contain strings/character vectors)
不清楚如何将其处理成数据帧,因此我设法使用实用程序函数搜索包,将其转换为字符串列表。
library(textreg)
strings <- convert.tm.to.character(docs)
# Converts VCorpus to large list of strings with document content
从VCorpus或这个字符串列表中,我想创建一个只有一行的数据框,每行包含一个文档的文本,其列名对应于它们的原始文件名。
首先,我查看了此页Export a list into a CSV or TXT file in R,并尝试使用 sapply :
df <- data.frame(text = sapply(docs, as.character), stringsAsFactors = FALSE)
^Error during wrapup: arguments imply differing number of rows: 1, 5, 3, 3889, 3366
我也发现了相关的主题(R tm package vcorpus: Error in converting corpus to data frame),但发现它们很难,因为它们倾向于使用更简单的语料库对象。
有没有更简单的方法可以将我的字符串列表或VCorpus转换为数据帧,比如使用dplyr / tidyr / purrr?
任何关于改进我的黑客攻击解决方案的建议都非常赞赏。
我的列表中的每个元素都包含一个字符串(/ chr向量),其中包含文本中的完整文档。例如,
strings[3]
产生此输出
[16]“目录”
[17]“Page”
[18]“”
[19]“缔约方”
[20]“”
[21]“5”
。
。
[379]“'Affiliate'表示:”
[380]“(a)”
[381]“”
[382]“任何一方直接或间接持有绝对”的公司或任何其他实体
[383]“股东大会上的多数票,或是超过百分之五十(50%)权利的持有人”
[384]“和赋予该公司或实体管理权力或具有”权力“的权益
[385]“管理和控制该公司或实体;”
答案 0 :(得分:0)
这应该可以解决问题:
#dummy data generation: file names and a list of strings (your corpus)
files <- paste("file", 1:6)
strings <- list("a","b","c", "d","e","f")
names(strings) <-files
t(as.data.frame(unlist(strings)))
# file 1 file 2 file 3 file 4 file 5 file 6
# unlist(strings) "a" "b" "c" "d" "e" "f"
files <- paste("file", 1:6)
strings <- list(c("a","b"),c("c", "d"),c("e","f"),
c("g","h"), c("i","j"), c("k", "l"))
names(strings) <-files
t(data.frame(Doc=sapply(strings, paste0, collapse = " ")))
# file 1 file 2 file 3 file 4 file 5 file 6
# Doc "a b" "c d" "e f" "g h" "i j" "k l"