【问题标题】:how to extract text from PDF between some patterns如何在某些模式之间从 PDF 中提取文本
【发布时间】:2020-11-03 20:21:30
【问题描述】:

我有数千份 PDF 格式的文档(德文)。我需要从每个文本中提取一部分文本,这些文本通常在日期之后并在日期、位置、地址信息之前结束,几乎在页面末尾。附上一个例子。我需要的文本被突出显示。

到目前为止我尝试的是qdapRegex::rm_between

library(pdftools)
library(qdapRegex)
t1 <- pdf_text("textsample.pdf")
textIneed <- rm_between(t1, "Datum", ", den" )

这不起作用。输出是整个文本内容,包括名称、Vorame 等(我可以在开始时接受 20.01.2019 的日期。)我做错了什么我不清楚,因为我是 regex 和 nlp 的新手,不能在阅读rm_betweenqdapRegex 的文档时发现它。

我的第一个问题是让它工作。

进一步的问题是,这些文档不是标准的,并且某些文档可能有其他类型的信息,例如,Ref:1234 而不是突出显示区域之前的日期。这篇文章可以在文档的任何页码中找到,因此不能选择准确的页码。

是否有任何其他解决方案、库等可用于或多或少地提取这部分文本?

【问题讨论】:

  • 你想要的所有段落是否都从页面上的某个高度开始,或者也可以改变?
  • 也可以变化。
  • 您可以尝试使用我的 PDF 文本提取包,使用 devtools::install_github("https://github.com/AllanCameron/PDFR")。如果您使用PDFR::pdfdoc(),这应该为您单独提取段落,您可以根据字体、位置、长度等过滤它们。
  • 试试textIneed &lt;- rm_between(paste(t1, collapse="\n"), "Datum", ", den" )
  • 非常感谢。我试过这个@Wiktor Stribizew,但结果还是一样。

标签: python r regex nlp


【解决方案1】:

我认为对此没有一个很好的简单答案。使用正则表达式可以捕获介于两者之间的文本,但如果您有多个或复杂的模式要匹配,则表达式可能会变得非常复杂。让我们举个简单的例子,使用一些虚拟的德语文本,并期望您想要获取日期(格式为 dd.mm.yyyy 或 dd.mm.yy)或 ref:[at least one digit] 和 ", den XX " 但不包括之前的最后一个单词(位置)。

我将使用stringr 包:

# generate some text (with new lines)
t1 <- c("Du möchtest also den Text zwischen dem Datum 13.07.2020
        am Anfang und den Ort bzw. Datum am Ende extrahieren.
        Freiburg, den 13. Juli 2020",
        "Oder den Text nach einem ref:384 übernehmen bis zum Datum am Ende.
        Freiburg, den 13. Juli 2020")

# extract the parts
textIneed <- stringr::str_match(t1,
"(?:\\d{2}\\.\\d{2}.\\d{2,4}|ref:\\d+)((.|\n)*)\\s\\w+, den \\d{1,2}")[,2]

# trim white space
# (this could be done before extraction too, to simplify the text)
trimws(textIneed)
#> [1] "am Anfang und den Ort bzw. Datum am Ende extrahieren."
#> [2] "übernehmen bis zum Datum am Ende."

我在这里所做的是将第一个元素与(?:\\d{2}\\.\\d{2}.\\d{2,4}|ref:\\d+) 匹配,然后捕获所有内容,包括((.|\n)*) 之间的新行,但不是, den \\d{1,2} 之前的最后一个单词\\s\\w+

要学习正则表达式,可以使用多种资源,例如 RegexOne

【讨论】:

    猜你喜欢
    • 2019-02-06
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多