我的目标最终是建立一个分类器 - 类似垃圾邮件检测器。
我不确定如何阅读包含将提供分类器并将其存储到数据帧的文本的文本文件。
假设我已经组装了文件夹文本文件 - 原始文本最初存储在记事本中,然后从txt文件中保存 - 其名称表示其内容,例如xx_xx_xx__yyyyyyyyyyy_zzzzz,其中xx将是表示日期的数字,yyyyyyyyy将是表示主题的字符串,zzzz将是表示源的字符串。 yyyyyyyyyyy和zzzzzzz的长度各不相同。
我的目标是创建一个循环文件,读取它们,将其名称中包含的信息存储在数据框的单独列中的函数 - 例如。 “日期”,“主题”,“来源” - 以及第四栏中的文字内容(例如“内容”)。
有关如何实现这一目标的任何想法?
您的建议将不胜感激。
答案 0 :(得分:0)
嗨,这是一个可能的答案,我将结果存储在列表而不是数据框中,但您可以使用do.call(rbind.data.frame,result)将结果从一个转换为另一个
require(stringr)
datawd<-"C:/my/path/to/folder/" # your data directory
listoffiles<-list.files(str_c(datawd)) # list of files
listoffiles<-listoffiles[grep(".txt",listoffiles)] # only extract .txt files
my_paths<-str_c(datawd,listoffiles) # vector of path
# the following works with windows only
progress<-winProgressBar(title = "loading text files",
label = "progression %",
min = 0,
max = length(my_paths),
initial = 0,
width = 400)
#000000000000000000000000000000000000000 loop
for (i in 1:length(chemins)){
result<-list()
setWinProgressBar(progress,i,label=listoffiles[i])
the_date<-sapply(strsplit(listoffiles[i],"_"),"[[",1)
the_theme<-sapply(strsplit(listoffiles[i],"_"),"[[",2)
the_source<-sapply(strsplit(listoffiles[i],"_"),"[[",3)
# open connexion with read
con <- file(my_paths[i], open = "r")
# readlines returns an element per line, here I'm concatenating all,
#you will do what you need....
the_text<- str_c(readLines(con,warn = FALSE))
close(con) # closing the connexion
result[[i]]<-list()
result[[i]]["date"]<-the_date
result[[i]]["source"]<-the_source
result[[i]]["theme"]<-the_theme
result[[i]]["text"]<-the_text
}
#000000000000000000000000000000000000000 end loop