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

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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库去除空白字符示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/2d4645ede29940dc8a4545bc005ea4df.jpg)


使用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库合并段落和行示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/96a29a6cf9854faea1eb8abe40990586.jpg)


当从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库处理特殊字符和编码示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/103666acfcb444a09b8247da0df8d131.png)


处理特殊字符和编码是在提取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字符。最后,我们打印解码后的文本。


2. 使用第三方库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`库来解析字体信息等。


3. 使用`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()`函数来检测文本的编码。然后,我们使用检测到的编码来解码文本,并打印解码后的结果。


4. 使用`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库处理换行符示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/23de2f86eb7345319a267b5cc312444c.jpg)


我们使用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库去除特殊标记和符号示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/7db7d6ef2e6243b6a1c6757f0aa0e61e.jpg)


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


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



import re

示例文本

text = “This is some sample text with [footnote] and tags.”

去除方括号中的内容

cleaned_text = re.sub(r’[.*?]', ‘’, text)

去除尖括号中的内容

cleaned_text = re.sub(r’<.*?>', ‘’, cleaned_text)

print(cleaned_text)


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


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


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


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



import re

示例文本

text = “This is some sample text with [footnote] and tags.”

将方括号中的内容替换为占位符

cleaned_text = re.sub(r’[.*?]', ‘[placeholder]’, text)

将尖括号中的内容替换为占位符

cleaned_text = re.sub(r’<.*?>', ‘’, cleaned_text)

print(cleaned_text)


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


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


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


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


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



import re

示例文本

text = “This is some sample text with [footnote] and tags.”

将方括号中的内容替换为特定字符串

cleaned_text = re.sub(r’[.*?]', ‘FOOTNOTE’, text)

将尖括号中的内容替换为特定字符串

cleaned_text = re.sub(r’<.*?>', ‘CITATION’, cleaned_text)

print(cleaned_text)


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


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


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


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


![在这里插入图片描述](https://img-blog.csdnimg.cn/6541d42e532b409fbc51c0f8c5094b55.jpg)


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


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()`函数将文本中的缩写词替换为其完整形式。


![在这里插入图片描述](https://img-blog.csdnimg.cn/9bcaac0a0aa74351b803850dde41b0b3.jpg)


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



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库处理特殊文本结构示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/43b1790476564d1f82799df11e523ca9.png)


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()`函数提取表格数据,并对每个表格进行进一步处理。


2. 忽略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库进行文本校对和校正示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/b5135431b8094255ae240a575eb6986b.gif)


提取的文本可能存在一些错误或不完整的情况,例如拼写错误、缺失的字符等。可以使用自动校对工具或人工校对来修正这些错误,以确保提取的文本质量。  
 在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)

文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值