偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

使用Python構(gòu)建可擴(kuò)展的社交媒體情感分析服務(wù)

開(kāi)發(fā) 后端
學(xué)習(xí)如何使用 spaCy、vaderSentiment、Flask 和 Python 來(lái)為你的作品添加情感分析能力。

[[265713]]

學(xué)習(xí)如何使用 spaCy、vaderSentiment、Flask 和 Python 來(lái)為你的作品添加情感分析能力。

本系列的***部分提供了情感分析工作原理的一些背景知識(shí),現(xiàn)在讓我們研究如何將這些功能添加到你的設(shè)計(jì)中。

探索 Python 庫(kù) spaCy 和 vaderSentiment

前提條件

  • 一個(gè)終端 shell
  • shell 中的 Python 語(yǔ)言二進(jìn)制文件(3.4+ 版本)
  • 用于安裝 Python 包的 pip 命令
  • (可選)一個(gè) Python 虛擬環(huán)境使你的工作與系統(tǒng)隔離開(kāi)來(lái)

配置環(huán)境

在開(kāi)始編寫(xiě)代碼之前,你需要安裝 spaCyvaderSentiment 包來(lái)設(shè)置 Python 環(huán)境,同時(shí)下載一個(gè)語(yǔ)言模型來(lái)幫助你分析。幸運(yùn)的是,大部分操作都容易在命令行中完成。

在 shell 中,輸入以下命令來(lái)安裝 spaCy 和 vaderSentiment 包:

  1. pip install spacy vaderSentiment

命令安裝完成后,安裝 spaCy 可用于文本分析的語(yǔ)言模型。以下命令將使用 spaCy 模塊下載并安裝英語(yǔ)模型

  1. python -m spacy download en_core_web_sm

安裝了這些庫(kù)和模型之后,就可以開(kāi)始編碼了。

一個(gè)簡(jiǎn)單的文本分析

使用 Python 解釋器交互模式 編寫(xiě)一些代碼來(lái)分析單個(gè)文本片段。首先啟動(dòng) Python 環(huán)境:

  1. $ python
  2. Python 3.6.8 (default, Jan 31 2019, 09:38:34)
  3. [GCC 8.2.1 20181215 (Red Hat 8.2.1-6)] on linux
  4. Type "help", "copyright", "credits" or "license" for more information.
  5. >>>

(你的 Python 解釋器版本打印可能與此不同。)

1、導(dǎo)入所需模塊:

  1. >>> import spacy
  2. >>> from vaderSentiment import vaderSentiment

2、從 spaCy 加載英語(yǔ)語(yǔ)言模型:

  1. >>> english = spacy.load("en_core_web_sm")

3、處理一段文本。本例展示了一個(gè)非常簡(jiǎn)單的句子,我們希望它能給我們帶來(lái)些許積極的情感:

  1. >>> result = english("I like to eat applesauce with sugar and cinnamon.")

4、從處理后的結(jié)果中收集句子。SpaCy 已識(shí)別并處理短語(yǔ)中的實(shí)體,這一步為每個(gè)句子生成情感(即時(shí)在本例中只有一個(gè)句子):

  1. >>> sentences = [str(s) for s in result.sents]

5、使用 vaderSentiments 創(chuàng)建一個(gè)分析器:

  1. >>> analyzer = vaderSentiment.SentimentIntensityAnalyzer()

6、對(duì)句子進(jìn)行情感分析:

  1. >>> sentiment = [analyzer.polarity_scores(str(s)) for s in sentences]

sentiment 變量現(xiàn)在包含例句的極性分?jǐn)?shù)。打印出這個(gè)值,看看它是如何分析這個(gè)句子的。

  1. >>> print(sentiment)
  2. [{'neg': 0.0, 'neu': 0.737, 'pos': 0.263, 'compound': 0.3612}]

這個(gè)結(jié)構(gòu)是什么意思?

表面上,這是一個(gè)只有一個(gè)字典對(duì)象的數(shù)組。如果有多個(gè)句子,那么每個(gè)句子都會(huì)對(duì)應(yīng)一個(gè)字典對(duì)象。字典中有四個(gè)鍵對(duì)應(yīng)不同類(lèi)型的情感。neg 鍵表示負(fù)面情感,因?yàn)樵诒纠袥](méi)有報(bào)告任何負(fù)面情感,0.0 值證明了這一點(diǎn)。neu 鍵表示中性情感,它的得分相當(dāng)高,為 0.737(***為 1.0)。pos 鍵代表積極情感,得分適中,為 0.263。***,cmpound 鍵代表文本的總體得分,它可以從負(fù)數(shù)到正數(shù),0.3612 表示積極方面的情感多一點(diǎn)。

要查看這些值可能如何變化,你可以使用已輸入的代碼做一個(gè)小實(shí)驗(yàn)。以下代碼塊顯示了如何對(duì)類(lèi)似句子的情感評(píng)分的評(píng)估。

  1. >>> result = english("I love applesauce!")
  2. >>> sentences = [str(s) for s in result.sents]
  3. >>> sentiment = [analyzer.polarity_scores(str(s)) for s in sentences]
  4. >>> print(sentiment)
  5. [{'neg': 0.0, 'neu': 0.182, 'pos': 0.818, 'compound': 0.6696}]

你可以看到,通過(guò)將例句改為非常積極的句子,sentiment 的值發(fā)生了巨大變化。

建立一個(gè)情感分析服務(wù)

現(xiàn)在你已經(jīng)為情感分析組裝了基本的代碼塊,讓我們將這些東西轉(zhuǎn)化為一個(gè)簡(jiǎn)單的服務(wù)。

在這個(gè)演示中,你將使用 Python Flask 包 創(chuàng)建一個(gè) RESTful HTTP 服務(wù)器。此服務(wù)將接受英文文本數(shù)據(jù)并返回情感分析結(jié)果。請(qǐng)注意,此示例服務(wù)是用于學(xué)習(xí)所涉及的技術(shù),而不是用于投入生產(chǎn)的東西。

前提條件

  • 一個(gè)終端 shell
  • shell 中的 Python 語(yǔ)言二進(jìn)制文件(3.4+ 版本)
  • 安裝 Python 包的 pip 命令
  • curl 命令
  • 一個(gè)文本編輯器
  • (可選) 一個(gè) Python 虛擬環(huán)境使你的工作與系統(tǒng)隔離開(kāi)來(lái)

配置環(huán)境

這個(gè)環(huán)境幾乎與上一節(jié)中的環(huán)境相同,唯一的區(qū)別是在 Python 環(huán)境中添加了 Flask 包。

1、安裝所需依賴(lài)項(xiàng):

  1. pip install spacy vaderSentiment flask

2、安裝 spaCy 的英語(yǔ)語(yǔ)言模型:

  1. python -m spacy download en_core_web_sm

創(chuàng)建應(yīng)用程序文件

打開(kāi)編輯器,創(chuàng)建一個(gè)名為 app.py 的文件。添加以下內(nèi)容 (不用擔(dān)心,我們將解釋每一行)

  1. import flask
  2. import spacy
  3. import vaderSentiment.vaderSentiment as vader
  4.  
  5. app = flask.Flask(__name__)
  6. analyzer = vader.SentimentIntensityAnalyzer()
  7. english = spacy.load("en_core_web_sm")
  8.  
  9. def get_sentiments(text):
  10. result = english(text)
  11. sentences = [str(sent) for sent in result.sents]
  12. sentiments = [analyzer.polarity_scores(str(s)) for s in sentences]
  13. return sentiments
  14.  
  15. @app.route("/", methods=["POST", "GET"])
  16. def index():
  17. if flask.request.method == "GET":
  18. return "To access this service send a POST request to this URL with" \
  19. " the text you want analyzed in the body."
  20. body = flask.request.data.decode("utf-8")
  21. sentiments = get_sentiments(body)
  22. return flask.json.dumps(sentiments)

雖然這個(gè)源文件不是很大,但它非常密集。讓我們來(lái)看看這個(gè)應(yīng)用程序的各個(gè)部分,并解釋它們?cè)谧鍪裁础?/p>

  1. import flask
  2. import spacy
  3. import vaderSentiment.vaderSentiment as vader

前三行引入了執(zhí)行語(yǔ)言分析和 HTTP 框架所需的包。

  1. app = flask.Flask(__name__)
  2. analyzer = vader.SentimentIntensityAnalyzer()
  3. english = spacy.load("en_core_web_sm")

接下來(lái)的三行代碼創(chuàng)建了一些全局變量。***個(gè)變量 app,它是 Flask 用于創(chuàng)建 HTTP 路由的主要入口點(diǎn)。第二個(gè)變量 analyzer 與上一個(gè)示例中使用的類(lèi)型相同,它將用于生成情感分?jǐn)?shù)。***一個(gè)變量 english 也與上一個(gè)示例中使用的類(lèi)型相同,它將用于注釋和標(biāo)記初始文本輸入。

你可能想知道為什么全局聲明這些變量。對(duì)于 app 變量,這是許多 Flask 應(yīng)用程序的標(biāo)準(zhǔn)過(guò)程。但是,對(duì)于 analyzerenglish 變量,將它們?cè)O(shè)置為全局變量的決定是基于與所涉及的類(lèi)關(guān)聯(lián)的加載時(shí)間。雖然加載時(shí)間可能看起來(lái)很短,但是當(dāng)它在 HTTP 服務(wù)器的上下文中運(yùn)行時(shí),這些延遲會(huì)對(duì)性能產(chǎn)生負(fù)面影響。

  1. def get_sentiments(text):
  2. result = english(text)
  3. sentences = [str(sent) for sent in result.sents]
  4. sentiments = [analyzer.polarity_scores(str(s)) for s in sentences]
  5. return sentiments

這部分是服務(wù)的核心 —— 一個(gè)用于從一串文本生成情感值的函數(shù)。你可以看到此函數(shù)中的操作對(duì)應(yīng)于你之前在 Python 解釋器中運(yùn)行的命令。這里它們被封裝在一個(gè)函數(shù)定義中,text 源作為文本變量傳入,*** sentiments 變量返回給調(diào)用者。

  1. @app.route("/", methods=["POST", "GET"])
  2. def index():
  3. if flask.request.method == "GET":
  4. return "To access this service send a POST request to this URL with" \
  5. " the text you want analyzed in the body."
  6. body = flask.request.data.decode("utf-8")
  7. sentiments = get_sentiments(body)
  8. return flask.json.dumps(sentiments)

源文件的***一個(gè)函數(shù)包含了指導(dǎo) Flask 如何為服務(wù)配置 HTTP 服務(wù)器的邏輯。它從一行開(kāi)始,該行將 HTTP 路由 / 與請(qǐng)求方法 POSTGET 相關(guān)聯(lián)。

在函數(shù)定義行之后,if 子句將檢測(cè)請(qǐng)求方法是否為 GET。如果用戶(hù)向服務(wù)發(fā)送此請(qǐng)求,那么下面的行將返回一條指示如何訪問(wèn)服務(wù)器的文本消息。這主要是為了方便最終用戶(hù)。

下一行使用 flask.request 對(duì)象來(lái)獲取請(qǐng)求的主體,該主體應(yīng)包含要處理的文本字符串。decode 函數(shù)將字節(jié)數(shù)組轉(zhuǎn)換為可用的格式化字符串。經(jīng)過(guò)解碼的文本消息被傳遞給 get_sentiments 函數(shù)以生成情感分?jǐn)?shù)。***,分?jǐn)?shù)通過(guò) HTTP 框架返回給用戶(hù)。

你現(xiàn)在應(yīng)該保存文件,如果尚未保存,那么返回 shell。

運(yùn)行情感服務(wù)

一切就緒后,使用 Flask 的內(nèi)置調(diào)試服務(wù)器運(yùn)行服務(wù)非常簡(jiǎn)單。要啟動(dòng)該服務(wù),請(qǐng)從與源文件相同的目錄中輸入以下命令:

  1. FLASK_APP=app.py flask run

現(xiàn)在,你將在 shell 中看到來(lái)自服務(wù)器的一些輸出,并且服務(wù)器將處于運(yùn)行狀態(tài)。要測(cè)試服務(wù)器是否正在運(yùn)行,你需要打開(kāi)第二個(gè) shell 并使用 curl 命令。

首先,輸入以下命令檢查是否打印了指令信息:

  1. curl http://localhost:5000

你應(yīng)該看到說(shuō)明消息:

  1. To access this service send a POST request to this URI with the text you want analyzed in the body.

接下來(lái),運(yùn)行以下命令發(fā)送測(cè)試消息,查看情感分析:

  1. curl http://localhost:5000 --header "Content-Type: application/json" --data "I love applesauce!"

你從服務(wù)器獲得的響應(yīng)應(yīng)類(lèi)似于以下內(nèi)容:

  1. [{"compound": 0.6696, "neg": 0.0, "neu": 0.182, "pos": 0.818}]

恭喜!你現(xiàn)在已經(jīng)實(shí)現(xiàn)了一個(gè) RESTful HTTP 情感分析服務(wù)。你可以在 GitHub 上找到此服務(wù)的參考實(shí)現(xiàn)和本文中的所有代碼

繼續(xù)探索

現(xiàn)在你已經(jīng)了解了自然語(yǔ)言處理和情感分析背后的原理和機(jī)制,下面是進(jìn)一步發(fā)現(xiàn)探索該主題的一些方法。

在 OpenShift 上創(chuàng)建流式情感分析器

雖然創(chuàng)建本地應(yīng)用程序來(lái)研究情緒分析很方便,但是接下來(lái)需要能夠部署應(yīng)用程序以實(shí)現(xiàn)更廣泛的用途。按照Radnaalytics.io 提供的指導(dǎo)和代碼進(jìn)行操作,你將學(xué)習(xí)如何創(chuàng)建一個(gè)情感分析儀,可以容器化并部署到 Kubernetes 平臺(tái)。你還將了解如何將 Apache Kafka 用作事件驅(qū)動(dòng)消息傳遞的框架,以及如何將 Apache Spark 用作情緒分析的分布式計(jì)算平臺(tái)。

使用 Twitter API 發(fā)現(xiàn)實(shí)時(shí)數(shù)據(jù)

雖然 Radanalytics.io 實(shí)驗(yàn)室可以生成合成推文流,但你可以不受限于合成數(shù)據(jù)。事實(shí)上,擁有 Twitter 賬戶(hù)的任何人都可以使用 Tweepy Python 包訪問(wèn) Twitter 流媒體 API 對(duì)推文進(jìn)行情感分析。

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2019-05-14 10:37:26

Python機(jī)器學(xué)習(xí)編程語(yǔ)言

2013-01-14 11:35:59

IBMdW

2024-09-23 00:00:10

2016-10-31 11:26:13

ReactRedux前端應(yīng)用

2025-05-06 08:09:02

2015-04-23 13:29:02

Flume分布式服務(wù)HDFS

2024-12-20 16:56:00

Python面向?qū)ο?/a>編程

2012-06-11 08:58:45

Win 8微軟

2012-06-14 10:14:46

ibmdw

2023-07-26 16:20:36

云原生云計(jì)算

2023-11-09 08:31:56

Spring微服務(wù)網(wǎng)關(guān)

2020-05-11 11:03:47

漏洞信息泄露網(wǎng)絡(luò)安全

2017-05-15 14:00:28

大數(shù)據(jù)Python情感極性分析

2024-02-26 00:01:01

RedisGolang應(yīng)用程序

2023-09-21 11:20:46

2016-08-24 19:22:10

Docker SwarPython應(yīng)用

2012-11-14 15:25:58

2011-11-23 10:06:32

Azure微軟移動(dòng)應(yīng)用

2022-03-05 11:42:44

惡意軟件黑客

2024-05-10 13:14:41

技巧云原生應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)