Python Web 爬取 处理文本
在上一章中,我们已经看到了如何处理作为网络爬取内容的一部分而获得的视频和图像。在这一章中,我们将通过使用Python库来处理文本分析,并将详细了解这方面的情况。
简介
你可以通过使用名为Natural Language Tool Kit(NLTK)的Python库来进行文本分析。在进入NLTK的概念之前,让我们先了解一下文本分析和网络爬虫之间的关系。
分析文本中的单词可以让我们知道哪些单词是重要的,哪些单词是不寻常的,单词是如何分组的。这种分析可以减轻网络搜刮的任务。
开始使用NLTK
自然语言工具包(NLTK)是一组Python库,专门用于识别和标记英语等自然语言文本中的语音部分。
安装NLTK
你可以使用下面的命令在Python中安装NLTK −
pip install nltk
如果你使用的是Anaconda,那么可以通过以下命令来构建NLTK的conda包-
conda install -c anaconda nltk
下载NLTK的数据
安装NLTK后,我们必须下载预设文本库。但是在下载预设文本库之前,我们需要在 import 命令的帮助下导入NLTK,如下所示
mport nltk
现在,在以下命令的帮助下,可以下载NLTK的数据-
nltk.download()
安装NLTK的所有可用软件包将需要一些时间,但我们总是建议安装所有的软件包。
安装其他必要的软件包
我们还需要一些其他的Python软件包,如 gensim 和 pattern ,以便通过使用NLTK进行文本分析以及建立自然语言处理应用程序。
gensim - 一个强大的语义建模库,对许多应用都很有用。它可以通过以下命令来安装
pip install gensim
模式 - 用来使 gensim 包正常工作。它可以通过以下命令来安装 –
pip install pattern
Tokenization
将给定的文本分解为较小的单元,称为标记,这一过程称为标记化。这些标记可以是单词、数字或标点符号。它也被称为 词的分割。
例子
输入 - Ram, Mohan 和 Sohan 是我的朋友。
NLTK模块为标记化提供了不同的包。我们可以根据自己的要求使用这些包。这里描述了其中的一些包–
sent_tokenize包 --该包将把输入的文本划分为句子。你可以使用下面的命令来导入这个包—-。
from nltk.tokenize import sent_tokenize
word_tokenize包 - 这个包将把输入的文本划分为单词。你可以使用下面的命令来导入这个包 –
from nltk.tokenize import word_tokenize
WordPunctTokenizer包 --这个包将把输入的文本以及标点符号分成单词。你可以使用下面的命令来导入这个包 –
from nltk.tokenize import WordPuncttokenizer
词干
在任何语言中,都有不同形式的词汇。由于语法上的原因,一种语言包括了很多变化。例如,考虑到 民主 、 民主 和 民主化 这些词 。 对于机器学习和网络搜刮项目来说,重要的是让机器理解这些不同的词有相同的基本形式。因此,我们可以说,在分析文本时,爬取单词的基本形式是有用的。
这可以通过干化来实现,干化可以被定义为通过砍掉单词的末端来爬取单词的基本形式的启发式过程。
NLTK模块提供了不同的干化包。我们可以根据自己的要求来使用这些包。以下是其中一些包的介绍
PorterStemmer包 --这个Python干化包使用Porter的算法来爬取基本形式。你可以使用以下命令来导入这个包
from nltk.stem.porter import PorterStemmer
例如,将单词 ‘writing ‘作为输入给这个干系人后,输出将是干系人之后的单词 ‘write ‘。
LancasterStemmer包 --Lancaster的算法被这个Python干化包用来爬取基本形式。你可以使用下面的命令来导入这个包 —
from nltk.stem.lancaster import LancasterStemmer
例如,将单词 ‘writing ‘作为输入给这个干系人后,输出将是干系人后的单词 ‘writ ‘。
SnowballStemmer包 --这个Python茎化包使用Snowball的算法来爬取基本形式。你可以使用下面的命令来导入这个包 –
from nltk.stem.snowball import SnowballStemmer
例如,将单词 “writing “作为输入给这个干系人后,输出将是干系人之后的单词 “write”。
词法化
另一种爬取单词基本形式的方法是词法化,通常旨在通过使用词汇和形态分析来去除转折词尾。经过词法化处理后的任何单词的基本形式都被称为词法。
NLTK模块提供了以下用于词素化的软件包 –
WordNetLemmatizer包 --它将根据单词是否被用作名词或动词来爬取其基本形式。你可以使用下面的命令来导入这个包—-。
from nltk.stem import WordNetLemmatizer
分块
分块,即把数据分成小块,是自然语言处理的重要过程之一,用于识别语篇和短语,如名词短语。分块是为了做标记的标记。我们可以在分块过程的帮助下得到句子的结构。
例子
在这个例子中,我们将使用NLTK Python模块来实现名词短语的分块。名词短语分块是分块的一种,它可以找到句子中的名词短语分块。
实现名词短语分块的步骤
我们需要按照下面的步骤来实现名词短语分块:
第1步 – 块状语法定义
在第1步,我们将定义分块的语法。它将包括我们需要遵循的规则。
第2步 – 创建大块分析器
现在,我们将创建一个分块分析器。它将解析语法并给出输出。
第3步 – 输出
在这最后一步中,输出将以树形格式产生。
首先,我们需要导入NLTK包,如下所示
import nltk
接下来,我们需要定义这个句子。这里DT:定语,VBP:动词,JJ:形容词,IN:介词,NN:名词。
sentence = [("a", "DT"),("clever","JJ"),("fox","NN"),("was","VBP"),("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]
接下来,我们将以正则表达式的形式给出语法。
grammar = "NP:{<DT>?<JJ>*<NN>}"
现在,下一行代码将定义一个用于解析语法的解析器。
parser_chunking = nltk.RegexpParser(grammar)
现在,解析器将对该句子进行解析。
parser_chunking.parse(sentence)
接下来,我们在变量中给出我们的输出。
Output = parser_chunking.parse(sentence)
在以下代码的帮助下,我们可以以树的形式绘制我们的输出,如下图所示。
output.draw()
词袋(BoW)模型 爬取并将文本转换为数字形式
词袋(BoW)是自然语言处理中一个有用的模型,基本上用于从文本中爬取特征。从文本中爬取特征后,可用于机器学习算法的建模,因为原始数据不能用于ML应用。
BoW模型的工作原理
最初,模型从文档中的所有单词中爬取出一个词汇表。之后,使用文档术语矩阵,它将建立一个模型。通过这种方式,BoW模型仅将文档表示为一个词包,而顺序或结构则被丢弃。
例子
假设我们有以下两个句子 —
句子1 --这是一个语料袋模型的例子。
句子2 - 我们可以通过使用Bag of Words模型来爬取特征。
现在,通过考虑这两个句子,我们有以下14个不同的词—
- This
- is
- an
- example
- bag
- of
- words
- model
- we
- can
- extract
- features
- by
- using
在NLTK中建立一个语料袋模型
让我们来看看下面的Python脚本,它将在NLTK中建立一个词汇包模型。
首先,导入下面的包–
from sklearn.feature_extraction.text import CountVectorizer
接下来,我们定义一下句子的集合–
Sentences=['This is an example of Bag of Words model.', ' We can extract
features by using Bag of Words model.']
vector_count = CountVectorizer()
features_text = vector_count.fit_transform(Sentences).todense()
print(vector_count.vocabulary_)
输出
它显示,在上述两个句子中,我们有14个不同的词-
{
'this': 10, 'is': 7, 'an': 0, 'example': 4, 'of': 9,
'bag': 1, 'words': 13, 'model': 8, 'we': 12, 'can': 3,
'extract': 5, 'features': 6, 'by': 2, 'using':11
}
主题建模:识别文本数据中的模式
一般来说,文档被分组为主题,主题建模是一种技术,用于识别文本中对应于特定主题的模式。换句话说,主题建模是用来在一组给定的文档中发现抽象的主题或隐藏的结构。
你可以在以下场景中使用主题建模
文本分类
通过主题建模可以改善分类,因为它将相似的词归为一组,而不是将每个词单独作为一个特征。
推荐系统
我们可以通过使用相似性措施来建立推荐系统。
主题建模算法
我们可以通过以下算法来实现主题建模
Latent Dirichlet Allocation(LDA) - 这是一种最流行的算法,使用概率图形模型来实现主题建模。
潜在语义分析(LDA)或潜在语义索引(LSI) --它以线性代数为基础,使用文档术语矩阵的SVD(奇异值分解)概念。
非负矩阵分解(NMF) --它也像LDA一样基于线性代数。
以上提到的算法有以下几个要素
- 主题的数量: 参数
- 文档-词矩阵: 输入
- WTM(词主题矩阵)和TDM(主题文档矩阵): 输出