有一个文本列表 - sections
,需要通过以下方式分成sentences
:
> textList <- list(sections=sections[(length(sections)-2):length(sections)])
> textList$sentences <- sapply(textList$sections, function(x) strsplit(as.character(x), "(?<=und/KON)\\s(?!\\S+/V)|(?<=oder/KON)\\s|(?<=/\\$[[:punct:]])\\s(?!dass/KOUS)(?!dann/ADV)(?!weil/KOUS)", perl=TRUE))
> sent <- textList$sentences
最终目标是将ID
添加到所有sentences
并将它们一起排列到数据框列表中 - 与每个部分对应的数据框。
> sent.list <- lapply(seq_along(sent), function(i)
+ data.frame(ID=paste(sprintf("%02d", i), sprintf("%03d", seq_along(sent[[i]])), sep = ""),
+ Sentence=sent[[i]]))
Error in data.frame(ID = paste(sprintf("%02d", i), sprintf("%03d", seq_along(sent[[i]])), :
arguments imply differing number of rows: 1, 0
问题:但是我尝试在第一步中对分割进行变换,不知何故,似乎我得到的列表中只有一个character(0)
元素(最后一个)。这阻碍了执行第二步 - 创建数据帧列表 - 上面的错误。
请注意list
的结构似乎有些损坏。向下--R控制台复制 - 粘贴 - 前两个sections
开始(#*
)与$... #*
(顺便说一下。我无法解释有意义)。但是,第三部分(#**
)以[[3]]
开头。
> sent
$... #*
[1] "Das/ART Spiel/NN besteht/VVFIN aus/APPR mehreren/PIAT Früchten/NN -LRB-/TRUNC rote/ADJA Kirschen/NN ,/$,"
.
.
.
[51] "-RRB-/TRUNC sie/PPER bleiben/VVFIN die/ART ganze/ADJA Zeit/NN über/APPR konzetriert/ADJD bei/APPR der/ART Sache/NN ./$."
[52] "Das/ART Spiel/NN ist/VAFIN eine/ART absolue/ADJA Kaufempfehlung/NN !!!!/CARD "
$... #*
[1] "Obstgarten/NN ist/VAFIN DAS/NE Einsteigerspiel/NN für/APPR Kinder/NN ab/APPR zwei/CARD Jahren/NN ./$."
.
.
.
[36] "hochgelobten/ADJA Klassiker/NN werden/VAFIN lassen/VVINF kann/VMFIN ./$."
[[3]] #**
character(0)
我试图重现人工复制数据的错误而没有太大的成功。所以请原谅复杂的代码。
我可以在R控制台中执行时重现错误的textList
的最小版本:
> textList
$sections
[1] "Obstgarten/NN ist/VAFIN DAS/NE Einsteigerspiel/NN für/APPR Kinder/NN ab/APPR zwei/CARD Jahren/NN ./$. Preis/NN führt/VVFIN ,/$, aus/APPR einem/ART einfachen/ADJA Spiel/NN schnell/ADJD einen/ART hochwertigen/ADJA und/KON hochgelobten/ADJA Klassiker/NN werden/VAFIN lassen/VVINF kann/VMFIN ./$. "
[2] ""
关注包含最小版本dput
的{{1}}文件的内容,该文件会再现该示例。
textList
答案 0 :(得分:4)
只需删除长度等于0的元素:
sent <- unlist(sent,recursive=FALSE)
sent <- sent[lapply(sent,length)>0]
编辑 OP似乎在如何重现错误方面存在问题,我在这里展示如何重现错误:
使用此例如发送:
sent = list("a",character(0)) ## you get an error because of character(0)
lapply(seq_along(sent),
function(i)
data.frame(ID=paste(sprintf("%02d", i),
sprintf("%03d", seq_along(sent[[i]])), sep = ""),
Sentence=sent[[i]]))
重现错误:
Error in data.frame(ID = paste(sprintf("%02d", i), sprintf("%03d", seq_along(sent[[i]])), :
arguments imply differing number of rows: 1, 0