第八篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读使用Python库清洗处理从PDF文件提取的文本

传奇开心果博文系列

  • 系列博文目录
    • Python自动化办公库技术点案例示例系列
  • 博文目录
    • 前言
    • 一、Python清洗处理文本的常见步骤
    • 二、使用Python库去除非文本元素示例代码
    • 三、使用Python库去除格式化元素的示例代码
    • 四、使用Python库去除空白字符示例代码
    • 五、使用Python库合并段落和行示例代码
    • 六、使用Python库处理特殊字符和编码示例代码
    • 七、使用Python库处理换行符示例代码
    • 八、使用Python库去除特殊标记和符号示例代码
    • 九、使用Python库处理缩写和断词示例代码
    • 十、使用PyPDF4库处理特殊文本结构示例代码
    • 十一、使用Python库进行文本校对和校正示例代码
    • 十二、知识点归纳

系列博文目录

Python自动化办公库技术点案例示例系列

博文目录

前言

在这里插入图片描述

在使用pyPDF4或任何其他Python的PDF解析库提取PDF文件的文本后,进行清洗处理是非常重要的。这是因为PDF文件通常包含了各种格式化元素,如页眉、页脚、页码、图表、图片等,这些元素可能会干扰到你提取的文本内容。清洗处理的目标是去除这些干扰元素,仅提取出你真正需要的文本内容。通过进行清洗处理,你可以获得更干净、准确的文本内容,便于后续的文本分析、处理和应用。

一、Python清洗处理文本的常见步骤

在这里插入图片描述

  1. 去除非文本元素:PDF文件中可能包含图像、表格、图表等非文本元素,这些元素不是文本内容的一部分,需要将其去除。

  2. 去除格式化元素:PDF文件中的文本可能包含各种格式化信息,如字体、颜色、大小等。在提取文本时,你可能只关心文本的内容,而不关心其格式化信息。因此,需要去除这些格式化元素,只保留文本内容。

  3. 去除空白字符:PDF文件中的文本可能包含多余的空白字符,如空格、制表符、换行符等。这些空白字符对于文本分析和处理来说是无关紧要的,需要将其去除。

  4. 合并段落和行:PDF文件中的文本通常以段落或行的形式排列,但在提取时可能会被拆分成多个片段。为了方便后续处理,需要将这些片段合并成完整的段落或行。

  5. 处理特殊字符和编码:有些PDF文件中的文本可能包含特殊字符或使用了特殊编码,例如Unicode字符、非标准字体等。在提取文本时,需要正确处理这些特殊字符和编码,以确保提取的文本内容正确无误。

  6. 处理换行符:PDF文件中的文本可能会在不恰当的位置换行,导致提取的文本出现断句问题。可以通过检测并合并不完整的句子,或者根据上下文进行适当的换行处理,以确保提取的文本具有正确的句子结构。

  7. 处理特殊标记和符号:有些PDF文件中的文本可能包含特殊的标记或符号,如页眉、页脚、引用标记等。这些标记和符号对于文本分析来说可能是干扰项,需要将其去除或进行适当的处理。

  8. 处理缩写和断词:PDF文件中的文本可能包含缩写词或断开的单词,这可能会影响文本的可读性和准确性。可以通过使用词典或自然语言处理技术来恢复缩写词或合并断开的单词,以便提取的文本更加完整和准确。

  9. 处理特殊文本结构:PDF文件中的文本可能具有特殊的结构,如表格、目录、脚注等。对于这些特殊结构,可以根据需要进行适当的处理,例如提取表格数据、忽略目录或脚注等。

  10. 校对和校正:提取的文本可能存在一些错误或不完整的情况,例如拼写错误、缺失的字符等。可以使用自动校对工具或人工校对来修正这些错误,以确保提取的文本质量。

这些清洗处理步骤可以根据具体的应用场景和需求进行选择和调整。清洗处理可以提高提取的文本质量,减少噪音和干扰,使得后续的文本分析和处理更加准确和可靠。

二、使用Python库去除非文本元素示例代码

在这里插入图片描述

  1. 使用PyPDF4库提取PDF文件中的文本并去除非文本元素示例代码
import PyPDF4

def extract_text_without_non_text_elements(pdf_path):
    text = ""
    with open(pdf_path, "rb") as file:
        reader = PyPDF4.PdfFileReader(file)
        num_pages = reader.numPages

        for page_num in range(num_pages):
            page = reader.getPage(page_num)
            content = page.extract_text()

            if content:
                text += content

    return text

pdf_path = "path/to/your/pdf/file.pdf"
extracted_text = extract_text_without_non_text_elements(pdf_path)
print(extracted_text)

在上述代码中,我们使用PyPDF4库打开PDF文件,并逐页提取文本内容。对于每一页,我们使用extract_text()方法提取文本,并将其追加到text变量中。

请注意,这种方法只提取纯文本内容,而不包括图像、表格、图表等非文本元素。但是,这种方法并不能保证完全去除所有非文本元素,因为有些PDF文件可能包含复杂的布局和嵌入式对象。如果你需要更精确地去除非文本元素,可能需要使用更高级的PDF处理库,如PDFMiner、pdftotext等,以进行更复杂的操作。

此外,还可以结合使用OCR(光学字符识别)库,如Tesseract,对PDF文件中的图像进行OCR处理,以提取其中的文本内容。这样可以进一步增强从PDF中提取文本的能力。

  1. 使用PDFMiner精确去除非文本元素示例代码

使用PDFMiner库可以更精确地去除PDF文件中的非文本元素。以下是一个示例代码,演示如何使用PDFMiner库提取PDF文件中的文本并去除非文本元素:

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO

def extract_text_without_non_text_elements(pdf_path):
    text = ""
    rsrcmgr = PDFResourceManager()
    output_string = StringIO()
    codec = 'utf-8'
    laparams = LAParams()

    with open(pdf_path, 'rb') as file:
        interpreter = PDFPageInterpreter(rsrcmgr, TextConverter(rsrcmgr, output_string, codec=codec, laparams=laparams))
        for page in PDFPage.get_pages(file, check_extractable=True):
            interpreter.process_page(page)

        text = output_string.getvalue()

    return text

pdf_path = "path/to/your/pdf/file.pdf"
extracted_text = extract_text_without_non_text_elements(pdf_path)
print(extracted_text)

在上述代码中,我们使用PDFMiner库打开PDF文件,并使用PDFResourceManagerTextConverterPDFPageInterpreter等类来提取PDF文件中的文本内容。通过设置check_extractable=True,可以确保仅提取可提取的文本内容,而忽略非文本元素。

PDFMiner还提供更多的选项和功能用于高级文本提取和布局处理,从而更精确去除非文本元素。

from pdfminer.high_level import extract_text
from pdfminer.layout import LAParams

def extract_text_from_pdf(pdf_path):
    text = extract_text(pdf_path, laparams=LAParams())

    return text

pdf_path = "path/to/your/pdf/file.pdf"
extracted_text = extract_text_from_pdf(pdf_path)
print(extracted_text)

在这个示例代码中,我们使用PDFMiner的extract_text函数来提取PDF文件中的文本内容。我们还通过laparams参数传递了LAParams对象,以控制文本提取的布局处理。

LAParams对象可以用于调整文本提取的参数,以适应不同的PDF文件和布局。例如,你可以设置LAParamsline_overlapchar_marginline_margin等参数来调整文本行之间的重叠、字符边距和行边距的阈值。

你可以根据具体的需求调整LAParams参数,以获得更好的文本提取效果。更多关于LAParams参数的详细信息可以参考PDFMiner的文档。

请注意,PDFMiner可以提供更高级的文本提取和布局处理功能,但也可能需要更多的配置和参数调整。根据PDF文件的复杂性和布局特点,你可能需要进一步调整和处理提取的文本内容。

  1. 使用pdftotext精确去除非文本元素示例代码

要使用pdftotext库精确去除PDF文件中的非文本元素,你可以使用Python的subprocess模块来调用pdftotext命令行工具。以下是一个示例代码,演示如何使用pdftotext库提取PDF文件中的文本并去除非文本元素:

import subprocess

def extract_text_without_non_text_elements(pdf_path):
    text = ""
    output_path = "output.txt"

    # 调用pdftotext命令行工具将PDF文件转换为纯文本
    subprocess.call(["pdftotext", "-layout", pdf_path, output_path])

    # 读取转换后的文本文件
    with open(output_path, "r", encoding="utf-8") as file:
        text = file.read()

    # 删除临时生成的文本文件
    subprocess.call(["rm", output_path])

    return text

pdf_path = "path/to/your/pdf/file.pdf"
extracted_text = extract_text_without_non_text_elements(pdf_path)
print(extracted_text)

在上述代码中,我们使用subprocess模块调用了pdftotext命令行工具,并将PDF文件转换为纯文本。通过指定-layout选项,pdftotext会尽可能保留原始PDF文件的布局信息,从而更精确地提取文本内容。

转换后的文本将保存在一个临时的文本文件中(output.txt),我们通过读取该文件来获取提取的文本内容。最后,我们使用subprocess模块调用rm命令来删除临时生成的文本文件。

请确保在运行代码之前,已经安装了pdftotext命令行工具,并将其添加到系统的环境变量中,以便Python代码可以调用该工具。

需要注意的是,pdftotext工具的精确性也会受到PDF文件本身的结构和布局的影响。对于复杂的PDF文件,可能仍然需要进行进一步的处理和调整,以确保准确提取纯文本内容。

  1. PyPDF4和Tesseract库结合提取PDF文件中图像的文本内容去除非文本元素示例代码

结合使用OCR库如Tesseract可以提高从PDF中提取文本的能力,尤其是当PDF包含图像或扫描文档时。以下是一个示例代码,演示了如何使用PyPDF4和Tesseract库来提取PDF文件里面的图像中的文本内容:

import PyPDF4
import pytesseract
from PIL import Image

def extract_text_from_pdf_with_ocr(pdf_path):
    text = ""

    with open(pdf_path, 'rb') as file:
        reader = PyPDF4.PdfFileReader(file)
        num_pages = reader.numPages

        for page_num in range(num_pages):
            page = reader.getPage(page_num)
            images = page.extract_images()

            for image in images:
                image_data = image[0]['image']
                img = Image.frombytes('RGB', image_data.size, image_data)

                # 使用Tesseract进行OCR处理
                ocr_text = pytesseract.image_to_string(img)
                text += ocr_text

    return text

pdf_path = "path/to/your/pdf/file.pdf"
extracted_text = extract_text_from_pdf_with_ocr(pdf_path)
print(extracted_text)

在这个示例代码中,我们使用PyPDF4库打开PDF文件,并使用PdfFileReader类读取PDF文件的内容。然后,我们遍历每一页,并使用extract_images()方法提取页面中的图像。

对于每个提取的图像,我们使用Pillow库(通过from PIL import Image导入)将图像数据转换为PIL Image对象。然后,我们使用Tesseract库(通过import pytesseract导入)对图像进行OCR处理,将图像中的文本转换为字符串。

最后,我们将提取的OCR文本添加到最终的文本结果中。

确保你已经安装了Tesseract库和相应的语言数据包。你可以使用以下命令通过pip安装Tesseract库:

pip install pytesseract

同时,你还需要安装Tesseract的OCR引擎。具体安装步骤和语言数据包的安装可以参考Tesseract的官方文档。

请注意,OCR处理可能会受到图像质量、分辨率和文本复杂性等因素的影响。对于复杂的PDF文件,可能需要进一步调整和处理提取的文本内容。

三、使用Python库去除格式化元素的示例代码

在这里插入图片描述

下面我们使用pyPDF4提取PDF文件的文本,然后使用正则表达式来处理提取的文本字符串,去除多余的空白字符、换行符和制表符,只保留文本内容。

import PyPDF4
import re

def extract_text_without_formatting(pdf_path):
    text = ""

    with open(pdf_path, 'rb') as file:
        reader = PyPDF4.PdfFileReader(file)
        num_pages = reader.numPages

        for page_num in range(num_pages):
            page = reader.getPage(page_num)
            page_text = page.extract_text()

            # 去除格式化元素,只保留文本内容
            page_text = re.sub(r'\s+', ' ', page_text)  # 去除多余的空白字符
            page_text = re.sub(r'\s*[\n\t\r]\s*', ' ', page_text)  # 去除换行符和制表符
            page_text = re.sub(r'\s+', ' ', page_text)  # 再次去除多余的空白字符

            text += page_text

    return text

pdf_path = "path/to/your/pdf/file.pdf"
extracted_text = extract_text_without_formatting(pdf_path)
print(extracted_text)

在这个示例代码中,我们使用PyPDF4库打开PDF文件,并使用PdfFileReader类读取PDF文件的内容。然后,我们遍历每一页,使用extract_text()方法提取文本内容。

接下来,我们使用正则表达式来处理提取的文本字符串,去除多余的空白字符、换行符和制表符,只保留文本内容。

请注意,对于复杂的PDF文件,可能需要根据具体情况进一步调整和处理提取的文本内容。

四、使用Python库去除空白字符示例代码

在这里插入图片描述

使用Python的re库去除空白字符。以下是示例代码:

import re

def remove_whitespace(text):
    # 使用正则表达式去除空白字符
    cleaned_text = re.sub(r'\s+', ' ', text)
    
    return cleaned_text

# 示例文本
text = "  This is some  example   text with   extra   spaces.  "
cleaned_text = remove_whitespace(text)
print(cleaned_text)

在这个示例代码中,我们定义了一个remove_whitespace函数,它接受一个文本字符串作为输入,并使用re.sub方法将连续的空白字符替换为单个空格。正则表达式r'\s+'匹配一个或多个连续的空白字符。

然后,我们调用remove_whitespace函数,并将示例文本作为输入。最后,我们打印出去除空白字符后的文本。

运行示例代码,输出将是去除了额外空格的文本:

This is some example text with extra spaces.

你可以在实际应用中将这个函数应用于从PDF中提取的文本,以去除不需要的空白字符。根据需要,你还可以添加其他的字符串处理操作来清理和调整文本内容。

五、使用Python库合并段落和行示例代码

在这里插入图片描述

当从PDF或其他文本源中提取文本时,有时会出现段落被分割成多行的情况。如果想将这些分割的行重新合并成完整的段落,可以使用Python的字符串操作方法。以下是一个示例代码,演示了如何使用Python库合并段落和行:

def merge_paragraphs(lines):
    merged_lines = []
    current_paragraph = ""

    for line in lines:
        line = line.strip()  # 去除行首尾的空白字符

        if line:  # 如果行不为空
            current_paragraph += line + " "  # 将行添加到当前段落中
        elif current_paragraph:  # 如果行为空且当前段落不为空
            merged_lines.append(current_paragraph.strip())  # 添加当前段落到合并的行列表中
            current_paragraph = ""  # 重置当前段落

    if current_paragraph:  # 处理最后一个段落
        merged_lines.append(current_paragraph.strip())

    merged_text = "\n".join(merged_lines)  # 将合并的行列表转换为文本

    return merged_text

# 示例文本
lines = [
    "This is the first line of the first paragraph.",
    "This is the second line of the first paragraph.",
    "",
    "This is the first line of the second paragraph.",
    "This is the second line of the second paragraph."
]

merged_text = merge_paragraphs(lines)
print(merged_text)

在这个示例代码中,我们定义了一个merge_paragraphs函数,它接受一个包含行文本的列表作为输入。我们遍历每一行,并根据行的内容进行合并。

如果行不为空,我们将其添加到当前段落字符串中,并在行末尾添加一个空格。如果行为空且当前段落不为空,我们将当前段落添加到合并的行列表中,并重置当前段落字符串。

最后,我们处理最后一个段落,将其添加到合并的行列表中。

最后,我们使用\n作为分隔符,将合并的行列表转换为文本字符串。

运行示例代码,输出将是合并后的段落文本:

This is the first line of the first paragraph. This is the second line of the first paragraph.
This is the first line of the second paragraph. This is the second line of the second paragraph.

你可以将这个函数应用于从PDF中提取的文本,以合并被分割的行形成完整的段落。根据需要,你还可以添加其他的字符串处理操作来清理和调整文本内容。

六、使用Python库处理特殊字符和编码示例代码

在这里插入图片描述

处理特殊字符和编码是在提取PDF文本时非常重要的一步。Python提供了多个库和工具来处理这些情况。

  1. 使用Python的内置字符串函数来处理Unicode字符:
# 示例文本包含Unicode字符
text = "This is some text with Unicode characters: \u2022 bullet point, \u00A9 copyright symbol"

# 处理Unicode字符
decoded_text = text.encode('utf-8').decode('unicode_escape')

print(decoded_text)

在这个示例代码中,我们定义了一个包含Unicode字符的示例文本。我们使用encode('utf-8').decode('unicode_escape')将文本编码为UTF-8,并解码为Unicode字符。最后,我们打印解码后的文本。

  1. 使用第三方库fitz来处理非标准字体示例代码
import fitz

# 打开PDF文件
pdf_file = "example.pdf"
doc = fitz.open(pdf_file)

# 提取文本内容
text = ""
for page in doc:
    text += page.get_text()

# 处理特殊字符和编码
decoded_text = text.encode('latin-1').decode('unicode_escape')

print(decoded_text)

在这个示例代码中,我们使用了fitz库(PyMuPDF)来打开PDF文件,并遍历每一页来提取文本内容。然后,我们将文本内容编码为Latin-1,并使用decode('unicode_escape')来处理特殊字符和编码。最后,我们打印处理后的文本内容。

请注意,处理特殊字符和编码的方法可能因PDF文件的特定情况而异。你可能需要根据实际情况进行调整和修改。此外,还可以使用其他库和工具来处理特殊字符和编码,例如chardet库来检测文本编码,fonttools库来解析字体信息等。

  1. 使用chardet库来检测文本编码示例代码
import chardet

# 示例文本
text = b"This is some text with unknown encoding"

# 检测文本编码
result = chardet.detect(text)
encoding = result['encoding']

# 解码文本
decoded_text = text.decode(encoding)

print(decoded_text)

在这个示例代码中,我们使用chardet.detect()函数来检测文本的编码。然后,我们使用检测到的编码来解码文本,并打印解码后的结果。

  1. 使用fonttools库来解析字体信息示例代码
from fontTools.ttLib import TTFont

# 示例字体文件
font_file = "example.ttf"

# 打开字体文件
font = TTFont(font_file)

# 解析字体信息
font_info = font['name'].getDebugName(1, 3, 1)

print(font_info)

在这个示例代码中,我们使用fontTools.ttLib.TTFont类来打开字体文件。然后,我们可以使用各种方法和属性来获取字体的相关信息。在这个示例中,我们使用getDebugName()方法来获取字体的名称信息,并打印结果。

这些库和工具提供了额外的功能,可以帮助你更好地处理特殊字符和编码。根据具体的需求和情况,你可以选择使用适当的库和工具来解决问题。请注意,这些示例代码只是简单的演示,你可能需要根据实际情况进行适当的调整和修改。
处理特殊字符和编码是一个复杂的任务,因为PDF文件的内容和编码方式各不相同。因此,根据具体情况选择合适的方法和工具进行处理是非常重要的。

七、使用Python库处理换行符示例代码

在这里插入图片描述

我们使用Python的re库处理换行符,下面是示例代码:

import re

# 示例文本
text = "This is a sample text that has been\n"
text += "broken into multiple lines. This is an\n"
text += "incomplete sentence. This is another\n"
text += "line of text."

# 合并不完整的句子
merged_text = re.sub(r'\n([a-z])', r' \1', text)

# 处理换行符
processed_text = merged_text.replace('\n', ' ')

print(processed_text)

在这个示例代码中,我们首先使用正则表达式'\n([a-z])'来匹配以换行符开头,并且下一行以小写字母开头的情况。然后,我们使用re.sub()函数将这些匹配的部分替换为一个空格和捕获组中的字母。这样,我们就能将不完整的句子合并为完整的句子。

接下来,我们使用replace()函数将剩余的换行符替换为空格,以确保文本没有额外的换行符。

请注意,这只是一个简单的示例,用于演示如何处理换行符。实际情况可能更加复杂,你可能需要根据具体的文本结构和规则进行适当的调整和修改。

八、使用Python库去除特殊标记和符号示例代码

在这里插入图片描述

当处理PDF文件中的特殊标记和符号时,可以使用正则表达式或字符串操作来去除或处理它们。

  1. 使用正则表达式去除一些常见的特殊标记和符号示例代码
import re

# 示例文本
text = "This is some sample text with [footnote] and <citation> tags."

# 去除方括号中的内容
cleaned_text = re.sub(r'\[.*?\]', '', text)

# 去除尖括号中的内容
cleaned_text = re.sub(r'<.*?>', '', cleaned_text)

print(cleaned_text)

在这个示例代码中,我们使用了两个正则表达式来去除方括号和尖括号中的内容。'\[.*?\]'匹配方括号内的任意字符,'<.*?>'匹配尖括号内的任意字符。使用re.sub()函数将匹配到的内容替换为空字符串,从而去除特殊标记和符号。

请注意,这只是一个简单的示例,用于演示如何处理特殊标记和符号。实际情况可能更加复杂,你可能需要根据具体的标记和符号进行适当的调整和修改。另外,还可以根据具体的需求对这些标记和符号进行进一步的处理,比如替换为特定的占位符或进行其他的转换操作。

  1. 替换为特定的占位符或进行其他的转换操作示例代码

可以根据具体的需求对这些标记和符号进行进一步的处理,比如替换为特定的占位符或进行其他的转换操作。可以使用字符串操作或正则表达式来实现。下面是一个使用正则表达式的示例代码:

import re

# 示例文本
text = "This is some sample text with [footnote] and <citation> tags."

# 将方括号中的内容替换为占位符
cleaned_text = re.sub(r'\[.*?\]', '[placeholder]', text)

# 将尖括号中的内容替换为占位符
cleaned_text = re.sub(r'<.*?>', '<placeholder>', cleaned_text)

print(cleaned_text)

在这个示例代码中,我们使用了两个正则表达式来匹配方括号和尖括号中的内容,并将其替换为占位符。'\[.*?\]'匹配方括号内的任意字符,'<.*?>'匹配尖括号内的任意字符。使用re.sub()函数将匹配到的内容替换为占位符。

你可以根据具体的需求自定义占位符,将其替换为任何你想要的字符串。这样可以将特殊标记和符号转换为易于处理的形式。

除了替换为占位符,你还可以根据具体的需求进行其他的转换操作,比如将特殊标记和符号转换为特定的字符或字符串。这取决于你对文本的处理需求和目标。

  1. 转换为特定的字符或字符串示例代码

当需要将特殊标记和符号转换为特定的字符或字符串时,可以使用字符串操作或正则表达式来实现。下面是一个正则表达式的示例代码:

import re

# 示例文本
text = "This is some sample text with [footnote] and <citation> tags."

# 将方括号中的内容替换为特定字符串
cleaned_text = re.sub(r'\[.*?\]', 'FOOTNOTE', text)

# 将尖括号中的内容替换为特定字符串
cleaned_text = re.sub(r'<.*?>', 'CITATION', cleaned_text)

print(cleaned_text)

在这个示例代码中,我们使用了两个正则表达式来匹配方括号和尖括号中的内容,并将其替换为特定的字符串。'\[.*?\]'匹配方括号内的任意字符,'<.*?>'匹配尖括号内的任意字符。使用re.sub()函数将匹配到的内容替换为特定的字符串。

你可以根据具体的需求自定义转换后的字符串,将特殊标记和符号转换为任何你想要的字符或字符串。这样可以根据需要对文本进行进一步处理和分析。

除了替换为特定的字符或字符串,你还可以根据具体的需求进行其他的转换操作,比如将特殊标记和符号转换为特定的格式或结构。这取决于你对文本的处理需求和目标。

九、使用Python库处理缩写和断词示例代码

在这里插入图片描述

处理缩写词和断开的单词可以使用词典或自然语言处理技术。

  1. 使用词典进行缩写词恢复示例代码
# 示例文本
text = "I have a PhD in CS and work at IBM."

# 缩写词词典
abbreviations = {
    "PhD": "Doctor of Philosophy",
    "CS": "Computer Science",
    "IBM": "International Business Machines"
}

# 恢复缩写词
for abbreviation, full_form in abbreviations.items():
    text = text.replace(abbreviation, full_form)

print(text)

在这个示例代码中,我们使用了一个缩写词词典来存储缩写词及其完整形式。然后,我们遍历词典中的每个缩写词,使用replace()函数将文本中的缩写词替换为其完整形式。

在这里插入图片描述

  1. 使用自然语言处理库进行断词合并示例代码
import nltk

# 示例文本
text = "I love to play video games. It's so much fun!"

# 断词合并
tokens = nltk.word_tokenize(text)
merged_text = " ".join(tokens)

print(merged_text)

在这个示例代码中,我们使用了NLTK(自然语言工具包)库中的word_tokenize()函数将文本分解为单词标记(tokens)。然后,我们使用join()函数将这些单词标记重新合并为一个字符串,从而合并断开的单词。

这些示例代码演示了如何使用词典或自然语言处理技术来处理缩写和断词。你可以根据具体的需求和文本特点进行相应的调整和扩展。

十、使用PyPDF4库处理特殊文本结构示例代码

在这里插入图片描述

PDF文件中的文本可能具有特殊的结构,如表格、目录、脚注等。对于这些特殊结构,可以根据需要进行适当的处理,例如提取表格数据、忽略目录或脚注等。
使用PyPDF4库处理特殊文本结构,如表格、目录和脚注,可以进行相应的操作。

  1. 提取PDF中的表格数据示例代码
import PyPDF4

# 打开PDF文件
with open('file.pdf', 'rb') as file:
    pdf_reader = PyPDF4.PdfFileReader(file)

    # 获取总页数
    num_pages = pdf_reader.numPages

    # 遍历每一页
    for page_num in range(num_pages):
        page = pdf_reader.getPage(page_num)

        # 检查页面是否包含表格
        if '/Table' in page.extract_text():
            # 处理表格数据
            table_data = page.extract_tables()
            for table in table_data:
                for row in table:
                    print(row)

在这个示例代码中,我们使用了PyPDF4库来读取PDF文件。通过打开PDF文件并创建PdfFileReader对象,我们可以访问PDF的页面和内容。我们可以遍历每一页,使用extract_text()函数提取页面的文本内容,并检查文本中是否包含表格的标识符。如果页面包含表格,我们可以使用extract_tables()函数提取表格数据,并对每个表格进行进一步处理。

  1. 忽略PDF中的目录或脚注示例代码
import PyPDF4

# 打开PDF文件
with open('file.pdf', 'rb') as file:
    pdf_reader = PyPDF4.PdfFileReader(file)

    # 获取总页数
    num_pages = pdf_reader.numPages

    # 遍历每一页
    for page_num in range(num_pages):
        page = pdf_reader.getPage(page_num)

        # 检查页面是否包含目录或脚注
        if '/Contents' not in page.extract_text():
            # 处理页面内容
            text = page.extract_text()
            print(text)

在这个示例代码中,我们同样使用了PyPDF4库来读取PDF文件。通过遍历每一页并使用extract_text()函数提取页面的文本内容,我们可以检查文本中是否包含目录或脚注的标识符。如果页面不包含目录或脚注,我们可以对页面的文本内容进行进一步处理。

这些示例代码展示了如何使用PyPDF4库处理PDF文件中的特殊文本结构。你可以根据具体的需求和PDF文件的特点进行相应的调整和扩展。

十一、使用Python库进行文本校对和校正示例代码

在这里插入图片描述

提取的文本可能存在一些错误或不完整的情况,例如拼写错误、缺失的字符等。可以使用自动校对工具或人工校对来修正这些错误,以确保提取的文本质量。
在Python中,有一些库可以用于校对和校正文本,包括自动校对工具和人工校对。

  1. 使用pyspellchecker库进行自动拼写校正:
from spellchecker import SpellChecker

# 创建拼写校正器对象
spell = SpellChecker()

# 待校正的文本
text = "Ths is a smple sentnce with speling mstakes."

# 分割文本为单词
words = text.split()

# 校正拼写错误
corrected_words = []
for word in words:
    corrected_word = spell.correction(word)
    corrected_words.append(corrected_word)

# 重新组合校正后的文本
corrected_text = ' '.join(corrected_words)
print(corrected_text)

在这个示例代码中,我们使用了pyspellchecker库来进行自动拼写校正。首先,我们创建了一个拼写校正器对象。然后,我们将待校正的文本拆分为单词,并使用correction()函数对每个单词进行校正。最后,我们重新组合校正后的单词,得到校正后的文本。

  1. 使用人工校对进行文本修正:
def manual_correction(text):
    # 进行人工校对和修正
    corrected_text = text.replace("speling", "spelling")
    corrected_text = corrected_text.replace("smple", "simple")
    return corrected_text

# 待校正的文本
text = "Ths is a smple sentnce with speling mstakes."

# 进行人工校对和修正
corrected_text = manual_correction(text)
print(corrected_text)

在这个示例代码中,我们定义了一个manual_correction()函数,用于进行人工校对和修正。在函数中,我们使用replace()函数将特定的错误词汇替换为正确的词汇。然后,我们调用manual_correction()函数对待校正的文本进行人工校对和修正。

这些示例代码展示了如何使用Python库进行文本校对和校正。自动校对工具可以帮助修正拼写错误,而人工校对可以进行更复杂的修正。你可以根据具体需求选择适合的方法,并根据实际情况调整和扩展代码。

十二、知识点归纳

在这里插入图片描述

使用Python库对PyPDF4提取的文本进行清洗处理可以帮助去除不需要的内容、修复格式问题以及进行其他必要的文本处理。以下是一些常见的知识点归纳,可用于清洗处理PyPDF4提取的文本:

  1. 去除多余的空白字符:
    -使用strip()函数去除文本前后的空白字符。
    -使用正则表达式去除文本中的多余空白字符,例如使用re.sub()函数。

  2. 分割和合并文本:
    -使用split()函数将文本分割成单词、句子或其他指定的分隔符。
    -使用join()函数将分割的文本重新合并成一个字符串。

  3. 替换特定的文本:
    -使用replace()函数将指定的文本替换为其他内容。
    -使用正则表达式进行更复杂的文本替换,例如使用re.sub()函数。

  4. 移除特定的文本:
    -使用replace()函数将指定的文本替换为空字符串,从而移除它们。
    -使用正则表达式进行更灵活的文本移除操作,例如使用re.sub()函数。

  5. 处理特殊字符和编码问题:
    -使用字符串的编码和解码函数(如encode()decode())处理特殊字符和编码问题。
    -使用相关的Python库(如chardet)检测和处理文本的编码问题。

  6. 处理换行符和段落:
    -使用replace()函数将换行符替换为空格或其他字符,以适应特定的需求。
    -使用正则表达式进行更复杂的换行符处理,例如使用re.sub()函数。

  7. 进行文本规范化和标准化:
    -使用相关的Python库(如unicodedata)对文本进行规范化,例如去除重音符号、标点符号等。
    -使用自定义的规则和函数对文本进行标准化,例如将大写字母转换为小写字母、标准化日期格式等。

  8. 其他文本处理操作:
    -使用正则表达式进行文本匹配和提取。
    -使用Python库(如nltk)进行文本分词、词性标注、命名实体识别等自然语言处理任务。

在这里插入图片描述

以上是一些常见的知识点,可用于清洗处理PyPDF4提取的文本。根据具体的需求和文本的特点,你可以选择适当的方法和库来进行文本处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/474703.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在任何 Mac 上恢复永久删除照片的 5 种简单方法

Mac 为业余和专业摄影师提供了很多东西&#xff0c;从令人印象深刻的硬件到广泛的照片管理和编辑应用程序。它还提供了多种恢复丢失照片的方法&#xff0c;我们在本文中介绍了其中的五种方法&#xff0c;以帮助您避免潜在的灾难性情况。 Mac 上删除的照片去了哪里&#xff1f;…

高能脉冲电阻-高能陶瓷电阻

EAK无感实芯电阻器&#xff0c;高能电阻&#xff0c;高能脉冲电阻&#xff0c;高能陶瓷电阻 产品特性&#xff1a; Ⅰ100%陶瓷实芯压铸结构,由粘土、二氧华硅、瓷粉等无机材料经高温烧结而成。 Ⅱ承受高脉冲能量 ,适应高压,超高压环境,能用于1000KV以上电路瞬间功率达到3KKW以…

【阅读笔记】Kinematic On‐the‐Fly GPS Positioning Relative to a Moving Reference

Hermann B R, Evans A G, Law C S, et al. Kinematic On‐the‐Fly GPS Positioning Relative to a Moving Reference[J]. Navigation, 1995, 42(3): 487-501. 单词解释 Antenna swap&#xff1a;天线交换 pseudokinematic&#xff1a;伪运动学 ambiguity&#xff1a;双关、歧…

Web框架开发-django模型层(多表操作)

一、创建模型 实例: 作者模型:一个作者有姓名和年龄 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作者模型之间是一对一的关系(one-to-one) 出版商模型:出版商有名称,所在城市以及email。 书籍模型: 书籍有书名和出版…

Python面向对象三大特征(封装、继承、多态)

面向对象编程的三大特征&#xff1a;封装、继承和多态。 注意&#xff1a;在python面向对象编程中&#xff0c;子类对象可以传递给父类类型 一、封装 在Python中&#xff0c;封装是面向对象编程中的一种重要概念&#xff0c;它可以帮助我们实现数据隐藏、信息保护和代码复用。…

使用jscpd对比重复代码

背景 检查项目中重复的代码&#xff0c;或者代码片段 jscpd 两个文件对比 Jscpd 是一个用于检测代码复制和粘贴的工具&#xff0c;它可以比较两个文件并报告相似性的百分比。 以下是如何使用 Jscpd 来比较两个文件的示例&#xff1a; 首先&#xff0c;确保你已经安装了 Nod…

【Flutter学习笔记】9.7 动画过渡组件

参考资料&#xff1a;《Flutter实战第二版》9.7 动画过渡组件 “动画过渡组件”指的是在Widget属性发生变化时会执行过渡动画的组件&#xff0c;其最明显的一个特征就是会在内部管理一个AnimationController。controller定义了过渡动画的时长&#xff0c;而animation对象的定义…

Linux学习之C/C++文件操作底层调用及原理

前言&#xff1a;我们都知道&#xff0c;我们学习的C/C是无法直接与底层硬件进行交互的&#xff0c;所有需要与底层硬件的交互都是通过操作系统作为中介完成的&#xff0c;那Linux到底是怎么做到的呢&#xff1f;接下来我们将揭开它神秘的面纱。 目录 一&#xff0c;操作系统…

全平台7合一万能DIY小程序源码系统 带完整的安装代码包以及安装搭建教程

在当下的小程序市场中&#xff0c;虽然已有众多开发工具和服务平台&#xff0c;但很多用户仍然面临着开发难度大、功能不齐全、定制性差等问题。小编给大家分享一款全平台7合一万能DIY小程序源码系统。该系统旨在解决用户在小程序开发过程中的痛点&#xff0c;提供一站式的小程…

WordPress Plugin NotificationX插件 SQL注入漏洞复现(CVE-2024-1698)

0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。 0x02 漏洞概述 WordPress plugin NotificationX是一个应用插件。2.8.2版本及之前 存在安全漏洞,该…

飞腾+FPGA+AI电力行业智能数据采集与分析网闸解决方案

行业痛点: 安全物联网闸在监控平台中的具体作用&#xff1a;35KV变电站是煤矿的动力核心&#xff0c;采矿人员上下井、煤炭提升输送、矿井通风等核心设备均依靠变电站提供电源。监控中心及时掌握变电站的运行状态对煤矿的安全生产非常重要。如若外部通过监控网络来控制变电站会…

Hyper Casual FX

此包包含&#xff1a; 五彩纸屑-2种 灰尘 - 1 种 闪光灯 - 8 种类型 闪耀 - 3 种类型 闪亮 - 1 种 水-2种 它可以在没有任何设置的情况下开箱即用 下载&#xff1a;​​Unity资源商店链接资源下载链接 效果图&#xff1a;

C语言编程实现文件加解密

目录 1. OpenSSL导入程序项目2. 编写加解密程序1. 程序代码2. 命令行传参3. 文件的读写4. 加解密中的细节 1. OpenSSL导入程序项目 下载并安装OpenSSL&#xff0c;下载地址打开VS&#xff0c;创建控制台应用 记得配置文件位置 右键项目名称&#xff0c;找到属性&#xff0c;并…

MySQL面试复习记录

一、mysql文章地址汇总 以下均为蓝云飘飘的文章&#xff1a; MySQL数据库&#xff08;一&#xff09;_写出sql语句,列出薪资比‘王海涛’的薪资高的所有员工,显示姓名,薪资-CSDN博客 MySQL数据库&#xff08;二&#xff09;_sql里的性别是什么代表-CSDN博客 ★★★★★ My…

(基础)AJAX概念和axios使用、URL、请求方法和数据提交、HTTP协议、接口、form-serialize插件

AJAX概念和axios使用 AJAX概念 AJAX就是使用XMLHttpRequest对象与服务器通信&#xff0c;它可以使用JSON、XML、HTML和text文本等格式发送和接收数据&#xff0c;AJAX最吸引人的就是它的异步特性&#xff0c;也就是说它可以在不重新刷新页面的情况下与服务器通信&#xff0c;…

Effect:由渲染本身引起的副作用

React 组件中的两种逻辑类型&#xff1a; 渲染逻辑代码 位于组件的顶层&#xff0c;接收 props 和 state&#xff0c;进行转换&#xff0c;返回屏幕上看到的 JSX&#xff0c;只计算不做其他任何事情&#xff1b;事件处理程序 嵌套在组件内部的函数&#xff0c;由特定的用户操作…

【timm笔记1】

1. 安装timm pip install timm2. 打印模型 import timm# 获取并打印所有可用的预训练模型名称 available_models = timm.list_models() # 打印出所有的模型 print(available_models)# 打印所有包含"resnet"字符的模型名称 resnet_models = timm.list_models(*resne…

2024年03月 Discourse 3.3.0.beta1 版本的更新

在这个版本的更新中 Discourse 完成了 Ember 5 版本的升级和更新。 Ember.js是一个用于创建 web 应用的 开源JavaScript MVC 框架&#xff0c;采用基于字符串的Handlebars 模板&#xff0c;支持双向绑定、观察者模式、计算属性&#xff08;依赖其他属性动态变化&#xff09;、…

Oracle数据库冷备份(实例)

冷备份 1、 select file#,name,bytes/1024/1024 mb from v$datafile; 2 、缩减 便于copy alter database datafile 2 resize 100m;show parameter spfilecreate undo tablespace u2 datafile /u01oracle/oradata/qq/u2.dbf size 2m autoextend on; //建新的 alter system…

为prj添加kconfig支持

为prj添加kconfig支持 KConfig是一个配置系统&#xff0c;它允许用户和开发者通过配置文件/配置界面选择需要的编译选项。目前大量的项目都有用到该配置系统&#xff08;linux、u-boot、rt-thread、esp-idf/adf、zephyr等&#xff09;&#xff0c;可以说是一个项目的构建系统中…