2017-09-26 6 views
0

Je suis en train de traiter un fichier PDF OCR et d'en extraire du texte pour en créer une trame de données. Ce que je reçois est vectoriel et je n'arrive pas à les concaténer. une seule ligne afin qu'elle puisse être ajoutée en tant que colonne à une trame de données. de ce morceau de code que j'extraire la colonne pour mon dataframeErreur lors de l'ajout d'une colonne à une trame de données

chk_words=c("Swimming pool","Gym","west","para") 
tp_big=c("swimming pool in a farm","gym","west","north","south") 
ps=c() 
x=list() 
for(i in chk_words){ 
    br=if(length(which(stri_detect_fixed(tolower(tp_big),tolower(i)))) <= 0){ print("Not Present") } else {print("Present")} 

    if(br == "Present") 
    ps=i 
    x[[i]]=ps 
    tc=unlist(unique(x)) 
    x=paste(tc,collapse=" ") 
    } 


df11=data.frame(x) 

I get sortie (dataframe) comme

x 
Swimming pool Gym west 

mais lorsque je tente de mettre en œuvre le même code ci-dessus dans ce grand code que je suis pas en mesure d'obtenir la colonne désirée « x » ce est toute partie de code

library(pdftools) 
    library(tesseract) 
    library(stringi) 
    library(TraMineRextras) 
     All_files=Sys.glob("*.pdf") 
v1 <- numeric(length(All_files)) 
chk_words=c("Swimming pool","Gym","west","para") 
word <- "Gym" 
tc=c() 
ps=c() 
x=list() 
df <- data.frame() 
df11 <- data.frame() 
Status="Present" 

for (i in seq_along(All_files)){ 


    file_name <- All_files[i] 

    cnt <- pdf_info(All_files[i])$pages 
    print(cnt) 

    for(j in seq_len(cnt)){ 
    img_file <- pdftools::pdf_convert(All_files[i], format = 'tiff', pages = j, dpi = 400) 
    text <- ocr(img_file) 
    ocr_text <- capture.output(cat(text)) 
    check <- sapply(ocr_text, paste, collapse="") 
    junk <- dir(path="D:/Deepesh/R Script/All_PDF_Files/Registration_Certificates_OCR", pattern="tiff") 
    file.remove(junk) 
    br <-if(length(which(stri_detect_fixed(tolower(check),tolower(word)))) <= 0) "Not Present" 
    else "Present" 
    print(br)  
    if(br=="Present") { 
     v1[i] <- j 
     break} 

    for(k in chk_words){ 
     sr=if(length(which(stri_detect_fixed(tolower(check),tolower(k)))) <= 0){ print("Not Present") } else {print("Present")} 
     if(sr == "Present") 
     ps=k 
     x[[k]]=ps 
     tc=unlist(unique(x)) 

    } 




    } 
    y=paste(tc,collapse=" ") 
    #tc=paste(tc,collapse=" ") 
    Status <- if(v1[i] == 0) "Not Present" else "Present" 
    pages <- if(v1[i] == 0) "-" else 
    paste0(tools::file_path_sans_ext(basename(file_name)), "_", v1[i]) 
    words <- if(v1[i] == 0) "-" else word 
    df <- rbind(df, cbind(file_name = basename(file_name), 
         Status, pages = pages, words = words,y)) 


} 

en ce moment, je reçois la sortie comme celui-ci (y donne la valeur NULL)

pages d'état file_name mots y test1.pdf Présent test1_1 gymnase
test2.pdf Non Présent - Ce que j'Expect est

file_name status   pages    words  y 
test1.pdf Present  test1_1    gym   swimming pool, gym 
test2.pdf Not Present  - 

Toute suggestion où je m qui ne va pas. Merci d'avance.

P.S here est l'accès à des fichiers pdf d'exemple; plus de clarté est mentionné dans this post

Répondre

0
checkList = list() 
j=0 
for(i in chk_words){ 
    chk=Reduce('|', lapply(i, function(x) any(ocr_text %in% x))) 
    if(chk == "TRUE") { 
    j = j + 1; 
    checkList[[j]] <- i 
    } 
} 
THIRD_COL <- cat(paste(shQuote(unlist(checkList), type="cmd"), collapse=", ")) 

Cela vous donnera "swimming pool", "gym" Ce que je l'ai fait est, si la condition satisfaite, il stockera chk_words dans la Checklist (qui est une liste). Ensuite, j'utilise shQuote dans le paste pour retourner la sortie désirée.

+0

Mise à jour du message avec votre réponse, mais toujours impossible d'obtenir la colonne "THIRD_COL" correctement. – deepesh

+0

Vous devez déboguer votre code parce que vous l'avez mis sous deux boucles imbriquées et si une instruction. Je ne vois aucune raison pour laquelle mon bloc de code ne fonctionnerait pas. – Santosh

+0

Vous ne trouvez encore rien sur le code que j'ai implémenté – deepesh