Python用于NLP :处理文本和PDF文件

论坛 期权论坛 期权     
Python程序员   2019-6-9 21:26   1449   0

提示:代码图片可以点击全屏查看,双指操作还可以放大缩小。
这是我的Python用于自然语言处理(NLP)系列文章的第一篇文章。在本文中,我们将从Python for NLP的基础知识开始。我们将看到如何使用Python处理简单的文本文件和PDF文件。
处理文本文件
文本文件可能是你在NLP工作中遇到的最基本类型的文件。在本节中,我们将了解如何用Python读取文本文件,创建文本文件以及将数据写入文本文件。
阅读文本文件
使用以下文本创建一个文本文件,并使用“.txt”扩展名将其保存在本地目录中。


在我的例子中,我将名为“myfile.txt”的文件存储在我的D盘根目录中。
阅读文件的所有内容
现在让我们看看我们如何阅读文件的全部内容。第一步是指定文件的路径,如下所示:


要打开文件,你可以使用Python的内置open函数。如果你执行上面的代码并且没有看到错误,则表示你的文件已成功打开。确保将文件路径更改为保存文本文件的位置。
现在让我们看看myfile变量中存储了什么:


输出如下所示:


输出显示该myfile变量是myfile.txt文件的容器,并以只读模式打开文件。
如果指定了错误的文件路径,则可能会收到以下错误:




每当你得到Errno 2时,可能有两个原因。你的文件不存在或者你给open函数提供了错误的文件路径。
现在,让我们读一下该文件的内容。为此,你需要在myfile变量上调用read()函数,如下所示:


在输出中,你应该可以看到文件的文本,如下所示:


现在,如果你尝试再次调用read,控制台上将不会打印任何内容:


这是因为一旦调用该read方法,光标就会移动到文本的末尾。因此,当你再次调用read时,不会显示任何内容,因为已经没有更多要打印的文本了。

一个解决这个问题的方案就是在调用read()方法之后,调用seek()方法并使用0作为参数。
这会将光标移回文本文件的开头。查看以下代码以了解其工作原理:


在输出中,你将看到文本内容被打印了两次。
一旦完成文件处理后,关闭文件以便其他应用程序可以访问显得非常重要。为此,你需要调用close()方法。


逐行读取文件
我们也可以逐行读取文件内容,而不是一次读取文件的所有内容。为此,我们需要执行readlines()方法,该方法可以将文本文件中的每一行作为列表项返回。


在输出中,你将看到文本文件中的每一行都变为了列表项:


在多数情况下,这会使文本更容易相处。例如,我们现在可以轻松遍历每一行并打印行中的第一个单词。


输出如下所示:


写入文本文件
要写入文本文件,只需在打开文件时将打开模式设置为w或w+。前者在写入模式下打开文件,后者在读取和写入模式下打开文件。如果该文件不存在,则会创建该文件。值得一提的是,如果你以w或w+模式打开一个文件时,则将移除所有的文件内容,如下所示:


在输出中,由于使用w+模式打开文件,因此屏幕上不会显示任何内容,文件的所有内容都已被删除。你可以附加文字来避免这种情况,我也会在下面提到。
现在,让我们使用write()方法在文件中写一些内容。


在上面的脚本中,我们将文本写入文件,然后调用seek()方法将光标移回开始,然后调用read方法读取文件的内容。在输出中,你将看到新添加的内容,如下所示:


通常,你不需要删除文件的现有内容。相反,你可能需要在文件末尾添加内容。
为此,你需要以a+模式打开文件,该模式能够添加和读取文件内容。
再次创建一个包含以下内容的文件,并在D盘根目录中将其保存为“myfile.txt”:


执行以下脚本以使用添加模式打开文件:


在输出中,你将看到文件的内容。
接下来,让我们在文件中添加一些文本。


现在我们再次阅读文件内容:


在输出中,你将在文末看到新添加的行,如下所示:


最后,在继续下一节之前,让我们看看在执行所需操作后如何使用上下文管理器自动关闭文件。


使用with关键字,如上所示,你不需要明确关闭文件。相反,上面的脚本打开文件,读取内容,然后自动关闭它。

处理PDF文件
除了文本文件,我们还经常需要使用PDF文件来执行不同的自然语言处理任务。默认情况下,Python没有任何可用于读取或写入PDF文件的内置库。但是我们可以使用PyPDF2库。
在我们使用PyPDF2库之前,需要安装它。如果你使用pip安装程序,则可以使用以下命令安装PyPDF2库:


或者,如果你使用的是Anaconda环境中的Python,则可以在conda命令提示符下执行以下命令:


注意:这里需要提到的是PDF文档可以从不同的来源创建,如word文档,图像等。在本文中,我们将只处理使用word文档创建的PDF文档。对于使用图像创建的PDF文档,还有其他专门的库,我将在后面的文章中解释。目前,我们只使用使用word文档生成的PDF文档。
作为可以使用的虚拟文档,你可以从以下链接下载PDF:http://www.bavtailor.com/wp-content/uploads/2018/10/Lorem-Ipsum.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文件:
http://ctan.math.utah.edu/ctan/tex-archive/macros/latex/contrib/lipsum/lipsum.pdf
将其保存在本地目录中。下载文件的名称为“lipsum.pdf”。
执行以下脚本查看文件中的页数:


在输出中,你将看到打印出87,因为该PDF中有87页。让我们在控制台上打印文档中的所有页面:

在输出中,你将看到打印在屏幕上的PDF文档的所有页面。
结论
阅读和编写文本文档是开发自然语言处理应用程序的基本步骤。在本文中,我们解释了如何使用Python处理文本和PDF文件。我们看到了如何读写文本和PDF文件。在下一篇文章中,我们将开始讨论其他一些NLP任务,例如使用spaCy库进行词干化,词形还原化,标记化。
英文原文:https://stackabuse.com/python-for-nlp-working-with-text-and-pdf-files/    译者:狼行千里吃鸡  
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:16
帖子:27
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP