Python⽤于NLP:处理⽂本和PDF⽂件
提⽰:代码图⽚可以点击全屏查看,双指操作还可以放⼤缩⼩。
这是我的Python⽤于⾃然语⾔处理(NLP)系列⽂章的第⼀篇⽂章。在本⽂中,我们将从Python for NLP的基础知识开始。我们将看到如何使⽤Python处理简单的⽂本⽂件和PDF⽂件。
处理⽂本⽂件
⽂本⽂件可能是你在NLP⼯作中遇到的最基本类型的⽂件。在本节中,我们将了解如何⽤Python读取⽂本⽂件,创建⽂本⽂件以及将数据写⼊⽂本⽂件。
阅读⽂本⽂件
使⽤以下⽂本创建⼀个⽂本⽂件,并使⽤“.txt”扩展名将其保存在本地⽬录中。
在我的例⼦中,我将名为“”的⽂件存储在我的D盘根⽬录中。python中文文档
阅读⽂件的所有内容
现在让我们看看我们如何阅读⽂件的全部内容。第⼀步是指定⽂件的路径,如下所⽰:
要打开⽂件,你可以使⽤Python的内置open函数。如果你执⾏上⾯的代码并且没有看到错误,则表⽰你的⽂件已成功打开。确保将⽂件路径更改为保存⽂本⽂件的位置。
现在让我们看看myfile变量中存储了什么:
输出如下所⽰:
输出显⽰该myfile变量是⽂件的容器,并以只读模式打开⽂件。
如果指定了错误的⽂件路径,则可能会收到以下错误:
每当你得到Errno 2时,可能有两个原因。你的⽂件不存在或者你给open函数提供了错误的⽂件路径。
现在,让我们读⼀下该⽂件的内容。为此,你需要在myfile变量上调⽤read()函数,如下所⽰:
在输出中,你应该可以看到⽂件的⽂本,如下所⽰:
现在,如果你尝试再次调⽤read,控制台上将不会打印任何内容:
这是因为⼀旦调⽤该read⽅法,光标就会移动到⽂本的末尾。因此,当你再次调⽤read时,不会显⽰任何内容,因为已经没有更多要打印的⽂本了。
⼀个解决这个问题的⽅案就是在调⽤read()⽅法之后,调⽤seek()⽅法并使⽤0作为参数。
这会将光标移回⽂本⽂件的开头。查看以下代码以了解其⼯作原理:
在输出中,你将看到⽂本内容被打印了两次。
⼀旦完成⽂件处理后,关闭⽂件以便其他应⽤程序可以访问显得⾮常重要。为此,你需要调⽤close()⽅法。
逐⾏读取⽂件
我们也可以逐⾏读取⽂件内容,⽽不是⼀次读取⽂件的所有内容。为此,我们需要执⾏readlines()⽅法,该⽅法可以将⽂本⽂件中的每⼀⾏作为列表项返回。
在输出中,你将看到⽂本⽂件中的每⼀⾏都变为了列表项:
在多数情况下,这会使⽂本更容易相处。例如,我们现在可以轻松遍历每⼀⾏并打印⾏中的第⼀个单词。
输出如下所⽰:
写⼊⽂本⽂件
要写⼊⽂本⽂件,只需在打开⽂件时将打开模式设置为w或w+。前者在写⼊模式下打开⽂件,后者在读取和写⼊模式下打开⽂件。如果该⽂件不存在,则会创建该⽂件。值得⼀提的是,如果你以w或w+模式打开⼀个⽂件时,则将移除所有的⽂件内容,如下所⽰:
在输出中,由于使⽤w+模式打开⽂件,因此屏幕上不会显⽰任何内容,⽂件的所有内容都已被删除。你可以附加⽂字来避免这种情况,我也会在下⾯提到。
现在,让我们使⽤write()⽅法在⽂件中写⼀些内容。
在上⾯的脚本中,我们将⽂本写⼊⽂件,然后调⽤seek()⽅法将光标移回开始,然后调⽤read⽅法读
取⽂件的内容。在输出中,你将看到新添加的内容,如下所⽰:
通常,你不需要删除⽂件的现有内容。相反,你可能需要在⽂件末尾添加内容。
为此,你需要以a+模式打开⽂件,该模式能够添加和读取⽂件内容。
再次创建⼀个包含以下内容的⽂件,并在D盘根⽬录中将其保存为“”:
执⾏以下脚本以使⽤添加模式打开⽂件:
在输出中,你将看到⽂件的内容。
接下来,让我们在⽂件中添加⼀些⽂本。
现在我们再次阅读⽂件内容:
在输出中,你将在⽂末看到新添加的⾏,如下所⽰:
最后,在继续下⼀节之前,让我们看看在执⾏所需操作后如何使⽤上下⽂管理器⾃动关闭⽂件。
使⽤with关键字,如上所⽰,你不需要明确关闭⽂件。相反,上⾯的脚本打开⽂件,读取内容,然后⾃动关闭它。
处理PDF⽂件
除了⽂本⽂件,我们还经常需要使⽤PDF⽂件来执⾏不同的⾃然语⾔处理任务。默认情况下,Python没有任何可⽤于读取或写⼊PDF⽂件的内置库。但是我们可以使⽤PyPDF2库。
在我们使⽤PyPDF2库之前,需要安装它。如果你使⽤pip安装程序,则可以使⽤以下命令安装PyPDF
2库:
或者,如果你使⽤的是Anaconda环境中的Python,则可以在conda命令提⽰符下执⾏以下命令:
注意:这⾥需要提到的是PDF⽂档可以从不同的来源创建,如word⽂档,图像等。在本⽂中,我们将只处理使⽤word⽂档创建的PDF⽂档。对于使⽤图像创建的PDF⽂档,还有其他专门的库,我将在后⾯的⽂章中解释。⽬前,我们只使⽤使⽤word⽂档⽣成的PDF⽂档。
将下载的⽂档保存在D盘根⽬录下。
阅读PDF⽂档
要阅读PDF⽂档,⾸先,我们必须要像其他普通⽂件⼀样打开它。使⽤以下脚本:
值得⼀提的是,在打开PDF⽂件时,必须将模式设置为“读取⼆进制”的rb模式,因为⼤多数PDF⽂件都
是⼆进制格式。
打开⽂件后,我们需要调⽤PyPDF2库中的PdfFileReader()函数,如下所⽰:
现在使⽤pdf_document变量,我们可以执⾏各种读取功能。例如,要获取PDF⽂档中的总页数,我们可以使⽤以下numPages属性:
由于我们只有⼀页⽂档,在我们的PDF⽂档中,你将在结果中看到1。
最后,要从PDF⽂档中提取⽂本,⾸先需要使⽤getPage()函数获取PDF⽂档的页⾯。
接下来,你可以调⽤extractText()函数从特定页⾯中提取⽂本。
以下脚本从PDF的第⼀页中提取⽂本,然后将其打印在控制台上。
在结果中,你应该看到PDF第⼀页中的⽂本。
写⼊PDF⽂档
由于字体和其他约束,⽆法使⽤PyPDF2库直接将Python字符串写⼊PDF⽂档。但是,为了演⽰,我们将从PDF⽂档中读取内容,然后将该内容写⼊我们将创建的另⼀个PDF⽂件。
让我们⾸先阅读PDF⽂档第⼀页的内容。
上⾯的脚本读取了我们PDF⽂档的第⼀页。现在,我们可以使⽤以下脚本将第⼀页中的内容写⼊新的PDF⽂档:
上⾯的脚本创建了⼀个可⽤于将内容写⼊PDF⽂件的对象。⾸先,我们将向这个对象添加⼀个页⾯,并将我们从另⼀个PDF中检索到的页⾯传递给它。
接下来,我们需要打开⼀个具有wb(写⼆进制)权限的新⽂件。打开具有此类权限的⽂件会创建⼀个新⽂件,如果⽂件不存在的话。
最后,我们需要在PDF编写对象上调⽤write()⽅法并将新创建的⽂件传递给它。
关闭mypdf和pdf_output_file⽂件,然后转到程序的⼯作⽬录。你应该在编辑器中看到⼀个新⽂件new_pdf_file.pdf。打开⽂件,你应该看到它包含来⾃原始PDF的第⼀页的内容。
让我们尝试阅读新创建的PDF⽂档的内容:
现在让我们使⽤⼀个更⼤的PDF⽂件。从以下链接下载PDF⽂件:
将其保存在本地⽬录中。下载⽂件的名称为“lipsum.pdf”。
执⾏以下脚本查看⽂件中的页数:
在输出中,你将看到打印出87,因为该PDF中有87页。让我们在控制台上打印⽂档中的所有页⾯:
在输出中,你将看到打印在屏幕上的PDF⽂档的所有页⾯。
结论
阅读和编写⽂本⽂档是开发⾃然语⾔处理应⽤程序的基本步骤。在本⽂中,我们解释了如何使⽤Python处理⽂本和PDF⽂件。我们看到了如何读写⽂本和PDF⽂件。在下⼀篇⽂章中,我们将开始讨论其他⼀些NLP任务,例如使⽤spaCy库进⾏词⼲化,词形还原化,标记化。
译者:狼⾏千⾥吃鸡

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。