在数字化时代,每秒生成大量的信息。这些信息大多通过即时消息、社交媒体帖子、博客文章、新闻报道、产品推荐和评论等形式产生,并且大多数是未结构化的。为了从这些高度未结构化的数据中提取有用的见解,首先需要将其转换为结构化和规范化的形式。
自然语言处理(NLP)是人工智能的一个分支,它对这些未结构化数据执行一系列处理,以获得有意义的见解。由于语言处理本质上是非确定性的,同一种语言可能有不同的解释,这使得处理变得复杂。此外,俚语、缩写词、附带文字的表情符号等都给预处理带来了额外的负担。
如果对社交媒体分析的力量感兴趣,那么本文就是入门的起点。本文涵盖了文本分析的基本概念,并提供了一个逐步教程,教如何在不需要任何训练数据集的情况下执行自然语言处理。
自然语言处理是人工智能的一个子领域,它包括将未结构化数据转换为有意义的信息并从中提取有用见解的系统化过程。NLP进一步被分为两大类:基于规则的NLP和基于统计的NLP。基于规则的NLP使用基本推理来处理任务,因此需要人工努力而不需要大量数据集的训练。基于统计的NLP则训练大量数据并从中获得见解,它使用机器学习算法进行训练。在本文中,将学习基于规则的NLP。
NLP的应用包括文本摘要、机器翻译、问答系统、拼写检查、自动补全、情感分析、语音识别和主题分割等。
NLP流程分为五个子任务:
filename = "C:\\Users\\Dell\\Desktop\\example.txt"
text = open(filename, "r").read()
打印文本:
print(text)
将使用spaCy库进行本教程。spaCy是一个开源的高级NLP软件库,用Python和Cython编写。该库在MIT许可下发布。与广泛用于教学和研究的NLTK不同,spaCy专注于提供生产使用的软件。spaCy还支持深度学习工作流程,允许通过其自己的机器学习库Thinc连接由流行机器学习库如TensorFlow、Pytorch训练的统计模型。
pip install -U pip setuptools wheel
pip install -U spacy
由于处理的是英语,因此需要安装en_core_web_sm包。
python -m spacy download en_core_web_sm
验证下载是否成功并导入spaCy包:
import spacy
nlp = spacy.load('en_core_web_sm')
成功创建NLP对象后,可以进行预处理。
分词是将整个文本转换为称为标记的单词数组的过程。这是任何NLP过程的第一步。它将整个文本划分为有意义的单元。
text_doc = nlp(text)
print ([token.text for token in text_doc])
从标记中可以看到许多无用的空白、逗号、停用词。
从文本中识别句子在配置文本中有意义的部分时很有用,这些部分是一起出现的。因此,找到句子很有用。
about_doc = nlp(about_text)
sentences = list(about_doc.sents)
停用词被定义为在语言中频繁出现的词。它们在文本分析中没有显著作用,并且妨碍了频率分布分析。例如,the、an、a、or等。因此,必须从文本中移除它们以获得更清晰的文本视图。
normalized_text = [token for token in text_doc if not token.is_stop]
print (normalized_text)
如上所示,有标点符号对没有用。让移除它们。
clean_text = [token for token in normalized_text if not token.is_punct]
print (clean_text)
词形还原是将单词还原为其原始形式的过程。词元是一个代表一组单词的单词,称为词素。例如:participate、participating、participated。它们都还原为一个共同的词元,即participate。
for token in clean_text:
print (token, token.lemma_)
现在对文本进行一些统计分析。将找出文本中出现频率最高的十个词。
from collections import Counter
words = [token.text for token in clean_text if not token.is_stop and not token.is_punct]
word_freq = Counter(words)
# 出现频率最高的10个词及其频率
common_words = word_freq.most_common(10)
print (common_words)
情感分析是分析文本情感的过程。一种方法是通过单词的极性,无论它们是积极的还是消极的。VADER(Valence Aware Dictionary and Sentiment Reasoner)是一个基于词典和规则的情感分析库,它使用一系列情感词典。情感词典是一系列根据其语义含义被分配到相应极性(即积极、消极和中性)的单词。
例如:
VADER情感分析器找出不同极性单词的百分比,并分别给出它们的极性分数。分析器的输出得分从0到1,可以转换为百分比。它不仅告诉积极性或消极性的分数,还告诉情感有多积极或消极。
让首先使用pip下载包。
pip install vaderSentiment
然后分析情感分数。
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
analyzer = SentimentIntensityAnalyzer()
vs = analyzer.polarity_scores(text)
vs