导读:本文的目标是介绍一些Python库,帮助你从类似于PDF和Word DOCX 这样的二进制文件中提取数据。我们也将了解和学习如何从网络信息源(web feeds)(如RSS)中获取数据,以及利用一个库帮助解析HTML文本并从文档中提取原始文本。
我们还将学习如何从不同来源提取原始文本,对其进行规范化,并基于它创建一个用户定义的语料库。
在本文中,你将学习7个不同的实例。我们将学习从PDF文件、Word文档和Web中获取数据。PDF和Word文档是二进制文件,通过Web,你将获得HTML格式的数据,因此,我们也会对数据执行规范化和原始文本转换任务。
作者:克里希纳·巴夫萨、纳雷什·库马尔、普拉塔普·丹蒂
如需转载请联系大数据(ID:hzdashuju)
01 字符串操作的重要性
作为一名NLP专家,你将要处理大量的文本内容。当你在处理文本时,你必须知道一些字符串操作。我们将从几个简短的范例入手,帮助你理解str类及其在Python中的相关操作。
1. 准备工作
这里,你仅仅需要Python解释器和一个文本编辑器。我们将使用join(连接)、split(分割)、addition(加法)和multiplication(乘法)运算符以及索引。
2. 如何实现
(1)创建一个新的Python文件,命名为StringOps1.py。
(2)定义以下两个对象:
namesList = ['Tuffy','Ali','Nysha','Tim' ]
sentence = 'My dog sleeps on sofa'
第一个对象nameList是一个包含若干名字的字符串列表,第二个对象sentence是一个包含一句话的字符串对象。
(3)首先,我们看看join函数的特点以及它的功能:
names = ';'.join(namesList)
print(type(names), ':', names)
join()函数可以被任意一个string对象调用,它的输入参数是一个str对象的列表。通过将调用字符串的内容作为连接分隔符,它将所有str对象连接成一个str对象,并返回连接后的对象。运行这两行代码后,你得到的输出如下:
<class 'str'> : Tuffy;Ali;Nysha;Tim
(4)接下来,我们来看split方法的功能:
wordList = sentence.split(' ')
print((type(wordList)), ':', wordList)
当split函数调用一个字符串时,它会将其内容分割为多个str对象,创建一个包含这些字符串对象的列表,并返回该列表。该函数接受单个str对象作为参数,表示分隔符。运行代码,得到如下输出:
<class 'list'> : ['My', 'dog', 'sleeps', 'on', 'sofa']
(5)算术运算符+和*也可以用于字符串。添加以下代码并输出:
additionExample = 'ganehsa' + 'ganesha' + 'ganesha'
multiplicationExample = 'ganesha' * 2
print('Text Additions :', additionExample)
print('Text Multiplication :', multiplicationExample)
我们首先看一下输出结果,随后讨论其工作原理:
Text Additions: ganehsaganeshaganesha
Text Multiplication: ganeshaganesha
+运算符被称为连接符,它将字符串连接为单个str对象,产生一个新的字符串。如前所述,我们也可以使用*运算符对字符串做乘法。此外,需要注意的是这些操作不会添加任何额外的内容,例如在字符串之间插入空格。
(6)接下来,我们来了解一下字符串中的字符索引。添加下列几行代码:
str = 'Python NLTK'
print(str[1])
print(str[-3])
首先,我们声明一个新的 string 对象。然后可以直接访问字符串中的第二个字符(y)。这里还有个小技巧:Python允许你在访问任何列表对象时使用负索引,比如说-1意味着最后一个成员,-2是倒数第二个成员,依此类推。例如,在前面代码的str对象中,索引7和-4是相同的字符N:
Output: <class 'str'> : Tuffy;Ali;Nysha;Tim
<class 'list'> : ['My', 'dog', 'sleeps', 'on', 'sofa']
Text Additions : ganehsaganeshaganesha
Text Multiplication : ganeshaganesha
y L
3. 工作原理
我们使用split()函数将一个字符串变成了一个字符串列表,并使用join()函数将一个字符串列表变成了一个字符串。接下来我们了解了有关字符串的一些算术运算符的用法。
需要注意的是,我们不能在字符串中使用“-”(负号)和“/”(除法)运算符。最后,我们了解了如何在任一字符串中访问单个字符,特别值得一提的是,我们可以在访问字符串时使用负索引。
本段实例非常简单和直观,主要是介绍Python允许的一些常见和不常见的字符串操作。接下来,我们将在以上操作基础上继续学习一些字符串操作。
02 深入实践字符串操作
接下来,我们将了解子字符串、字符串替换以及如何访问一个字符串的所有字符。
1. 如何实现
(1)创建一个新的Python文件,命名为StringOps2.py并定义以下string对象:
str = 'NLTK Dolly Python'
(2)访问str对象中以第四个字符作为结束的子串。
print('Substring ends at:',str[:4])
我们知道索引从零开始,因此将返回由第0个到第3个字符组成的子串。运行代码,输出如下:
Substring ends at: NLTK
(3)访问str对象中从某个点开始直到末尾的子串:
print('Substring starts from:',str[11:] )
以上代码指示解释器返回str对象中从索引11到结束的一个子串。运行代码,得到以下输出:
Substring starts from: Python
(4)从str对象中访问包含Dolly的子串。添加以下行:
print('Substring :',str[5:10])
以上代码返回从索引5到10的字符,不包括第10个字符。输出是:
Substring : Dolly
(5)我们在前一段中已经了解了负索引在字符串操作中的应用。现在我们试试看它在获取子串中的作用:
print('Substring fancy:', str[-12:-7])
Run and check the output, it will be –
Substring fancy: Dolly
这里得到的输出与上一步完全相同!为了理解这个结果,我们做一些计算:-1表示最后一个字符,-2是倒数第二个字符,依此类推。你将会发现[5:10]和[-12:-7]在这个例子中得出的子串是相同的。
(6)了解in操作符在if语句中的用法:
if 'NLTK' in str:
print('found NLTK')
运行以上代码,程序的输出如下所示:
found NLTK
如上所示,in操作符会检查左边的字符串是否属于右边字符串的子串。
(7)了解str对象中replace函数的使用:
replaced = str.replace('Dolly', 'Dorothy')
print('Replaced String:', replaced)
replace函数只需要两个参数。第一个是需要被替换的子字符串,第二个是用来替换前面子字符串的新子字符串。replace函数返回一个新的string对象,并且它不会修改调用它的字符串,运行代码,有如下输出:
Replaced String: NLTK Dorothy Python
(8)最后,迭代上面得到的replaced对象并访问它的每一个字符: