音节化和正则表达式问题

Issue with syllabification and regex

我有一个 pdf 文件,正在以文本形式阅读。

我遇到的问题与数字之间的音节化有关。

Link 至 file github。

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

我假设正则表达式无法组合来自不同行的元素。但我不确定如何修复它。

非常感谢任何帮助。

尝试以下操作:

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 – Скопје. __________ судија Артан 
Лимани, објавув....

希望您现在拥有克服这个问题的工具。

这与正则表达式无关;相反,它与您的 PDF 在被 OCR 识别后的呈现方式有关。 PDF 中的文本未收集到列中,因此第二列的文本插入第一列,并在它们之间填充空格。导入后您的示例字符串如下所示:

на постапка над стечајниот должник Друштво за трго-      АД Скопје и број 250000000176263 во Шпаркасе банка
вија на големо и мало и услуги АНИТОМ ДООЕЛ              Македонија АД Скопје.
увоз-извоз Гостивар, со жиро-сметка бр. 530000101378-        Стечајната постапка се отвора на ден 6.7.2017 годи-
659, која се води во Охридска банка АД Скопје, со ЕДБ    на во 12:00 часот.
4007011510476 и ЕМБС 6677754.                                За стечаен управник се именува Пепи Страшо Па-

因此,我认为不可能编写一个正则表达式来按原样解析它。

我的解析方式是将 pdf 文本重新解析为固定宽度的文件。这将创建一个包含两列的数据框,然后可以使用正则表达式分别对其进行解析。