当前位置: 首页 > 科技观察

使用Python构建可扩展的社交媒体情绪分析服务

时间:2023-03-14 14:11:35 科技观察

了解如何使用spaCy、vaderSentiment、Flask和Python为您的工作添加情绪分析功能。本系列的第三部分提供了一些关于情绪分析如何工作的背景,现在让我们来看看如何将这些功能添加到您的设计中。探索Python库spaCy和vaderSentiment先决条件一个终端shellShell中的Python语言二进制文件(版本3.4+)用于安装Python包的pip命令(可选)一个Python虚拟环境,用于将您的工作与系统隔离以配置环境在开始之前写代码,需要安装spaCy和vaderSentiment包搭建Python环境,下载语言模型帮你分析。幸运的是,其中大部分都可以从命令行轻松完成。在shell中,输入以下命令来安装spaCy和vaderSentiment包:pipinstallspacyvaderSentiment安装命令后,安装spaCy可用于文本分析的语言模型。以下命令将使用spaCy模块下载并安装英文模型:python-mspacydownloaden_core_web_sm一旦安装了这些库和模型,就可以开始编码了。简单的文本分析使用Python解释器交互模式编写一些代码来分析单个文本片段。首先启动Python环境:$pythonPython3.6.8(default,Jan312019,09:38:34)[GCC8.2.120181215(RedHat8.2.1-6)]onlinuxType"help","copyright",“学分”或“许可证”以获取更多信息。>>>(您的Python解释器版本可能打印不同。)1.导入需要的模块:>>>importspacy>>>fromvaderSentimentimportvaderSentiment2.从spaCy加载英文语言模型:>>>english=spacy.load("en_core_web_sm")3.处理一段文本.这个例子展示了一个非常简单的句子,我们希望它能给我们带来一些积极的情绪:>>>result=english("Iliketoeatapplesaucewithsugarandcinnamon.")4.从处理后的结果中收集句子。SpaCy已经识别并处理了短语中的实体,这一步为每个句子生成情感(即使在这种情况下只有一个句子):>>>sentences=[str(s)forsinresult.sents]5.使用vaderSentiments创建一个分析器:>>>analyzer=vaderSentiment.SentimentIntensityAnalyzer()6.句子的情感分析:>>>sentiment=[analyzer.polarity_scores(str(s))forsinsentences]情感变量现在包含例句的极端性得分。打印出这个值,看看它是如何解析句子的。>>>print(sentiment)[{'neg':0.0,'neu':0.737,'pos':0.263,'compound':0.3612}]这个结构是什么意思?从表面上看,这是一个只有一个字典对象的数组。如果有多个句子,每个句子都会对应一个字典对象。字典中有四个键对应不同类型的情绪。neg键代表负面情绪,因为在这种情况下没有负面情绪被报告,如0.0值所证明的那样。代表中性情绪的neu键得分相当高,为0.737(***为1.0)。代表积极情绪的pos键得分适中,为0.263。***,cmpound键代表文本的整体得分,可以从负到正,0.3612在正的一面更感性一点。要查看这些值可能会发生怎样的变化,您可以用您输入的代码做一个小实验。以下代码块显示了如何评估相似句子的情感分数。>>>result=english("Iloveapplesauce!")>>>sentences=[str(s)forsinresult.sents]>>>sentiment=[analyzer.polarity_scores(str(s))forsinsentences=[分析器.polarity_scores(str(s))forsinsentences]>>>print(sentiment)[{'neg':0.0,'neu':0.182,'pos':0.818,'compound':0.6696}]把例句改成非常肯定的句子就可以看出,情绪的价值发生了巨大的变化。构建情绪分析服务现在您已经组装了用于情绪分析的基本代码块,让我们将这些东西变成一个简单的服务。在此演示中,您将使用PythonFlask包创建一个RESTfulHTTP服务器。该服务将接受英文文本数据并返回情感分析结果。请注意,此示例服务用于了解所涉及的技术,而不是用于生产的内容。先决条件终端外壳外壳中的Python语言二进制文件(版本3.4+)安装Python包的pip命令curl命令文本编辑器(可选)将您的工作与系统隔离以配置环境的Python虚拟环境环境是与上一节几乎相同,唯一不同的是在Python环境中增加了Flask包。1.安装需要的依赖:pipinstallspacyvaderSentimentflask2。安装spaCy的英语语言模型:python-mspacydownloaden_core_web_sm创建一个应用程序文件打开一个编辑器并创建一个名为app.py的文件。添加以下内容(别担心,我们会解释每一行):get_sentiments(text):result=english(text)sentences=[str(sent)forsentinresult.sents]sentiments=[analyzer.polarity_scores(str(s))forsinsentences]返回sentiments@app.route("/",methods=["POST","GET"])defindex():ifflask.request.method=="GET":return"ToaccessthisservicesendaPOSTrequesttothisURLwith"\"您想要在正文中分析的文本。”body=flask.request.data.decode("utf-8")sentiments=get_sentiments(body)returnflask.json.dumps(sentiments)这个源文件虽然不是很大,但是还是比较密集的。让我们来看看应用程序的各个部分并解释它们的作用。importflaskimportspacyimportvaderSentiment.vaderSentimentasvader前三行导入执行语言分析和HTTP框架所需的包。app=flask.Flask(__name__)analyzer=vader.SentimentIntensityAnalyzer()english=spacy.load("en_core_web_sm")接下来的三行代码创建了一些全局变量。第一个变量app是Fl??ask创建HTTP路由的主要入口点。第二个变量analyzer与上一个示例中使用的类型相同,将用于生成情绪分数。***变量english也与前面示例中使用的类型相同,它将用于注释和标记初始文本输入。您可能想知道为什么要全局声明这些变量。对于应用程序变量,这是许多Flask应用程序的标准过程。但是,对于分析器和英语变量,使它们成为全局变量的决定是基于与所涉及的类相关的加载时间。虽然加载时间可能看起来很短,但当它在HTTP服务器的上下文中运行时,这些延迟会对性能产生负面影响。defget_sentiments(text):result=english(text)sentences=[str(sent)forsentinresult.sents]sentiments=[analyzer.polarity_scores(str(s))forsinsentences]returnsentiments这部分用于服务Core-一个从文本字符串生成情感值的函数。您可以看到此函数中的操作对应于您之前在Python解释器中运行的命令。这里它们被封装在一个函数定义中,文本源作为文本变量传入,情感变量返回给调用者。@app.route("/",methods=["POST","GET"])defindex():ifflask.request.method=="GET":return"要访问此服务,请向此发送POST请求正文中带有“\”的URL要分析的文本。body=flask.request.data.decode("utf-8")sentiments=get_sentiments(body)returnflask.json.dumps(sentiments)***包含指示Flask如何配置HTTP服务器的逻辑的函数服务。它以一行将HTTP路由/与请求方法POST和GET相关联的行开头。在函数定义行之后,if子句将检查请求方法是否为GET。如果用户向服务发送此请求,则以下行将返回一条文本消息,指示如何到达服务器。这主要是为了方便最终用户。下一行使用flask.request对象获取请求的主体,其中应包含要处理的文本字符串。decode函数将字节数组转换为可用的格式化字符串。解码后的文本消息将传递给get_sentiments函数以生成情绪分数。***,分数通过HTTP框架返回给用户。您现在应该保存文件,或者如果您还没有返回到shell。运行情感服务一旦一切就绪,使用Flask的内置调试服务器运行服务就非常简单。要启动该服务,请在与源文件相同的目录中输入以下命令:FLASK_APP=app.pyflaskrun您现在将在shell中看到服务器的一些输出,服务器将运行。要测试服务器是否正在运行,您需要打开第二个shell并使用curl命令。首先,通过输入以下命令检查是否打印了命令信息:curlhttp://localhost:5000您应该会看到说明消息:要访问此服务,请向此URI发送一个POST请求,并在正文中包含您要分析的文本.接下来,运行以下命令发送测试消息并查看情绪分析:curlhttp://localhost:5000--header"Content-Type:application/json"--data"Iloveapplesauce!"您从服务器获得的响应应如下所示:[{"compound":0.6696,"neg":0.0,"neu":0.182,"pos":0.818}]恭喜!您现在已经实现了RESTfulHTTP情绪分析服务。您可以在GitHub上找到该服务的参考实现和本文中的所有代码。继续探索既然您了解了自然语言处理和情感分析背后的原理和机制,下面是进一步探索该主题的一些方法。在OpenShift上创建流式情感分析器虽然创建本地应用程序来研究情感分析很方便,但接下来是部署该应用程序以供更广泛使用的能力。按照Radnaalytics.io提供的指南和代码,您将学习如何创建可以容器化并部署到Kubernetes平台的情绪分析器。您还将学习如何使用ApacheKafka作为事件驱动消息传递的框架,以及如何使用ApacheSpark作为分布式计算平台进行情绪分析。使用TwitterAPI发现实时数据虽然Radanalytics.ioLabs可以生成合成推文流,但您并不仅限于合成数据。事实上,任何拥有Twitter帐户的人都可以使用TweepyPython包访问TwitterStreamingAPI以对推文执行情感分析。