在上一章中,无涯教程已经了解了如何处理作为Web抓取内容获得的视频和图像。在本章中将使用Python库处理文本分析,并将对此进行详细了解。
您可以使用称为自然语言工具包(NLTK)的Python库执行文本分析,在介绍NLTK的概念之前,先了解文本分析和Web抓取之间的关系。
分析文本中的单词可以使无涯教程知道哪些单词很重要,哪些单词不寻常,如何对单词进行分组。该分析简化了网络抓取的任务。
自然语言工具包(NLTK)是Python库的集合,该库专门设计用于识别和标签在自然语言(如英语)文本中找到的词性。
您可以使用以下命令在Python中安装NLTK-
pip install nltk
如果您正在使用Anaconda,则可以使用以下命令为NLTK构建conda软件包-
conda install -c anaconda nltk
安装NLTK之后,必须下载预设的文本存储库。但是在下载文本预设存储库之前,需要在 import 命令的帮助下导入NLTK,如下所示:
import nltk
现在,在以下命令的帮助下,可以下载NLTK数据-
nltk.download()
安装所有可用的NLTK软件包将需要一些时间,但是始终建议安装所有软件包。
无涯教程还需要其他一些Python软件包,例如 gensim 和 pattern ,以进行文本分析以及使用NLTK构建自然语言处理应用程序。
gensim - 健壮的语义建模库,对许多应用程序很有用。可以通过以下命令安装-
pip install gensim
pattern - 用于使 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
在任何语言中,单词都有不同的形式,由于语法原因,一种语言包含多种变体,因此,可以说在分析文本时提取单词的基本形式可能很有用。
PorterStemmer - 此Python包使用Porter算法提取基本表单,您可以使用以下命令导入此程序包-
from nltk.stem.porter import PorterStemmer
LancasterStemmer - 此Python包使用Lancaster的算法提取基本表单,您可以使用以下命令导入此程序包-
from nltk.stem.lancaster import LancasterStemmer
SnowballStemmer - 此Python包使用Snowball的算法来提取基本形式,您可以使用以下命令导入此程序包-
from nltk.stem.snowball import SnowballStemmer
提取词的基本形式的另一种方法是通过词法化,通常旨在通过词汇和词法分析来去除词尾变化,非词化后的任何单词的基本形式称为词法。
NLTK模块提供以下软件包以进行词法化-
WordNetLemmatizer - 它将提取单词的基本形式,具体取决于它是否用作名词作为动词。您可以使用以下命令导入此程序包-
from nltk.stem import WordNetLemmatizer
分块,这意味着将数据分成小块,是自然语言处理中识别语音和名词短语之类的短短语的重要过程之一。可以借助分块过程来获得句子的结构。
在此示例中,将使用NLTK Python模块实现名词短语分块, NP分块是分块的一种,它将在句子中找到名词短语块。
无涯教程需要按照以下给出的步骤来实现名词短语组块-
步骤1 - Chunk语法定义 ,在第一步中,将定义分块的语法,它由需要遵循的规则组成。
步骤2 - 创建Chunk解析器,现在,将创建一个chunk解析器。它将解析语法并给出输出。
步骤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)是自然语言处理中的一种有用模型,基本上用于从文本中提取特征。从文本中提取特征后,可以将其用于机器学习算法的建模中,因为原始数据无法在ML应用程序中使用。
最初,模型从文档中的所有单词中提取词汇。
假设无涯教程有以下两个句子-
Sentence1 - This is an example of Bag of Words model.
Sentence2 - We can extract features by using Bag o Words model.
现在,通过考虑这两个句子,得到以下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 }
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)
Tony Bai · Go语言第一课 -〔Tony Bai〕