日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 物聯(lián)網 > 區(qū)塊鏈
[導讀] 比特幣創(chuàng)建于2009年,仍然是一個相當年輕的項目。但其市場價格非常不穩(wěn)定。此外,比特幣對大眾效應更為敏感,比如像2017年底那樣大眾為占據的FOMO感覺一樣。在大眾的興奮情緒推動下,比特幣價格曾

比特幣創(chuàng)建于2009年,仍然是一個相當年輕的項目。但其市場價格非常不穩(wěn)定。此外,比特幣對大眾效應更為敏感,比如像2017年底那樣大眾為占據的FOMO感覺一樣。在大眾的興奮情緒推動下,比特幣價格曾高達到2萬美元的歷史高點。

能夠衡量圍繞比特幣的這種類型的情緒,可以很好地表明未來幾個小時內等待比特幣價格的因素。一個好的解決方案是分析像Twitter這樣的社交網絡上圍繞比特幣的活動。在本文中,我將教您如何創(chuàng)建一個Java程序,從Twitter上檢索的tweets中分析關于比特幣的所有大眾情緒。

比特幣情緒分析器規(guī)范

您將學習開發(fā)的比特幣情緒分析器在執(zhí)行過程中將執(zhí)行以下操作:

1. 在Twitter上檢索包含關鍵字bitcoin的推文

2. 分析每條檢索到的推文,以及檢測與之相關的大眾情緒

3. 在Twitter上顯示以下5種比特幣情緒各自的百分比:非常消極,消極,中立,積極,非常積極

該程序將在每次執(zhí)行后結束,由于Twitter是使用其免費的開發(fā)人員API設置的配額,將不會連續(xù)執(zhí)行此分析。

創(chuàng)建Java項目

第一步是創(chuàng)建一個Java項目。我們將使用Maven作為依賴關系管理器。

在依賴性方面,我們將具有以下代碼庫:

1. Twitter4J是Twitter API的非官方Java客戶端

2. Stanford CoreNLP是一個用于自然語言處理的開源庫

Twitter4J將允許我們以一種簡單的方式從Twitter中檢索tweets的推文樣本。Stanford CoreNLP代碼庫將使我們能夠檢測與每個相關推文相關的情緒。

這為我們的項目提供了以下POM:

《?xml version=“1.0” encoding=“UTF-8”?》

《project xmlns=“http://maven.apache.org/POM/4.0.0” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”》

《modelVersion》4.0.0《/modelVersion》

《groupId》com.ssaurel《/groupId》

《artifacTId》bitcoinsenTIment《/arTIfacTId》

《version》0.0.1-SNAPSHOT《/version》

《packaging》jar《/packaging》

《name》bitcoinsentiment《/name》

《url》http://maven.apache.org《/url》

《properties》

《project.build.sourceEncoding》UTF-8《/project.build.sourceEncoding》

《/properties》

《dependencies》

《dependency》

《groupId》edu.stanford.nlp《/groupId》

《artifactId》stanford-corenlp《/artifactId》

《version》3.9.2《/version》

《/dependency》

《dependency》

《groupId》edu.stanford.nlp《/groupId》

《artifactId》stanford-corenlp《/artifactId》

《version》3.9.2《/version》

《classifier》models《/classifier》

《/dependency》

《dependency》

《groupId》org.twitter4j《/groupId》

《artifactId》twitter4j-core《/artifactId》

《version》[4.0,)《/version》

《/dependency》

《dependency》

《groupId》org.slf4j《/groupId》

《artifactId》slf4j-simple《/artifactId》

《version》1.6.1《/version》

《/dependency》

《dependency》

《groupId》junit《/groupId》

《artifactId》junit《/artifactId》

《version》3.8.1《/version》

《scope》test《/scope》

《/dependency》

《/dependencies》

《/project》

創(chuàng)建一個Twitter應用程序

使用Twitter API需要創(chuàng)建開發(fā)者帳戶。它是免費的,但會有一定調用次數(shù)和配額限制使用。作為我們用于展示目的的項目的一部分,這是完全足夠的。使用Twitter API所需的開發(fā)者帳戶的創(chuàng)建在此處完成:

開發(fā)者地址https://developer.twitter.com/

創(chuàng)建此帳戶后,您將轉到下一頁:

您將需要創(chuàng)建一個新的應用程序。我選擇將我的應用程序命名為“ Bitcoin_Sentiment_Analyzer”。在創(chuàng)建此應用程序期間,您將必須填寫有關它的一定數(shù)量的信息。最后,您將到達“Keys and tokens””屏幕,在該屏幕上,您將找到使您在調用Twitter API來檢索與比特幣相關的推文時正確進行身份驗證的信息:

檢索推文

現(xiàn)在已經創(chuàng)建了與比特幣情緒分析器關聯(lián)的Twitter應用程序,我們將能夠繼續(xù)檢索程序中的推文。為此,我們將依靠Twitter4J代碼庫。

Twitter4J具有TwitterFactory和Twitter類作為其入口點。

TwitterFactory類將包含與Twitter API的連接信息的Configuration對象實例作為輸入:

· 使用者API公鑰

· 使用者API密鑰

· 訪問Token

· 訪問Token密鑰

然后,我將通過調用其getInstance方法從TwitterFactory檢索Twitter對象實例的實例。有了這個對象,我們將能夠在Twitter API上啟動查詢。我們將使用其搜索方法來檢索符合特定條件的推文。

在Query對象中對查詢建模,該對象以與您要通過Twitter API執(zhí)行的查詢相對應的字符串作為輸入。對于比特幣情緒分析器,我想檢索包含關鍵字bitcoin的推文,而不是轉發(fā),鏈接,答案或圖片。

該查詢用以下字符串表示:

bitcoin -filter:retweets -filter:links -filter:replies -filter:images

Query類的setCount方法允許您定義要檢索的結果數(shù)。如果使用免費的開發(fā)人員API,則此數(shù)量限制為100個結果。

最后,仍然需要通過從Twitter對象實例的search方法傳遞該查詢來執(zhí)行此查詢 返回一個QueryResult對象,將其保留在其上以調用getTweets方法以檢索Status對象的列表。每個Status對象代表一條推文。最終可以通過后一個對象的getText方法訪問其文本內容。

所有這些提供了以下searchTweets方法:

public static List 《 Status 》 searchTweets(String keyword) {

List 《 Status 》 tweets = Collections.emptyList();

ConfigurationBuilder cb = new ConfigurationBuilder();

cb.setDebugEnabled(true).setOAuthConsumerKey(“YOUR_CONSUMER_KEY”)

.setOAuthConsumerSecret(“YOUR_CONSUMER_SECRET”)

.setOAuthAccessToken(“YOUR_ACCESS_TOKEN”)

.setOAuthAccessTokenSecret(“YOUR_ACCESS_TOKEN_SECRET”);

TwitterFactory tf = new TwitterFactory(cb.build());

Twitter twitter = tf.getInstance();

Query query = new Query(keyword + “ -filter:retweets -filter:links -filter:replies -filter:images”);

query.setCount(100);

query.setLocale(“en”);

query.setLang(“en”);;

try {

QueryResult queryResult = twitter.search(query);

tweets = queryResult.getTweets();

} catch (TwitterException e) {}

return tweets;

}

分析一條推文的情緒分析

下一步是分析一條推文的情緒分析。Google,Amazon或Microsoft提供解決方案。但是也有非常好的免費和開源解決方案,例如Stanford CoreNLP代碼庫。

Stanford CoreNLP代碼庫完全滿足我們的需求,這是我們的比特幣情緒分析器程序的一部分。

StanfordCoreNLP類是API的入口點。我們通過傳遞屬性的實例作為實例來實例化此對象,在其中定義了將在文本分析期間使用的不同注釋器。

然后,我調用StanfordCoreNLP對象的處理方法以開始文本分析。作為結果回報,我得到一個Annotation對象,將在該對象上迭代以獲得關聯(lián)的CoreMap對象。對于這些對象中的每一個,我都檢索一個Tree對象,該對象是通過將SentimentAnnotatedTree類作為輸入調用get方法而獲得的。

最后,仍然需要通過傳遞Tree的此實例作為輸入來調用RNNCoreAnnotations類的靜態(tài)方法getPredictedClass。返回值對應于此分析文本的總體情緒。文本的總體情感是通過保留文本最長部分的情感來計算的。

為作為輸入傳遞的文本計算的情感表示為一個整數(shù),其值的范圍可以從0到4(含0和4)。

為了便于以后對文本的情緒進行操作,我定義了TypeSentiment枚舉,將每個值與以該枚舉的形式定義的關聯(lián)感覺相關聯(lián)。

所有這些都給出以下代碼:

enum TypeSentiment {

VERY_NEGATIVE(0), NEGATIVE(1), NEUTRAL(2), POSITIVE(3), VERY_POSITIVE(4);

int index;

private TypeSentiment(int index) {

this.index = index;

}

public static TypeSentiment fromIndex(int index) {

for (TypeSentiment typeSentiment: values()) {

if (typeSentiment.index == index) {

return typeSentiment;

}

}

return TypeSentiment.NEUTRAL;

}

}

public static TypeSentiment analyzeSentiment(String text) {

Properties props = new Properties();

props.setProperty(“annotators”, “tokenize, ssplit, parse, sentiment”);

StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

int mainSentiment = 0;

if (text != null && text.length() 》 0) {

int longest = 0;

Annotation annotation = pipeline.process(text);

for (CoreMap sentence: annotation.get(CoreAnnotations.SentencesAnnotation.class)) {

Tree tree = sentence.get(SentimentCoreAnnotations.SentimentAnnotatedTree.class);

int sentiment = RNNCoreAnnotations.getPredictedClass(tree);

String partText = sentence.toString();

if (partText.length() 》 longest) {

mainSentiment = sentiment;

longest = partText.length();

}

}

}

return TypeSentiment.fromIndex(mainSentiment);

}

匯編程序的不同部分

現(xiàn)在我們可以檢索與給定關鍵字相對應的推文。然后我們能夠分析其每個推文,以獲得與之相關的推文情緒。剩下的就是將所有這些匯編到BitcoinSentimentAnalyzer類的主要方法中。

首先我定義一個HashMap,它將存儲在分析的tweets中發(fā)現(xiàn)每個情感的次數(shù)。然后使用關鍵字“ bitcoin”作為輸入來調用searchTweets方法。

下一步是迭代由searchTweets方法返回的列表中包含的Status對象。對于每條推文,我都檢索關聯(lián)的文本并調用analysisSentiment方法以TypeSentiment實例的形式計算關聯(lián)的情感。

每次返回情感時,我們都會在HashMap中增加計數(shù)器。在分析了所有檢索到的推文之后,我們可以顯示關于比特幣的每種觀點的百分比,以在Twitter上給出當前觀點的分布。

以下是完整的代碼:

package com.ssaurel.bitcoinsentiment;

import java.util.Collections;

import java.util.HashMap;

import java.util.List;

import java.util.Map.Entry;

import java.util.Properties;

import edu.stanford.nlp.ling.CoreAnnotations;

import edu.stanford.nlp.neural.rnn.RNNCoreAnnotations;

import edu.stanford.nlp.pipeline.Annotation;

import edu.stanford.nlp.pipeline.StanfordCoreNLP;

import edu.stanford.nlp.sentiment.SentimentCoreAnnotations;

import edu.stanford.nlp.trees.Tree;

import edu.stanford.nlp.util.CoreMap;

import twitter4j.Query;

import twitter4j.QueryResult;

import twitter4j.Status;

import twitter4j.Twitter;

import twitter4j.TwitterException;

import twitter4j.TwitterFactory;

import twitter4j.conf.ConfigurationBuilder;

public class BitcoinSentimentAnalyzer {

enum TypeSentiment {

VERY_NEGATIVE(0), NEGATIVE(1), NEUTRAL(2), POSITIVE(3), VERY_POSITIVE(4);

int index;

private TypeSentiment(int index) {

this.index = index;

}

public static TypeSentiment fromIndex(int index) {

for (TypeSentiment typeSentiment: values()) {

if (typeSentiment.index == index) {

return typeSentiment;

}

}

return TypeSentiment.NEUTRAL;

}

}

public static List 《 Status 》 searchTweets(String keyword) {

List 《 Status 》 tweets = Collections.emptyList();

ConfigurationBuilder cb = new ConfigurationBuilder();

cb.setDebugEnabled(true).setOAuthConsumerKey(“UiLHCETjD1SLKb4EL6ixm90Mv”)

.setOAuthConsumerSecret(“fDAqCfMQ6Azj1BbvXqS3f9HoPNM6BIGSV7jw3SUBu8TAaPPnBx”)

.setOAuthAccessToken(“58410144-m5F3nXtyZGNXFZzofNhYp3SQdNMrbfDLgZSvFMdOq”)

.setOAuthAccessTokenSecret(“PxlJJ3dRMlMiUf7rFAqEo4n0yLbiC6FC4hyvKF7ISBgdW”);

TwitterFactory tf = new TwitterFactory(cb.build());

Twitter twitter = tf.getInstance();

Query query = new Query(keyword + “ -filter:retweets -filter:links -filter:replies -filter:images”);

query.setCount(100);

query.setLocale(“en”);

query.setLang(“en”);;

try {

QueryResult queryResult = twitter.search(query);

tweets = queryResult.getTweets();

} catch (TwitterException e) {}

return tweets;

}

public static TypeSentiment analyzeSentiment(String text) {

Properties props = new Properties();

props.setProperty(“annotators”, “tokenize, ssplit, parse, sentiment”);

StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

int mainSentiment = 0;

if (text != null && text.length() 》 0) {

int longest = 0;

Annotation annotation = pipeline.process(text);

for (CoreMap sentence: annotation.get(CoreAnnotations.SentencesAnnotation.class)) {

Tree tree = sentence.get(SentimentCoreAnnotations.SentimentAnnotatedTree.class);

int sentiment = RNNCoreAnnotations.getPredictedClass(tree);

String partText = sentence.toString();

if (partText.length() 》 longest) {

mainSentiment = sentiment;

longest = partText.length();

}

}

}

return TypeSentiment.fromIndex(mainSentiment);

}

public static void main(String[] args) {

HashMap 《 TypeSentiment, Integer 》 sentiments = new HashMap 《 BitcoinSentimentAnalyzer.TypeSentiment, Integer 》 ();

List 《 Status 》 list = searchTweets(“bitcoin”);

for (Status status: list) {

String text = status.getText();

TypeSentiment sentiment = analyzeSentiment(text);

Integer value = sentiments.get(sentiment);

if (value == null) {

value = 0;

}

value++;

sentiments.put(sentiment, value);

}

int size = list.size();

System.out.println(“Sentiments about Bitcoin on ” + size + “ tweets”);

for (Entry 《 TypeSentiment, Integer 》 entry: sentiments.entrySet()) {

System.out.println(entry.getKey() + “ =》 ” + (entry.getValue() * 100) / size + “ %”);

}

}

}

運行比特幣情緒分析器

本文的最佳之處在于,我們將把剛剛構建的比特幣情緒分析器程序付諸實踐。執(zhí)行該程序后,經過幾秒鐘的分析,我得到以下結果:

在Twitter API返回的推文示例中,人們對比特幣的普遍看法如下:

1. 2%非常負面的推文

2. 72%的負面推文

3. 12%的中立推文

4. 14%的正面推文

我們的比特幣情緒分析清楚地表明,目前Twitter上的總體情緒對比特幣相當負面。

更進一步

我們的比特幣情緒分析儀功能完善,為進一步分析比特幣情緒提供了良好的基礎。因此,您可以連續(xù)執(zhí)行此分析,以使其與可通過Coindesk的比特幣價格指數(shù)API檢索的比特幣價格相關。

因此,如果Twitter上有關比特幣的普遍情緒與價格的變化直接相關,則可以由此推斷。該程序可以幫助您改善對比特幣未來價格的預測。對于此類程序,您將需要切換到Twitter的付費開發(fā)人員API,以實時獲取有關比特幣的推文。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉