Как извлечь текст с определенными заголовками из PDF-файла, импортированного с пакетом tm в R? - PullRequest
0 голосов
/ 30 августа 2018

Я использую пакет tm для импорта нескольких PDF-файлов в R. Мне нужно из содержимого PDF-файлов некоторые векторы символов, которые содержат заголовок КОРПОРАТИВНАЯ ИНФОРМАЦИЯ. Проблема двоякая. Во-первых, мне не удается извлечь вектор с этим заголовком. Во-вторых, этот вектор выглядит очень грязно. Я не могу связать имя человека с должностью, занимаемой в компании. Это тип набора данных, который я пытаюсь построить. Я показываю ниже пример. Любая помощь приветствуется.

vector_of_interest <- c("   CORPORATE INFORMATION\r\n   BOARD OF DIRECTORS                 REGISTERED OFFICE\r\n   Chuah Ah Bee                       Suite 12-02,12th Floor\r\n   Executive Chairman                 Menara Zurich\r\n   Chuah Hoon Phong                   170 Jalan Argyll, 10050 Penang\r\n   Group Managing Director            Telephone Number : 04-2296 318\r\n   Chan Kim Keow                      Facsimile Number : 04-2282 118\r\n   Executive Director\r\n   Loo Choo Gee\r\n   Executive Director                 COMPANY SECRETARIES\r\n   Chew Chee Khong\r\n   Executive Director                 Gunn Chit Geok\r\n   Ng Seng Bee                        (MAICSA 0673097)\r\n   Independent Non-Executive Director Chew Siew Cheng\r\n   Haji Ahmad Fazil Bin Haji Hashim   (MAICSA 7019191)\r\n   Independent Non-Executive Director\r\n   Goh Choon Aik\r\n   Independent Non-Executive Director SHARE REGISTRAR\r\n                                      Tricor Investor Services Sdn Bhd\r\n   AUDIT COMMITTEE                    Level 17, The Gardens North Tower\r\n                                      Mid Valley City\r\n   Ng Seng Bee                        Lingkaran Syed Putra\r\n   Chairman                           59200 Kuala Lumpur\r\n   Haji Ahmad Fazil Bin Haji Hashim   Telephone Number : 03-2264 3883\r\n   Member                             Facsimile Number : 03-2282 1886\r\n   Goh Choon Aik\r\n   Member\r\n                                      STOCK EXCHANGE LISTING\r\n   REMUNERATION COMMITTEE             Main Market of Bursa Malaysia Securities Berhad\r\n                                      Stock Code : 7174\r\n   Haji Ahmad Fazil Bin Haji Hashim   Stock Name : CAB\r\n   Chairman\r\n   Chuah Ah Bee\r\n   Member                             AUDITORS\r\n   Ng Seng Bee\r\n   Member                             Deloitte KassimChan\r\n                                      Chartered Accountants\r\n                                      4th Floor, Wisma Wang\r\n   NOMINATION COMMITTEE               251-A Jalan Burma\r\n                                      10350 Penang\r\n   Haji Ahmad Fazil Bin Haji Hashim\r\n   Chairman\r\n   Ng Seng Bee                        PRINCIPAL BANKERS\r\n   Member\r\n   Goh Choon Aik                      Malayan Banking Berhad\r\n   Member                             Hong Leong Bank Berhad\r\n                                      United Overseas Bank (Malaysia) Berhad\r\n10 CAB Annual Report 2012\r\n")

#my attempt
 library(tm)
 library(tidyverse)
 library(stringr)

 Rpdf <- readPDF(control = list(text = "-layout")) # layout control in order to keep the original format as much as possible. I have also tried to add engine = "xpdf", before control

 docs <- Corpus(DirSource(cname), readerControl=list(reader=Rpdf)) # upload documents
 document <- content(docs[[1]])
 corporate.info <- unlist(str_extract_all(document, "CORPORATE INFORMATION.+"))

PDF можно найти по этой ссылке: http://www.bursamalaysia.com/market/listed-companies/company-announcements/4372609 информация на странице 10

1 Ответ

0 голосов
/ 01 сентября 2018

Я нашел решение:

Сначала я изменяю значение по умолчанию ReadPDF engine на xpdf

Rpdf <- readPDF(engine = "xpdf", control = list(text = "-layout")) 
      # layout control in order to keep the original format as much as possible 

docs <- Corpus(DirSource(cname), readerControl=list(reader=Rpdf)) 
        # upload documents i ncname, the path to the files

Во-вторых, я сворачиваю текст, чтобы иметь один документ на вектор:

 document <- content(docs[[1]])
 document <- unlist(paste(document , collapse = ' '))

В-третьих, я извлекаю страницу с информацией, которую искал, и извлекаю имена с помощью регулярных выражений

 corporate.info <- unlist(str_extract_all(document, "\\f+.+CORPORATE+.+INFORMATION+.+\\f"))

### "\f" --> indicates the beggining and end of of a page
### "+.+CORPORATE+.+INFORMATION+.+"  --> indicates the page with the heading I was interested

 corporate.info <- unlist(str_extract_all(corporate.info, "[A-Z]+[a-z]{1,8}\\s[A-Z]+[a-z]{1,8}\\s[A-Z]+[a-z]{1,8}")) # extract names 
 corporate.info <- unique(corporate.info) # clean
 corporate.info <- str_replace_all(corporate.info, ".*Bank.*", "") # clean + similar stuff to clean
...