Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 音节化和正则表达式问题_R_Regex_String_Stringi_Tidytext - Fatal编程技术网

R 音节化和正则表达式问题

R 音节化和正则表达式问题,r,regex,string,stringi,tidytext,R,Regex,String,Stringi,Tidytext,我有一个pdf文件,我正在阅读作为文本 我遇到的问题与数字之间的音节有关 链接到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_

我有一个pdf文件,我正在阅读作为文本

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

链接到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)
我假设正则表达式无法组合来自不同行的元素。但我不知道如何修复它

非常感谢您的帮助

尝试以下操作:

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"  
替换:-和任何数量的字符,直到下一个第一个数字,我们将无法获得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 во Основниот суд во Штип. 
Отворањето на стечајната постапка да се запише во Трговскиот регистар при 
Централниот регистар на РМ, во јавните книги во кои се запишани правата врз 
недвижностите и во други соодветни регистри. Ова Решение да се објави на 
огласната табла на Основниот суд во Штип и во „Службен весник на РМ“.
希望您现在拥有克服这一问题的工具。

尝试以下方法:

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"  
替换:-和任何数量的字符,直到下一个第一个数字,我们将无法获得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 во Основниот суд во Штип. 
Отворањето на стечајната постапка да се запише во Трговскиот регистар при 
Централниот регистар на РМ, во јавните книги во кои се запишани правата врз 
недвижностите и во други соодветни регистри. Ова Решение да се објави на 
огласната табла на Основниот суд во Штип и во „Службен весник на РМ“.

希望您现在有了克服这一问题的工具。

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

на постапка над стечајниот должник Друштво за трго-      АД Скопје и број 250000000176263 во Шпаркасе банка
вија на големо и мало и услуги АНИТОМ ДООЕЛ              Македонија АД Скопје.
увоз-извоз Гостивар, со жиро-сметка бр. 530000101378-        Стечајната постапка се отвора на ден 6.7.2017 годи-
659, која се води во Охридска банка АД Скопје, со ЕДБ    на во 12:00 часот.
4007011510476 и ЕМБС 6677754.                                За стечаен управник се именува Пепи Страшо Па-
因此,我认为不可能编写一个正则表达式来按原样解析它


我解析它的方法是将pdf文本重新解析为一个固定宽度的文件。这将创建一个包含两列的数据帧,然后可以使用regex单独解析这些列。

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

на постапка над стечајниот должник Друштво за трго-      АД Скопје и број 250000000176263 во Шпаркасе банка
вија на големо и мало и услуги АНИТОМ ДООЕЛ              Македонија АД Скопје.
увоз-извоз Гостивар, со жиро-сметка бр. 530000101378-        Стечајната постапка се отвора на ден 6.7.2017 годи-
659, која се води во Охридска банка АД Скопје, со ЕДБ    на во 12:00 часот.
4007011510476 и ЕМБС 6677754.                                За стечаен управник се именува Пепи Страшо Па-
因此,我认为不可能编写一个正则表达式来按原样解析它

我解析它的方法是将pdf文本重新解析为一个固定宽度的文件。这将创建一个包含两列的数据帧,然后可以使用正则表达式单独解析。

Quick q:
>gsub(“-”,”,test)[1]“530000101378659”
您第一次尝试时删除了空格吗?Quick q:
>gsub(“-”,”,test)[1]“530000101378659”