Análisis de un archivo PDF de una oración dividida en varias líneas.
Objetivo: si una línea del pdf contiene la subcadena, copiar toda la oración (a través de múltiples líneas).
Puedo usar la función print()
para imprimir la línea en la que aparece la frase
.
Ahora, una vez que encuentro esta línea
, quiero volver a las iteraciones hasta que encuentre un terminador de oración: . ! ?
, de la oración anterior, e iterar hacia adelante nuevamente hasta el siguiente terminador de oración.
Esto es para que pueda imprimir la oración completa a la que pertenece la frase.
Jupyter Notebook:
“`python
<h1>pip install PyPDF2</h1>
<h1>pip install pdfplumber</h1>
<h1>—</h1>
<h1>import re</h1>
import glob
import PyPDF2
import pdfplumber
<h1>—</h1>
phrase = "Responsible Care Company"
<h1>SENTENCE_REGEX = re.pattern('^[A-Z][^?!.]*[?.!]$')</h1>
def scrape<em>sentence(sentence, lines, index):
if '.' in lines[index] or '!' in lines[index] or '?' in lines[index]:
return sentence.replace('\n', '').strip()
sentence = scrape</em>sentence(lines[index-1] + sentence, lines, index-1) # línea anterior
sentence = scrape_sentence(sentence + lines[index+1], lines, index+1) # línea siguiente<br>
return sentence
<h1>—</h1>
with pdfplumber.open('../data/gri/reports/GPIC<em>Sustainability</em>Report<em>2020</em><em>-</em>40<em>Years</em>of<em>Sustainable</em>Success.pdf') as opened<em>pdf:
for page in opened</em>pdf.pages:
text = page.extract<em>text()
lines = text.split('\n')
i = 0
sentence = ''
while i < len(lines):
if 'and Knowledge of Individuals; Behaviours; Attitudes, Perception ' in lines[i]:
sentence = scrape</em>sentence('', lines, i) # !
print(sentence) # !
i += 1
“`
Output:
conexión y la vinculación con los relevantes 17 ODS de las Naciones Unidas. y liderazgo. Hemos comprendido y reconocido hace
Frase:
Responsible Care Company
Oración (a través de múltiples líneas):
"GPCI es una Compañía de Responsible Care certificada por RC 14001 desde julio de 2010."
PDF (pág. 2).
He estado trabajando en iteraciones de “reseguimiento”, basadas en esta solución. Intenté un for-loop
, pero no te permite regresar en iteraciones.
Por favor, háganme saber si hay algo más que pueda agregar a la publicación.
davy.ai
Solución: Encontrar Oraciones con Subcadenas en PDF
Objetivo
El objetivo del problema es buscar una subcadena específica en un archivo PDF y, para cada línea que contenga la subcadena, copiar la oración completa a la que la subcadena pertenece (a través de varias líneas).
Enfoque
La solución hace uso de la biblioteca
pdfplumber
para extraer el texto del PDF. Una vez que se ha extraído el texto, se divide en líneas, y se busca cada línea de la subcadena. Si se encuentra la subcadena en la línea, se recupera la oración completa a la que pertenece la subcadena.Retrocediendo a través de Líneas Anteriores
La solución necesita retroceder a líneas anteriores para recuperar la oración completa a la que pertenece la subcadena. Esto se hace usando recursión.
La función
scrape_sentence
toma la oración actual, una lista de líneas y el índice de la línea que se está procesando actualmente. La función verifica si la línea actual contiene un terminador de oración (“.”, “?”, o “!”). Si lo hace, la función devuelve la oración actual después de recortar cualquier espacio en blanco y saltos de línea adicionales. De lo contrario, la función se llama recursivamente con la línea anterior y concatena la oración actual con ella. La función luego se llama recursivamente con la siguiente línea y concatena la oración actual con ella.Encontrar Oraciones con Subcadenas
El código lee el archivo PDF, extrae el texto de cada página y divide el texto en líneas. Luego, recorre cada línea y verifica si la línea contiene la subcadena. Si lo hace, llama a la función
scrape_sentence
para recuperar la oración completa que contiene la subcadena antes de pasar a la siguiente línea.Conclusión
Esta solución demuestra cómo encontrar oraciones que contengan subcadenas específicas en un archivo PDF. Utiliza la biblioteca
pdfplumber
para extraer el texto del PDF y retrocede a través del texto para recuperar la oración completa que contiene la subcadena.