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

news2024/11/13 9:30:21

传奇开心果博文系列

  • 系列博文目录
    • 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提取的文本。根据具体的需求和文本的特点,你可以选择适当的方法和库来进行文本处理。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

制造业工厂为什么需要生产管理MES系统

一、制造业的生产管理需求与痛点 日趋激烈的市场竞争、客户对产品多样化要求越来越高&#xff0c;导致产品的生命周期缩短&#xff0c;企业需要通过智能制造实现降本、增效、提质&#xff0c;以提高企业的快速响应能力和核心竞争力。 二、生产管理的过程的痛点具体表现如下&am…

ai写作润色工具有哪些?工具大盘点!

ai写作润色工具有哪些&#xff1f;在内容创作日益繁荣的今天&#xff0c;无论是今日头条还是百家号自媒体平台&#xff0c;一篇好的文章往往能吸引大量的读者。而一篇好的文章&#xff0c;除了内容有深度、观点独到之外&#xff0c;还需要有吸引人的标题和流畅、生动的文笔。这…

【大数据】三、HDFS 基础原理

HDFS HDFS 是一种典型的分布式文件系统&#xff0c;但其不是唯一的分布式文件系统 HDFS 是一种新型的文件系统&#xff0c;不同于传统的文件系统&#xff0c;新型文件系统解决了传统文件系统存在的负载不均衡与网络瓶颈问题。 但归根结底、这些弊端都是由传统文件系统所存在…

利用matplotlib对list数据画曲线

平时有时候分析数据需要画一张如下较为完整的图&#xff0c;所以写个博文在有需要的时候过来快速粘贴下 import matplotlib.pyplot as plt# 两个示例列表 list_xl [0.219683, 0.217855, 0.214003, 0.211832, 0.211356, 0.210974, 0.210622, 0.210312, 0.210040, 0.209794,0.…

qt5-入门-国际化

参考&#xff1a; Qt 国际化(上)_w3cschool https://www.w3cschool.cn/learnroadqt/fwkx1j4j.html QT5实现语言国际化&#xff08;中英文界面动态切换&#xff0c;超详细&#xff09;_qt qevent::languagechange-CSDN博客 https://blog.csdn.net/m0_49047167/article/details/…

Mysql总结(附思维导图)

Mysql Mysql索引 使用 创建主键索引 在对应字段后指定primary_key&#xff1a;id int primary key 创建唯一索引 在对应字段后指定unique_key&#xff1a;name varchar(20) unique 创建普通索引 在创建表的最后&#xff0c;指定某列或某几列&#xff1a;index(name) 创建全…

vue前端解析jwt

vue前端解析jwt 我们可以用在线解析看解析的结果&#xff1a;https://www.lddgo.net/encrypt/jwt-decrypt 但是如果在前端需要解析token&#xff0c;拿到其中的权限信息&#xff0c;可以这样解决。 在线的&#xff1a; 完美解决&#xff1a; 代码&#xff1a; function par…

(MYSQL)数据库中排序与分页操作

排序&#xff1a; 使用ODER BY 语句&#xff08;在select语句的末尾&#xff09;进行排序其中&#xff1a; 加ASC 升序&#xff1b; 加DESC 降序&#xff1b; 排序举例&#xff1a; SELECT id,name,salary FROM employees ORDER BY id; 注&#xff1a;此时就是以id升序排列表…

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

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

Hutool中的这些工具类,太实用了

前言 今天给大家介绍一个能够帮助大家提升开发效率的开源工具包:hutool。 Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 Hutool的设计思想是尽量减少重复的定义…

SAP PM 维护计划参数详解

本文的主要目的是解释调度参数如何影响预防性维护中计划日期的计算——基于时 间的单周期计划。 调度参数&#xff1a; 我们直接在维护计划中维护单周期计划的调度参数&#xff0c;如下图 计划标识 是计算计划日期的依据&#xff1a; 时间&#xff1a; 月份的计算基础始终…

成为高效Java工程师的干货笔记

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流&#xff0c;摸鱼划水的小伙伴&#xff0c;请点击【全栈技术交流群】 作为一名Java工程师&…

CSS字体图标

文章目录 1. 概念2. 阿里图标 iconfont2.1. 网址2.2. 使用方法2.3. 注意事项2.3.1. 原因 3. font-awesome 图标3.1. 网址3.2. 使用方法 1. 概念 本质就是一个字体&#xff0c;可以灵活修改它的样式&#xff0c;降低服务器请求的次数&#xff0c;同时相比图片更加清晰。 2. 阿…

IBM:《CEO生成式 AI行动指南利用生成式 AI推动变革--所需了解的事项和所需采取的行动》

2024年2月IBM分享《CEO生成式 AI行动指南利用生成式 AI推动变革》报告。在该报告中&#xff0c;讨论了成功转型所必不可少的基本领导素质&#xff0c;并展示了如何将这些技能应用于培养 AI 赋能的人才、发展 AI 赋能的业务&#xff0c;以及利用 AI 赋能的数据与技术。 报告提到…

【环境搭建和安装】thingsboard二次开发环境搭建

文章目录 1.安装JAVA2.安装maven环境3.安装nodeJS4.安装git环境5.安装npm依赖关系 提示&#xff1a; 1.我自己下载存放路径比较混乱&#xff0c;下载的文件尽量在一个新建的文件夹存放&#xff0c;目录全英更好。 2.环境是为了开源物联网平台&#xff0c;环境搭建和安装部署是成…

力扣刷题Days20-151. 反转字符串中的单词(js)

目录 1,题目 2&#xff0c;代码 1&#xff0c;利用js函数 2&#xff0c;双指针 3&#xff0c;双指针加队列 3&#xff0c;学习与总结 1&#xff0c;正则表达式 / \s /&#xff1a; 2&#xff0c;结合使用 split 和正则表达式&#xff1a; 1,题目 给你一个字符串 s &am…

【数据集】全球土地利用数据集:GRIPCmap

GRIPCmap数据概述 GRIPC&#xff08;Global rain-fed, irrigated, and paddy croplands&#xff09;论文介绍数据下载 参考 GRIPC&#xff08;Global rain-fed, irrigated, and paddy croplands&#xff09; 论文介绍 数据下载 下载地址-Index of /public/friedl/GRIPCmap/ …

mysql面试题以及答案

1 基础 1.1、MySQL有哪些数据库类型&#xff1f; 数值类型 有包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT&#xff0c;分别表示 1 字节、2 字节、3 字节、4 字节、8 字节的整数类型。 1&#xff09;任何整数类型都可以加上 UNSIGNED 属性&#xff0c;表示无符号整数。 …

做外贸soho 是最好的选择吗

前几日&#xff0c;见到一个创业的朋友又去找了一个单位上班&#xff0c;询问其原因&#xff0c;对方说不是没有客户&#xff0c;也不是没有回头客。 只是比起创业更重要的是一家老小的生存问题&#xff0c;他说家里有两个要吃奶粉的孩子&#xff0c;老婆也不能上班&#xff0…