我有一个pdf文件,我正在阅读作为文本。
我遇到的问题与数字之间发生的音节化有关。
链接到github上的file。
library(pdftools)
library(tidytext)
library(readxl)
library(dplyr)
setwd("~/Automation - Official Guazzete")
path <- getwd()
pdf_file <- file.path(path, "stecajni_postapki.pdf")
test <- pdf_text(pdf_file)
如果你搜索文件,你会看到例如530000101378- 659.这应该是单个数字 530000101378659 。
我尝试过不同的正则表达式版本,但都失败了。
test <- gsub("-", "", test) #try 1
test <- gsub("-\r\n+", "", test) #try 2
test <- gsub("-\\n+", "", test) #try 3
这是剩下的代码:
text_df <- data_frame(line = 1:5, text = test)
p <- text_df %>%
unnest_tokens(word, text)
count <- p %>%
count(word, sort = TRUE)
在每个实例中,count中的输出是两个单独的单词
1. 530000101378
2. 659
我认为正则表达式在组合来自不同行的元素时失败了。但我不知道如何解决它。
非常感谢任何帮助。
答案 0 :(得分:3)
尝试以下方法:
gsub("(\\d)-(\\d)", "\\1\\2", "530000101378-659")
在两个数字之间匹配-
并将其替换为数字。这不会删除位于其他位置的-
。
()
- 括号表示捕获组
\\d
- 号码
(\\d)-(\\d)
- 第一个捕获组是“ - ”之前的数字。第二个捕获组是“ - ”之后的数字
\\1 - \\9
引用捕获的组,我们在此示例中有两个。
test <- c("530000101378-659", "2-53", "2777-a", "brb - 27")
gsub("(\\d)-(\\d)", "\\1\\2", test)
#output: [1] "530000101378659" "253" "2777-a" "brb - 27"
编辑:这不适用于您的PDF,因为它按原样呈现(查看Mike Stanley的回答)
即使我们这样做:
test = gsub("[\r\n]", "", test)
test = gsub("(\\d)-.*?(\\d)", "\\1\\2", test)
替换: - 以及任意数量的字符,直到第一个下一个数字,我们将无法100%恢复:
test[4]
"....со жиро-сметка бр. 5300001013786.7.2017 годи-659, која се води в..."
这是一种解决方法:
test <- pdf_text(pdf_file)
test = gsub("[\r\n]", " ", test)
list = strsplit(test, " {2,}") #split anywhere where there are 2 or more consecutive spaces - hopefully only between two paragraphs (if not the output wont make much sense)
resi = lapply(list, function(x) {
unl = unlist(x)
len = length(x)
uneven = seq(from = 1, to = len , by =2)
even = seq(from = 2, to = len , by =2)
uneven = unl[uneven]
even = unl[even]
uneven = paste(uneven, collapse = " ")
even = paste(even, collapse = " ") #intentionally leave a space between them, one could even use something that is not expected to occur in the document like "frafrafra" and use that in the gsub call later as gsub("(\\d)-frafrafra(\\d)", "\\1\\2", resi)
return(cbind(uneven, even))
}) #separate even from uneven rows
resi = unlist(resi)
resi = gsub("(\\d)- (\\d)", "\\1\\2", resi) #clean numbers
resi = gsub("(\\b)- (\\b)", "\\1\\2", resi) #clean words
resi[8] # instead of 4 since we split even and odd rows
[1] "10 јули 2017 Извод од Решението да се објави во „Сл. весник на РМ“ и на
огласната табла на судот. Се налага на Прокредит банка АД Скопје и на Охридска
банка АД Охрид како институција што вршеле платен промет за субјектот, по
приемот на ова Решение доколку на жиро-сметката на субјектот се наоѓаат средства
и тие да се префрлат на жиро-сметка на Буџетските средства на РМ – Трезорска
сметка при НБРМ на трансакциона сметка 10000000063095, сметка на Буџетски
корисник бр. 630010001963019, приходна шифра (34168) ___________ Против
погоренаведеното Решение, доверителите имаат право на жалба преку овој суд до
Апелациониот суд во Гостивар, во рок од 8 дена од објавувањето на Решението во
„Сл. весник на РМ“. По правосилноста на Решението, должникот ќе се брише од
Трговскиот регистар што се води при Централниот регистар на РМ – Регионална
регистрациона канцеларија – Тетово. (34165) __________ гледување на грозје, со
трансакциски сметки број 200000036020069 во Стопанска банка АД Скопје, број на
постапка над стечајниот должник Друштво за трговија на големо и мало и услуги
АНИТОМ ДООЕЛ увоз-извоз Гостивар, со жиро-сметка бр. 530000101378659, која се
води во Охридска банка АД Скопје, со ЕДБ 4007011510476 и ЕМБС 6677754.
Стечајната постапка не се спроведува поради немање имот и се заклучува. Против
погоренаведеното Решение, дозволена е жалба преку Основниот суд во Гостивар до
Апелациониот суд во Гостивар, во рок од 8 дена од денот на објатано од денот на
објавувањето на Решението во „Службен весник на Република Македонија“, да ги
пријават (34166) __________ на подвижни предмети и права на должникот, како и
разлачните права на недвижностите на должникот што не се запишани во јавните
книги и разлачните права на недвижностите на должникот што се запишани во
јавните книги, своите разлачни права на подвижните предмети и на правата на
должникот што се запишани во регистрите во кои тие предмети, односно права се
запишани да ги пријават кај стечајниот управник во рок од 15 Седницата на
Собранието на доверители ќе се одржи во Основниот суд во Велес на ден 14.7.2017
година, во 10:30 часот, во судница бр. 7 на II кат, на Осна кои предмети постои
разлачно право, начинот и основот на засновање на тоа право, како и средствата
за ДНЕВЕН РЕД своите обврски што ги имаат спрема должникот да ги исполнат на
стечајниот управник. Се закажува рочиште за испитување и утврдување (34167)
__________ ца бр. 3 во Основниот суд во Штип. Се закажува Собрание на доверители
на кое врз основа на извештајот на стечајниот управник, ќе се одлучува за
натамошниот тек на стечајната постапка (Извештајно собрание) за 12.10.2017
година со почеток во 12:00 часот, во судница бр. 3 во Основниот суд во Штип.
Отворањето на стечајната постапка да се запише во Трговскиот регистар при
Централниот регистар на РМ, во јавните книги во кои се запишани правата врз
недвижностите и во други соодветни регистри. Ова Решение да се објави на
огласната табла на Основниот суд во Штип и во „Службен весник на РМ“.
然而由于这个原因,第一页(resi [1]和resi [2])搞砸了,因为它只有一个段落:
resi[1]
[1] "10 јули 2017 Стечајни постапки Основниот суд Скопје II – Скопје преку
стечајниот управник Ѓорѓе Костов, објавува дека со Решение 2 постапка над
должникот Друштво за производство, трка сметка 300000000744414 при Комерцијална
банка 4854217 и единствен даночен број 4030003477097 и давници претежно со храна
и пијалаци и тутун. ње имот и се заклучува. регистар на РМ, во „Службен весник
на РМ“ и на огласОд Основен суд Скопје II – Скопје. __________ судија Артан
Лимани, објавув....
希望你现在有了解决这个问题的工具。
答案 1 :(得分:2)
这与正则表达式无关;相反,它与你的PDF被OCR后如何呈现的方式有关。 PDF中的文本不会收集到列中,因此第二列的文本将使用第一列进行插值,并在它们之间填充空格。您的示例字符串在导入后如下所示:
на постапка над стечајниот должник Друштво за трго- АД Скопје и број 250000000176263 во Шпаркасе банка
вија на големо и мало и услуги АНИТОМ ДООЕЛ Македонија АД Скопје.
увоз-извоз Гостивар, со жиро-сметка бр. 530000101378- Стечајната постапка се отвора на ден 6.7.2017 годи-
659, која се води во Охридска банка АД Скопје, со ЕДБ на во 12:00 часот.
4007011510476 и ЕМБС 6677754. За стечаен управник се именува Пепи Страшо Па-
因此,我不相信可以编写正则表达式来按原样解析它。
我将解析这个问题的方法是将pdf文本重新解析为固定宽度文件。这将创建一个包含两列的数据框,然后可以使用正则表达式单独解析。