R – 将提取的文本数据(每个实例为一行)导出到data.frame格式

我正在尝试从i个标准化的.txt文件中提取/导出i个标准化实例的文本,并将其转换为每个实例为一行的数据框。然后我想将这些数据导出为.xlsx文件。到目前为止,我可以成功提取数据(尽管算法提取的数据比gregexpr()参数规定的略多),但只能以文本块的形式导出为.txt文件。

  1. 如何创建一个数据框,其中每个提取的.txt文件的文本实例都有一行?(一旦数据处于data.frame格式,我知道如何从那里导出为xlsx。)
  2. 如何仅提取我设定的参数内的数据?

在帮助下(特别是来自此帖评论中的Ben),这是我目前所做的:

# Txt Data Formattxt 1 <-"A. The First:  abcdefg hijklmnop qrstuv wxyz. B. The Second: abcdefg hijklmnop qrstuv wxyz. C. The Third:  abcdefg hijklmnop qrstuv wxyz. D. The Fourth: abcdefg hijklmnop qrstuv wxyz. A. The First:  abcdefg hijklmnop qrstuv wxyz. B. The Second: abcdefg hijklmnop qrstuv wxyz. C. The Third:  abcdefg hijklmnop qrstuv wxyz. D. The Fourth: abcdefg hijklmnop qrstuv wxyz."txt 2 <-"A. The First:  abcdefg hijklmnop qrstuv wxyz. B. The Second: abcdefg hijklmnop qrstuv wxyz. C. The Third:  abcdefg hijklmnop qrstuv wxyz. D. The Fourth: abcdefg hijklmnop qrstuv wxyz. A. The First:  abcdefg hijklmnop qrstuv wxyz. B. The Second: abcdefg hijklmnop qrstuv wxyz. C. The Third:  abcdefg hijklmnop qrstuv wxyz. D. The Fourth: abcdefg hijklmnop qrstuv wxyz."################################## Directory and Text Extraction ##################################dest <- "C:/Desktop/"docs_text <- list.files(path = dest, pattern = "txt",  full.names = TRUE)## Assumes that all the content I want to extract is between "A." and "C." in ## the text while ignoring "C." and "D." content.docs_list <- list.files(path = dest, pattern = "txt",  full.names = TRUE)docs_doc <- lapply(docs_list, function(i) {  j <- paste0(scan(i, what = character()), collapse = " ")  regmatches(j, gregexpr("(?<=A. The First).*?(?=C. The Third)", j, perl=TRUE))})lapply(1:length(docs_doc),  function(i) write.table(docs_doc[i], file=paste(docs_list[i], " ", " ", sep="."), quote = FALSE, row.names = FALSE, col.names = FALSE, eol = " " ))

当前输出看起来像这样,其中所有文本都在一行上,并且捕获的内容超出了”A.”和”C.”之间的范围:

当前输出

期望的输出应如下所示,其中仅捕获”A.”和”C.”之间的多行文本,并且每个多行捕获被分配为一行实例:

期望输出

任何你能提供的帮助都将非常有用!

我最终的目标是开发一个NLP模型,能够从数百个大型PDF中提取标准化表格数据,用于年度存储库。如果此帖子表明我没有有效/高效地思考如何解决这个问题,我愿意接受指导。

提前感谢!


回答:

我使用dplyr来利用tibble对象的便利性和非常有效的bind_rows命令:

dest <- "~"docs_text <- list.files(path = dest, pattern = "txt",  full.names = TRUE)library(dplyr)docs_df <- lapply(docs_text, function(f) {  lines <- readLines(f)  tibble(    file = basename(f),    line = seq_along(lines),    text = lines  )  }) %>%   bind_rows()

一旦你有了正确的data.frame,使用filtergrepl来查找匹配的文本就很容易了。我使用正则表达式"^A.|^B."来查找以A.或B.开头的行:

docs_df %>%   filter(grepl("^A.|^B.", text))#> # A tibble: 8 x 3#>   file       line text                                         #>   <chr>     <int> <chr>                                        #> 1 txt_1.txt     1 A. The First:  abcdefg hijklmnop qrstuv wxyz.#> 2 txt_1.txt     2 B. The Second: abcdefg hijklmnop qrstuv wxyz.#> 3 txt_1.txt     6 A. The First:  abcdefg hijklmnop qrstuv wxyz.#> 4 txt_1.txt     7 B. The Second: abcdefg hijklmnop qrstuv wxyz.#> 5 txt_2.txt     1 A. The First:  abcdefg hijklmnop qrstuv wxyz.#> 6 txt_2.txt     2 B. The Second: abcdefg hijklmnop qrstuv wxyz.#> 7 txt_2.txt     6 A. The First:  abcdefg hijklmnop qrstuv wxyz.#> 8 txt_2.txt     7 B. The Second: abcdefg hijklmnop qrstuv wxyz.

对于导出到Excel,我推荐使用rio::export()

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注