es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Regex oración agregada


Por favor, háganme saber si hay algo más que pueda agregar a la publicación.

Tags:  , , ,

Answer

  1. Avatar for 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.

    def scrape_sentence(sentence, lines, index):
        # Caso base: la línea contiene un terminador de oración
        if '.' in lines[index] or '!' in lines[index] or '?' in lines[index]:
            # Devuelve la oración sin espacios en blanco ni saltos de línea adicionales
            return sentence.replace('\n', '').strip()
        # Caso recursivo: retrocede a la línea anterior
        sentence = scrape_sentence(lines[index-1] + sentence, lines, index-1)
        # Caso recursivo: avanza a la siguiente línea
        sentence = scrape_sentence(sentence + lines[index+1], lines, index+1)
        return sentence
    

    Encontrar Oraciones con Subcadenas

    with pdfplumber.open('example.pdf') as pdf:
        for page in pdf.pages:
            text = page.extract_text()
            lines = text.split('\n')
            i = 0
            while i < len(lines):
                # Verificar si la línea contiene la subcadena
                if 'subcadena' in lines[i]:
                    # Recuperar la oración completa que contiene la subcadena
                    sentence = scrape_sentence('', lines, i)
                    print(sentence)
                i += 1
    

    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.

Comments are closed.