📅  最后修改于: 2020-11-07 08:04:04             🧑  作者: Mango
在上一章中,我们了解了如何处理作为Web抓取内容的一部分而获得的视频和图像。在本章中,我们将使用Python库处理文本分析,并将对此进行详细了解。
您可以使用称为自然语言工具包(NLTK)的Python库执行文本分析。在深入探讨NLTK的概念之前,让我们了解文本分析和Web抓取之间的关系。
分析文本中的单词可以使我们知道哪些单词很重要,哪些单词不寻常,如何对单词进行分组。该分析简化了网络抓取的任务。
自然语言工具包(NLTK)是Python库的集合,该库专门设计用于识别和标记在自然语言(如英语)文本中找到的词性。
您可以使用以下命令在Python安装NLTK-
pip install nltk
如果您正在使用Anaconda,则可以使用以下命令为NLTK构建conda软件包-
conda install -c anaconda nltk
安装NLTK之后,我们必须下载预设的文本存储库。但是在下载文本预设存储库之前,我们需要借助导入命令来导入NLTK,如下所示:
mport nltk
现在,在以下命令的帮助下,可以下载NLTK数据-
nltk.download()
安装所有可用的NLTK软件包将需要一些时间,但是始终建议安装所有软件包。
我们还需要其他一些Python软件包(例如gensim和pattern)来进行文本分析以及使用NLTK构建自然语言处理应用程序。
gensim-健壮的语义建模库,对许多应用程序很有用。可以通过以下命令安装-
pip install gensim
模式-用于使gensim包正常工作。可以通过以下命令安装-
pip install pattern
将给定文本分为更小的单位的过程称为令牌,称为令牌化。这些标记可以是单词,数字或标点符号。也称为分词。
NLTK模块提供用于令牌化的不同软件包。我们可以根据需要使用这些软件包。这里描述了一些软件包-
sent_tokenize软件包-该软件包将输入文本分为句子。您可以使用以下命令导入此程序包-
from nltk.tokenize import sent_tokenize
word_tokenize软件包-该软件包将输入文本分为单词。您可以使用以下命令导入此程序包-
from nltk.tokenize import word_tokenize
WordPunctTokenizer程序包-该程序包会将输入文本以及标点符号分成单词。您可以使用以下命令导入此程序包-
from nltk.tokenize import WordPuncttokenizer
在任何语言中,单词都有不同的形式。由于语法原因,一种语言包含多种变体。例如,考虑一下民主,民主和民主化一词。对于机器学习以及Web抓取项目,对于机器而言,重要的是要了解这些不同的词具有相同的基本形式。因此,可以说在分析文本时提取单词的基本形式可能很有用。
这可以通过词干实现,词干可以定义为通过切掉单词的末尾来提取单词基本形式的启发式过程。
NLTK模块提供了用于阻止的不同软件包。我们可以根据需要使用这些软件包。这里描述了其中一些软件包-
PorterStemmer软件包-该Python提取软件包使用Porter算法提取基本形式。您可以使用以下命令导入此程序包-
from nltk.stem.porter import PorterStemmer
例如,在给该词干分析器输入“文字”作为输入后,词干之后的输出将是“写” 。
LancasterStemmer软件包-此Python提取软件包使用Lancaster的算法来提取基本形式。您可以使用以下命令导入此程序包-
from nltk.stem.lancaster import LancasterStemmer
例如,在给词干输入词“ Writing”作为输入之后,词干后的输出将是词“ Writ” 。
SnowballStemmer软件包-此Python提取软件包使用Snowball的算法来提取基本形式。您可以使用以下命令导入此程序包-
from nltk.stem.snowball import SnowballStemmer
例如,在给词干输入词“ write”作为输入之后,词干后的输出将是词“ write”。
提取词的基本形式的另一种方法是通过词法化,通常旨在通过词汇和词法分析来去除词尾变化。非词化后的任何单词的基本形式称为词法。
NLTK模块提供以下软件包以进行词法化-
WordNetLemmatizer程序包-它将提取单词的基本形式,具体取决于它是否用作名词作为动词。您可以使用以下命令导入此程序包-
from nltk.stem import WordNetLemmatizer
分块,这意味着将数据分成小块,是自然语言处理中识别语音和名词短语之类的短短语的重要过程之一。分块是对令牌进行标记。我们可以借助分块过程来获得句子的结构。
在此示例中,我们将使用NLTK Python模块实现名词短语分块。 NP分块是分块的一种,它将在句子中找到名词短语块。
我们需要按照以下给出的步骤来实现名词短语组块-
在第一步中,我们将定义分块的语法。它由我们需要遵循的规则组成。
现在,我们将创建一个块解析器。它将解析语法并给出输出。
在最后一步中,输出将以树格式产生。
首先,我们需要导入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:{?*}"
现在,下一行代码将定义用于解析语法的解析器。
parser_chunking = nltk.RegexpParser(grammar)
现在,解析器将解析该句子。
parser_chunking.parse(sentence)
接下来,我们在变量中提供输出。
Output = parser_chunking.parse(sentence)
借助以下代码,我们可以以树的形式绘制输出,如下所示。
output.draw()
Word of Bag(BoW)是自然语言处理中的一种有用模型,基本上用于从文本中提取特征。从文本中提取特征后,可将其用于机器学习算法的建模中,因为原始数据无法在ML应用程序中使用。
最初,模型从文档中的所有单词中提取词汇。稍后,使用文档术语矩阵将构建模型。这样,BoW模型仅将文档表示为一袋单词,而将其顺序或结构丢弃。
假设我们有以下两个句子-
Sentence1-这是单词袋模型的示例。
Sentence2-我们可以使用“单词袋”模型提取特征。
现在,通过考虑这两个句子,我们得到以下14个不同的词-
让我们看一下以下Python脚本,它将在NLTK中构建BoW模型。
首先,导入以下包-
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
}
通常,文档被分组为主题,主题建模是一种用于识别文本中与特定主题相对应的模式的技术。换句话说,主题建模用于发现给定文档集中的抽象主题或隐藏结构。
您可以在以下情况下使用主题建模-
可以通过主题建模来改进分类,因为它可以将相似的单词组合在一起,而不是将每个单词单独用作功能。
我们可以使用相似性度量来构建推荐系统。
我们可以使用以下算法来实现主题建模-
潜在狄利克雷分配(LDA) -这是最流行的算法之一,它使用概率图形模型来实现主题建模。
潜在语义分析(LDA)或潜在语义索引(LSI) -基于线性代数,在文档术语矩阵上使用SVD(奇异值分解)的概念。
非负矩阵分解(NMF) -它也像LDA一样基于线性代数。
上面提到的算法将具有以下元素-