jsvine / pdfplumber

Plumb a PDF for detailed information about each char, rectangle, line, et cetera — and easily extract text and tables.
MIT License
6.57k stars 659 forks source link

Troubles with subscripts #292

Closed Fleur09 closed 3 years ago

Fleur09 commented 4 years ago

Hi, I want to extract some text with medical information, from pdf to txt files.

The code I'm using to do it:

import pdfplumber import os

path = "PDF" for filename in os.listdir(path): myFile = os.path.join(path, filename) with pdfplumber.open(myFile) as pdf: for page in pdf.pages: text = page.extract_text() with open(os.path.splitext(myFile)[0] + "_plumber.txt", encoding="utf-8", mode="a") as f: f.write(text)

I need to keep the subscripts, not necessary as subscripts but in the text like "... CO2 ... ". For now I have "CO" and the "2" is read like an other line like: "..... CO ..... 2" As you can see: image

One of the PDF files: doc_test3.pdf

Thanks for your help.

samkit-jain commented 4 years ago

Hi @Fleur09 Appreciate your interest in the library. You can make use of the y_tolerance param to solve for this. Use page.extract_text(y_tolerance=6) instead. The output would be

Chapitre 5
Item 265
DÉSORDRES
DE L’ÉQUILIBRE ACIDE-BASE
UUEE  88..   CCiirrccuullaattiioonn  --  MMééttaabboolliissmmeess
NN°°226655..   TTrroouubblleess  ddee  ll’’ééqquuiilliibbrree  aacciiddoo--bbaassiiqquuee  eett  ddééssoorrddrreess  hhyyddrroo--éélleeccttrroollyyttiiqquueess..
OOBBJJEECCTTIIFFSS
yy  PPrreessccrriirree  eett  iinntteerrpprréétteerr  uunn  eexxaammeenn  ddeess  ggaazz  dduu  ssaanngg  eett  uunn  iioonnooggrraammmmee  ssaanngguuiinn  eenn  
ffoonnccttiioonn  dd’’uunnee  ssiittuuaattiioonn  cclliinniiqquuee  ddoonnnnééee..
yy  SSaavvooiirr  ddiiaaggnnoossttiiqquueerr  eett  ttrraaiitteerr  ::  uunnee  aacciiddoossee  mmééttaabboolliiqquuee,,  uunnee  aacciiddoossee  vveennttiillaattooiirree..
AAcciiddoosseess
ÊÊ SSaavvooiirr  ddééfifi  nniirr  ll’’aacciiddoossee,,  ssoonn  ccaarraaccttèèrree  mmééttaabboolliiqquuee  oouu  vveennttiillaattooiirree,,  eett  ssoonn  ccaarraaccttèèrree  iissoolléé  oouu  mmiixxttee,,  
aaiigguu  oouu  cchhrroonniiqquuee..
ÊÊ SSaavvooiirr  ccoonndduuiirree  llee  ddiiaaggnnoossttiicc  ééttiioollooggiiqquuee  dd’’uunnee  aacciiddoossee  mmééttaabboolliiqquuee..
ÊÊ CCoonnnnaaîîttrree  lleess  pprriinncciippaalleess  ccaauusseess  dd’’aacciiddoossee  mmééttaabboolliiqquuee  eett  rreessppiirraattooiirree,,  lleeuurrss  ccaarraaccttéérriissttiiqquueess  
ddiiaaggnnoossttiiqquueess  eett  ssaavvooiirr  aapppplliiqquueerr  llaa  ccoonndduuiittee  tthhéérraappeeuuttiiqquuee  eenn  uurrggeennccee..
AAllccaalloosseess  ((nnnnoooonnnn    iiiinnnncccclllluuuusssseeeessss    ddddaaaannnnssss    lllleeee    pppprrrrooooggggrrrraaaammmmmmmmeeee    ddddeeee    llll’’’’EEEECCCCNNNN    mmmmaaaaiiiissss    ttttrrrraaaaiiiittttééééeeeessss    àààà    ttttiiiittttrrrreeee    iiiinnnnddddiiiiccccaaaattttiiiiffff)))
ÊÊ SSaavvooiirr  ddééfifi  nniirr  ll’’aallccaalloossee  mmééttaabboolliiqquuee  eett  ééttaabblliirr  ssoonn  ccaarraaccttèèrree  iissoolléé  oouu  mmiixxttee..
ÊÊ SSaavvooiirr  ccoonndduuiirree  llee  ddiiaaggnnoossttiicc  ééttiioollooggiiqquuee  dd’’uunnee  aallccaalloossee  mmééttaabboolliiqquuee..
ÊÊ CCoonnnnaaîîttrree  lleess  pprriinncciippaalleess  ccaauusseess  dd’’aallccaalloossee  mmééttaabboolliiqquuee  eett  lleeuurrss  ccaarraaccttéérriissttiiqquueess
ddiiaaggnnoossttiiqquueess..
I.  GAZ DU SANG ARTÉRIEL ET INTERPRÉTATION
A.  Mesure du pH et de la gazométrie circulante sanguine
¢  Sang prélevé sans air dans une seringue héparinée (seringue à gaz du sang)
¢  Dans une artère plutôt qu’une veine pour mesurer le pH extracellulaire (le plus commun étant l’artère 
radiale au poignet)
¢  Mesure de la pression partielle en O2 et en CO2 total, à partir duquel est calculée la bicarbonatémie 
(HCO3–)
9782340-025998_Nephrologie.indb   71 14/09/2018   10:37

As it might have already caught your attention, there are repeating characters in the text. This is similar to issue #71. While trying to work with the solution presented in that, I encountered some issues and am currently working on those. Will update this issue thread with more information soon. Thanks.

samkit-jain commented 3 years ago

When PR #294 is merged in and dedup_chars() is released, you can use page.dedupe_chars().extract_text(y_tolerance=6) to extract text instead which would give you the output as

Chapitre 5
Item 265
DÉSORDRES
DE L’ÉQUILIBRE ACIDE-BASE
UE 8.  Circulation - Métabolismes
N°265.  Troubles de l’équilibre acido-basique et désordres hydro-électrolytiques.
OBJECTIFS
y  Prescrire et interpréter un examen des gaz du sang et un ionogramme sanguin en 
fonction d’une situation clinique donnée.
y  Savoir diagnostiquer et traiter : une acidose métabolique, une acidose ventilatoire.
Acidoses
Ê Savoir défi nir l’acidose, son caractère métabolique ou ventilatoire, et son caractère isolé ou mixte, 
aigu ou chronique.
Ê Savoir conduire le diagnostic étiologique d’une acidose métabolique.
Ê Connaître les principales causes d’acidose métabolique et respiratoire, leurs caractéristiques 
diagnostiques et savoir appliquer la conduite thérapeutique en urgence.
Alcaloses (non incluses dans le programme de l’ECN mais traitées à titre indicatif)
Ê Savoir défi nir l’alcalose métabolique et établir son caractère isolé ou mixte.
Ê Savoir conduire le diagnostic étiologique d’une alcalose métabolique.
Ê Connaître les principales causes d’alcalose métabolique et leurs caractéristiques
diagnostiques.
I.  GAZ DU SANG ARTÉRIEL ET INTERPRÉTATION
A.  Mesure du pH et de la gazométrie circulante sanguine
¢  Sang prélevé sans air dans une seringue héparinée (seringue à gaz du sang)
¢  Dans une artère plutôt qu’une veine pour mesurer le pH extracellulaire (le plus commun étant l’artère 
radiale au poignet)
¢  Mesure de la pression partielle en O2 et en CO2 total, à partir duquel est calculée la bicarbonatémie 
(HCO3–)
9782340-025998_Nephrologie.indb   71 14/09/2018   10:37
Fleur09 commented 3 years ago

Thanks!!!

jsvine commented 3 years ago

Thanks, @samkit-jain! That code is now merged and available in v0.5.24.