{"id":177,"date":"2021-01-26T08:52:25","date_gmt":"2021-01-26T08:52:25","guid":{"rendered":"http:\/\/nlp.pef.mendelu.cz\/?page_id=177"},"modified":"2025-08-25T07:16:35","modified_gmt":"2025-08-25T07:16:35","slug":"summary-of-financial-articles","status":"publish","type":"page","link":"https:\/\/nlp.pef.mendelu.cz\/index.php\/summary-of-financial-articles\/","title":{"rendered":"Summary of Financial Articles"},"content":{"rendered":"\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"184\" height=\"74\" src=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/sfa-2.png\" alt=\"\" class=\"wp-image-522\"\/><\/figure><\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-text-align-left\">Aplikace&nbsp;<a href=\"https:\/\/sfa.ccfr.cz\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Summary of Financial Articles (SFA)<\/strong><\/a>&nbsp;je ur\u010dena pro z\u00edsk\u00e1v\u00e1n\u00ed \u010dl\u00e1nk\u016f z oblasti finan\u010dn\u00edch trh\u016f publikovan\u00fdch r\u016fzn\u00fdmi internetov\u00fdmi m\u00e9dii a jejich n\u00e1slednou anal\u00fdzu. C\u00edlem je usnadnit pr\u00e1ci finan\u010dn\u00edm analytik\u016fm, kte\u0159\u00ed mus\u00ed ka\u017edodenn\u011b zpracov\u00e1vat velk\u00e9 mno\u017estv\u00ed informac\u00ed, na jejich z\u00e1klad\u011b si vytv\u00e1\u0159et obr\u00e1zek o stavu finan\u010dn\u00edch trh\u016f a jednotliv\u00fdch cenn\u00fdch pap\u00edr\u016f a n\u00e1sledn\u011b vyd\u00e1vat doporu\u010den\u00ed z\u00e1kazn\u00edk\u016fm ke strategii obchodov\u00e1n\u00ed.<\/p>\n<\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-top is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"795\" src=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/predictive_analytics-1024x795.png\" alt=\"\" class=\"wp-image-421\" srcset=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/predictive_analytics-1024x795.png 1024w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/predictive_analytics-300x233.png 300w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/predictive_analytics-768x597.png 768w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/predictive_analytics.png 1039w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div><\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity is-style-dots\"\/>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-2 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:15%\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:70%\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"o-aplikaci\">O Aplikaci<\/h2>\n\n\n\n<p>Ze z\u00edskan\u00fdch dokument\u016f (\u010dl\u00e1nk\u016f a kr\u00e1tk\u00fdch zpr\u00e1v) vytv\u00e1\u0159\u00ed aplikace zkr\u00e1cen\u00e9 souhrny vystihuj\u00edc\u00ed podstatu textu a analyzuje jejich sentiment. Aplikace pravideln\u011b stahuje dokumenty a zobrazuje je ve webov\u00e9 aplikaci ve form\u011b p\u0159ehledn\u00e9ho seznamu. U\u017eivatel\u016fm tak nejsou p\u0159edkl\u00e1d\u00e1ny cel\u00e9 \u010dl\u00e1nky, ale pouze jejich souhrn. Ten je k dispozici v n\u011bkolika form\u00e1ch. V p\u0159\u00edpad\u011b, \u017ee autor \u010dl\u00e1nku s\u00e1m v \u00favodu t\u00e9ma shrnuje, je tato \u010d\u00e1st zobrazena (z\u00e1lo\u017eka Author). Podobn\u011b je to i s p\u0159\u00edpadn\u00fdm souhrnem na z\u00e1v\u011br, kter\u00fd tak\u00e9 \u010dasto obsahuje d\u016fle\u017eit\u00e9 informace (Conclusion). Nejd\u016fle\u017eit\u011bj\u0161\u00ed je v\u0161ak souhrn generovan\u00fd vlastn\u00ed aplikac\u00ed SFA (Generated). Ten je vytv\u00e1\u0159en v\u017edy, pokud \u010dl\u00e1nek obsahuje dostate\u010dn\u00e9 mno\u017estv\u00ed textu, aby bylo mo\u017en\u00e9 souhrn vytvo\u0159it. Nap\u0159\u00edklad u kr\u00e1tk\u00fdch zpr\u00e1v to nen\u00ed v\u017edy nutn\u00e9. Jednotliv\u00e9 souhrny jsou k dispozici p\u0159ehledn\u011b na samostatn\u00fdch kart\u00e1ch a u\u017eivatel tak m\u00e1 mo\u017enost si jednodu\u0161e vybrat, co ho zaj\u00edm\u00e1.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"655\" src=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/clanky.png\" alt=\"\" class=\"wp-image-434\" srcset=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/clanky.png 1024w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/clanky-300x192.png 300w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/clanky-768x491.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">\u010cl\u00e1nky<\/figcaption><\/figure><\/div><\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:15%\"><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-4 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:15%\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:70%\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\" id=\"funkce-aplikace\">Funkce Aplikace<\/h3>\n\n\n\n<p>Ke ka\u017ed\u00e9mu dokumentu je tak\u00e9 k dispozici informace o datu publikov\u00e1n\u00ed, kl\u00ed\u010dov\u00e1 slova charakterizuj\u00edc\u00ed oblast, kter\u00e9 se zpr\u00e1va t\u00fdk\u00e1, a odkaz na cel\u00fd \u010dl\u00e1nek dostupn\u00fd p\u0159es jeho n\u00e1zev. Je tak\u00e9 vyzna\u010deno, zda se jedn\u00e1 o \u010dl\u00e1nek (<strong>Analysis<\/strong>) nebo kr\u00e1tkou zpr\u00e1vu (<strong>News<\/strong>).<\/p>\n\n\n\n<p>Jednotliv\u00e9 dokumenty je v aplikaci mo\u017en\u00e9&nbsp;<strong>filtrovat<\/strong>&nbsp;dle:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-3 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.67%\">\n<div class=\"wp-block-group has-background\" style=\"background:linear-gradient(135deg,rgb(250,250,250) 0%,rgb(242,242,242) 0%)\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<ul class=\"wp-block-list\">\n<li><strong>datumu<\/strong>, kdy byly publikov\u00e1ny (Date range),<\/li>\n\n\n\n<li><strong>ticker\u016f<\/strong> \u2013 n\u00e1zv\u016f cenn\u00fdch pap\u00edr\u016f, kter\u00fdch se t\u00fdkaj\u00ed (Tickers),<\/li>\n\n\n\n<li><strong>tag\u016f<\/strong> \u2013 oblast\u00ed, do kter\u00e9 spadaj\u00ed (Tags),<\/li>\n\n\n\n<li><strong>kategorie<\/strong> \u2013 \u010dl\u00e1nek nebo news (Category),<\/li>\n\n\n\n<li><strong>sentimentu<\/strong> \u2013 pozitivn\u00ed, negativn\u00ed nebo neutr\u00e1ln\u00ed hodnocen\u00ed (Sentiment),<\/li>\n\n\n\n<li><strong>dom\u00e9n<\/strong> \u2013 webov\u00fdch zdroj\u016f, ze kter\u00fdch se stahuje (Domains).<\/li>\n<\/ul>\n<\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\"><\/div>\n<\/div>\n\n\n\n<p><br>a&nbsp;<strong>\u0159adit<\/strong>&nbsp;podle data vzestupn\u011b \u010di sestupn\u011b.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"60\" src=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/filtry.png\" alt=\"\" class=\"wp-image-432\" srcset=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/filtry.png 1024w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/filtry-300x18.png 300w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/filtry-768x45.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Filtry<\/figcaption><\/figure><\/div>\n\n\n<p>Nastaven\u00ed v\u0161ech filter\u016f je mo\u017en\u00e9 zru\u0161it tla\u010d\u00edtkem&nbsp;<strong>Reset all filters<\/strong>&nbsp;v z\u00e1hlav\u00ed aplikace.<\/p>\n\n\n\n<p>Aplikace tak\u00e9 v z\u00e1hlav\u00ed zobrazuje&nbsp;<strong>p\u0159ehled sentimentu<\/strong>&nbsp;z\u00edskan\u00fdch dokument\u016f za ur\u010dit\u00e9 obdob\u00ed. V lev\u00e9m grafu je tak mo\u017en\u00e9 analyzovat pom\u011br pozitivn\u00edch a negativn\u00edch zpr\u00e1v. V prav\u00e9m grafu je informace o&nbsp;<strong>nejv\u00edce diskutovan\u00fdch<\/strong>&nbsp;<em>tickerech<\/em>&nbsp;za vybran\u00e9 obdob\u00ed, respektive t\u011bch, u kter\u00fdch do\u0161lo k nejv\u011bt\u0161\u00ed zm\u011bn\u011b v po\u010dtu koment\u00e1\u0159\u016f. V inici\u00e1ln\u00edm nastaven\u00ed jsou zobrazeny nejdiskutovan\u011bj\u0161\u00ed bez ohledu na sentiment. Pomoc\u00ed tla\u010d\u00edtka&nbsp;<em>Change<\/em>&nbsp;je mo\u017en\u00e9 specifikovat konkr\u00e9tn\u00ed sentiment a zobraz\u00ed se p\u0159ehled nejdiskutovan\u011bj\u0161\u00edch s dan\u00fdm sentimentem. U ka\u017ed\u00e9ho tickeru je zobrazena i hodnota ukazuj\u00edc\u00ed, zda do\u0161lo k n\u00e1r\u016fstu \u010di poklesu po\u010dtu (pozitivn\u00ed\/negativn\u00ed hodnota).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"452\" src=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/sentiment.png\" alt=\"\" class=\"wp-image-431\" srcset=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/sentiment.png 1024w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/sentiment-300x132.png 300w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/sentiment-768x339.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">V\u00fdvoj sentimentu<\/figcaption><\/figure><\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"441\" src=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/trending.png\" alt=\"\" class=\"wp-image-430\" srcset=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/trending.png 1024w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/trending-300x129.png 300w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/trending-768x331.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Diskutovanost tickeru<\/figcaption><\/figure><\/div><\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:15%\"><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:15%\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:70%\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"vyvoj-aplikace\">V\u00fdvoj Aplikace<\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-5 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-vertically-aligned-bottom is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:40%\">\n<h3 class=\"wp-block-heading\" id=\"frontend\">Frontend<\/h3>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:60%\"><div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1016\" height=\"526\" src=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/static_web-1.png\" alt=\"\" class=\"wp-image-422\" style=\"width:254px;height:132px\" srcset=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/static_web-1.png 1016w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/static_web-1-300x155.png 300w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/static_web-1-768x398.png 768w\" sizes=\"auto, (max-width: 1016px) 100vw, 1016px\" \/><\/figure><\/div><\/div>\n<\/div>\n\n\n\n<p>Architektura frontendu aplikace je implementov\u00e1na jako&nbsp;<em>Single Page Application<\/em>. Tento typ aplikace je webov\u00e1 aplikace s jednou str\u00e1nkou HTML, kter\u00e1 se inicializuje jednou a p\u0159i dal\u0161\u00edch interakc\u00edch se zm\u011bn\u00ed pouze pot\u0159ebn\u00fd obsah. T\u00e9m\u011b\u0159 cel\u00e1 aplikace b\u011b\u017e\u00ed p\u0159\u00edmo v klientsk\u00e9m prohl\u00ed\u017ee\u010di, zat\u00edmco server se v\u011bt\u0161inou pou\u017e\u00edv\u00e1 k autentizaci a jako zdroj nebo \u00falo\u017ei\u0161t\u011b dat. Ve srovn\u00e1n\u00ed s tradi\u010dn\u00edmi serverov\u011b orientovan\u00fdmi aplikacemi je hlavn\u00edm rozd\u00edlem zp\u016fsob, jak\u00fdm jsou data p\u0159ij\u00edm\u00e1na a odes\u00edl\u00e1na po po\u010d\u00e1te\u010dn\u00edm po\u017eadavku HTTP. Jednostr\u00e1nkov\u00e9 aplikace pou\u017e\u00edvaj\u00ed k p\u0159enosu dat mezi serverem a klientem&nbsp;<strong>AJAX<\/strong>&nbsp;(asynchronn\u00ed JavaScript a XML), kter\u00e9 jsou obvykle ve form\u00e1tu JSON. To znamen\u00e1, \u017ee v okam\u017eiku, kdy se data dostanou ke klientovi, klient \u010d\u00e1ste\u010dn\u011b znovu vykresl\u00ed str\u00e1nku HTML, ani\u017e by musel aktualizovat celou str\u00e1nku. Proto se poka\u017ed\u00e9 nena\u010dte cel\u00fd k\u00f3d HTML, co\u017e se odr\u00e1\u017e\u00ed v rychlosti aplikace.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-6 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:70%\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p>Aplikace je naprogramov\u00e1na s vyu\u017eit\u00edm JavaScriptov\u00e9 knihovny&nbsp;<strong>React<\/strong>. V sou\u010dasn\u00e9 dob\u011b je to jedna z nejpopul\u00e1rn\u011bj\u0161\u00edch knihoven nebo framework\u016f pro vytv\u00e1\u0159en\u00ed webov\u00e9ho u\u017eivatelsk\u00e9ho rozhran\u00ed. React je zalo\u017een na opakovan\u011b pou\u017eiteln\u00fdch komponent\u00e1ch s dob\u0159e definovan\u00fdm a jednoduch\u00fdm tokem dat. React pou\u017e\u00edv\u00e1 syntaxi JSX (roz\u0161\u00ed\u0159en\u00ed syntaxe k JavaScriptu) a komponenty se vykresluj\u00ed rychleji d\u00edky virtu\u00e1ln\u00edmu DOM. React jsme vybrali zejm\u00e9na kv\u016fli dobr\u00e9 podpo\u0159e TypeScriptu, rozs\u00e1hl\u00e9 komunit\u011b a stavu dokumentace.<\/p>\n<\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:30%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"507\" height=\"334\" src=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/react.png\" alt=\"\" class=\"wp-image-423\" srcset=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/react.png 507w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/react-300x198.png 300w\" sizes=\"auto, (max-width: 507px) 100vw, 507px\" \/><\/figure><\/div><\/div>\n<\/div>\n\n\n\n<p>Pro v\u00fdvoj nebyl pou\u017eit \u010dist\u00fd JavaScript, ale&nbsp;<strong>TypeScript<\/strong>. Ten poskytuje rozhran\u00ed a \u0159\u00edzen\u00ed typ\u016f, kter\u00e9 usnad\u0148uj\u00ed v\u00fdvoj a umo\u017e\u0148uj\u00ed jeho lep\u0161\u00ed kontrolu. Aplikace centralizuje a udr\u017euje sv\u016fj glob\u00e1ln\u00ed stav pomoc\u00ed kontejner\u016f stavu Redux. Tato knihovna umo\u017e\u0148uje spravovat a p\u0159edv\u00eddateln\u011b mutovat stav aplikace JavaScriptu. Cel\u00e1 aplikace je pak zabalen\u00e1 v rozhran\u00ed Ant Design UI, kter\u00e9 nab\u00edz\u00ed n\u011bkolik dynamick\u00fdch a vizu\u00e1ln\u011b p\u0159ipraven\u00fdch komponent.<\/p>\n<\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"backend\">Backend<\/h3>\n\n\n\n<p>Serverov\u00e1 \u010d\u00e1st aplikace funguje jako komunika\u010dn\u00ed rozhran\u00ed s datab\u00e1z\u00ed a realizuje logiku aplikace. Na z\u00e1klad\u011b po\u017eadavku zpracov\u00e1v\u00e1 data v po\u017eadovan\u00e9m form\u00e1tu a struktu\u0159e. Tato \u010d\u00e1st aplikace je implementov\u00e1na v popul\u00e1rn\u00edm programovac\u00edm jazyce&nbsp;<strong>Python<\/strong>&nbsp;verze 3, a to p\u0159edev\u0161\u00edm d\u00edky \u0161irok\u00e9 \u0161k\u00e1le dostupn\u00fdch knihoven, kter\u00e9 p\u0159isp\u00edvaj\u00ed k principu op\u011btovn\u00e9ho pou\u017eit\u00ed k\u00f3du a t\u00edm v\u00fdrazn\u011b urychluj\u00ed v\u00fdvoj.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"898\" height=\"586\" src=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/setup.png\" alt=\"\" class=\"wp-image-424\" style=\"width:449px;height:293px\" srcset=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/setup.png 898w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/setup-300x196.png 300w, https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/setup-768x501.png 768w\" sizes=\"auto, (max-width: 898px) 100vw, 898px\" \/><\/figure><\/div>\n\n\n<p>ednoduch\u00fd samostatn\u00fd softwarov\u00fd bal\u00ed\u010dek a jako monolit obsahuje v\u0161e pot\u0159ebn\u00e9 ke spu\u0161t\u011bn\u00ed k\u00f3du prost\u0159ed\u00ed aplikace, syst\u00e9mov\u00fdch knihoven a konfigurace. Kontejnery izoluj\u00ed software a prost\u0159ed\u00ed a zaji\u0161\u0165uj\u00ed nez\u00e1vislost platformy. Hlavn\u00ed v\u00fdhodou tohoto p\u0159\u00edstupu je mimo jin\u00e9 mo\u017enost m\u00edstn\u00edho rozvoje, kdy m\u00e1 ka\u017ed\u00fd v\u00fdvoj\u00e1\u0159 vlastn\u00ed kopii aplikace, na kter\u00e9 m\u016f\u017ee pracovat. Nemus\u00ed se starat o nekompatibilitu mezi svou m\u00edstn\u00ed platformou a serverem, proto\u017ee kontejnery maj\u00ed sv\u00e9 vlastn\u00ed b\u011bhov\u00e9 prost\u0159ed\u00ed. T\u00edm je zaji\u0161t\u011bno, \u017ee aplikace funguje stejn\u011b v jak\u00e9mkoli prost\u0159ed\u00ed podporovan\u00e9m Dockerem.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"komunikacni-rozhrani\">Komunika\u010dn\u00ed rozhran\u00ed<\/h3>\n\n\n\n<p>Pro v\u00fdvoj byl pou\u017eit framework&nbsp;<strong>Flask<\/strong>, kter\u00fd implementuje obvykl\u00e9 osv\u011bd\u010den\u00e9 postupy v oblasti v\u00fdvoje webov\u00fdch aplikac\u00ed. Umo\u017e\u0148uje tak\u00e9 rychl\u00e9 nasazen\u00ed d\u00edky komunika\u010dn\u00edmu rozhran\u00ed&nbsp;<strong>WSGI<\/strong>, kter\u00e9 je podporov\u00e1no webov\u00fdm serverem&nbsp;<strong>Apache<\/strong>. R\u00e1mec funguje jako&nbsp;<strong>REST-API<\/strong>, co\u017e znamen\u00e1 \u017ee na z\u00e1klad\u011b metody URI a HTTP po\u017eadavku prov\u00e1d\u00ed akci a vrac\u00ed p\u0159\u00edslu\u0161nou odpov\u011b\u010f, obvykle strukturovanou ve form\u00e1tu JSON. V\u00fdsledkem je, \u017ee implementace jednoho backendu zvl\u00e1dne po\u017eadavky webov\u00e9ho i mobiln\u00edho klienta. Flask, na rozd\u00edl od jin\u00fdch framework\u016f (nap\u0159\u00edklad Django), nevy\u017eaduje p\u0159\u00edsnou aplika\u010dn\u00ed architekturu a do zna\u010dn\u00e9 m\u00edry ponech\u00e1v\u00e1 v\u00fdvoj\u00e1\u0159\u016fm volnost p\u0159i implementaci, co\u017e bylo pro prototyp aplikace velmi \u017e\u00e1douc\u00ed. Jedna nebo v\u00edce instanc\u00ed aplikace se inicializuje na za\u010d\u00e1tku slu\u017eby, kdy\u017e se tak\u00e9 na\u010dtou nezbytn\u00e9 z\u00e1vislosti a modely a vytvo\u0159\u00ed se p\u0159ipojen\u00ed k datab\u00e1zi. Tato data jsou trval\u00e1 a\u017e do konce slu\u017eby, co\u017e v\u00fdrazn\u011b urychluje aplikaci. Krom\u011b toho je mo\u017en\u00e9 spustit dal\u0161\u00ed instance pro \u0161k\u00e1lov\u00e1n\u00ed v\u00fdkonu podle aktu\u00e1ln\u00edho zat\u00ed\u017een\u00ed. P\u0159i v\u00fdvoji pou\u017e\u00edv\u00e1me principy CI \/ CD. Nasazen\u00ed nov\u00e9 verze aplikace je pln\u011b automatizovan\u00e9 (inicializace kontejneru, spu\u0161t\u011bn\u00ed slu\u017eby, testovac\u00ed skripty a samotn\u00e1 aplikace) pomoc\u00ed n\u00e1stroj\u016f&nbsp;<strong>GitLab<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ulozeni-dat\">Ulo\u017een\u00ed dat<\/h3>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:70%\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p>Pro ukl\u00e1d\u00e1n\u00ed dat se pou\u017e\u00edvaj\u00ed dv\u011b r\u016fzn\u00e1 \u00falo\u017ei\u0161t\u011b. Data se automaticky na\u010d\u00edtaj\u00ed scrapov\u00e1n\u00ed z r\u016fzn\u00fdch webov\u00fdch str\u00e1nek. Ka\u017ed\u00e1 str\u00e1nka m\u00e1 bohu\u017eel jinou strukturu, kter\u00e1 se tak\u00e9 \u010dasem m\u011bn\u00ed, tak\u017ee nem\u016f\u017eeme spol\u00e9hat na konzistenci z\u00edskan\u00fdch \u00fadaj\u016f. Proto jsou v prvn\u00ed f\u00e1zi data ulo\u017eena v NoSQL datab\u00e1zi&nbsp;<strong>Mongo DB<\/strong>. Nerela\u010dn\u00ed datab\u00e1ze neukl\u00e1daj\u00ed data do tabulek, ale jako takzvan\u00e9 dokumenty. Ka\u017ed\u00fd dokument pot\u00e9 ukl\u00e1d\u00e1 data ve form\u011b kl\u00ed\u010d-hodnota, ale vnit\u0159n\u00ed struktura dokument\u016f nemus\u00ed b\u00fdt jednotn\u00e1. Ve druh\u00e9 f\u00e1zi jsou data normalizov\u00e1na a ulo\u017eena v tradi\u010dn\u00ed rela\u010dn\u00ed datab\u00e1zi&nbsp;<strong>Postgres<\/strong>. Normalizace dat zahrnuje nap\u0159. extrakci kl\u00ed\u010dov\u00fdch slov \u010di autorsk\u00fdch souhrn\u016f a identifikaci&nbsp;<em>ticker\u016f<\/em>.<\/p>\n<\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:30%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"273\" height=\"298\" src=\"https:\/\/nlp.pef.mendelu.cz\/wp-content\/uploads\/2022\/06\/server.png\" alt=\"\" class=\"wp-image-425\" style=\"width:205px;height:224px\"\/><\/figure><\/div><\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"tvorba-souhrnu\">Tvorba souhrnu<\/h3>\n\n\n\n<p>Analyzovali jsme n\u011bkolik r\u016fzn\u00fdch p\u0159\u00edstup\u016f jak z pohledu abstraktivn\u00edho tak extraktivn\u00ed tvorby souhrnu. Porovn\u00e1vali jsme v\u00fdstupy jak z vlastn\u00edch \u0159e\u0161en\u00ed, tak z b\u011b\u017en\u011b dostupn\u00fdch knihoven (nap\u0159\u00edklad&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/pypi.org\/project\/sumy\/\" target=\"_blank\"><strong>Sumy<\/strong><\/a>,&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/www.geeksforgeeks.org\/python-text-summarizer\/\" target=\"_blank\"><strong>Python Text Summarizer<\/strong><\/a>).<\/p>\n\n\n\n<p>Souhrn, kter\u00fd obsahuje podstatn\u00e9 informace z cel\u00e9ho \u010dl\u00e1nku, je vytvo\u0159en extraktivn\u00edm zp\u016fsobem. Pro vytvo\u0159en\u00ed souhrnu je pou\u017eita knihovna&nbsp;<strong>Gensim<\/strong>&nbsp;z programovac\u00edho jazyka Python. Extrakce je zalo\u017eena na algoritmu&nbsp;<strong>TextRank<\/strong>, co\u017e je varianta algoritmu PageRank pou\u017e\u00edvan\u00e9ho spole\u010dnost\u00ed Google pro hodnocen\u00ed relevance webov\u00fdch str\u00e1nek.<\/p>\n\n\n\n<div class=\"wp-block-group has-background\" style=\"background:linear-gradient(135deg,rgb(254,255,253) 0%,rgb(241,251,235) 0%)\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p><strong>Princip algoritmu:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>preprocesing\u00a0(eliminace stopslov, stemming),<\/li>\n\n\n\n<li>vytvo\u0159en\u00ed grafu, p\u0159i\u010dem\u017e v\u011bty tvo\u0159\u00ed vrcholy,<\/li>\n\n\n\n<li>hrany ozna\u010duj\u00edc\u00ed podobnost mezi dv\u011bma v\u011btami ve vrcholech,<\/li>\n\n\n\n<li>na tomto v\u00e1\u017een\u00e9m grafu pust\u00edme algoritmus\u00a0PageRank,\u00a0<\/li>\n\n\n\n<li>vybere se nejvy\u0161\u0161\u00ed sk\u00f3re a vlo\u017e\u00ed se do souhrnu,\u00a0<\/li>\n\n\n\n<li>na z\u00e1klad\u011b pom\u011bru nebo po\u010dtu slov se rozhodne o po\u010dtu vrchol\u016f, kter\u00e9 maj\u00ed b\u00fdt vybr\u00e1ny.\u00a0<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n\n<div style=\"height:25px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>V sou\u010dasn\u00e9 dob\u011b pracujeme na vlastn\u00edm \u0159e\u0161en\u00ed, kter\u00e9 kombinuje oba p\u0159\u00edstupy (abstraktivn\u00ed i extraktivn\u00ed) a vyu\u017e\u00edv\u00e1 v\u00fdhod obou. V souhrnu jsou zahrnuty nezm\u011bn\u011bn\u00e9 kl\u00ed\u010dov\u00e9 informace, co\u017e je velmi d\u016fle\u017eit\u00e9 pro finan\u010dn\u00ed analytiky a z\u00e1rove\u0148 na sebe v\u011bty plynule navazuj\u00ed. Toto \u0159e\u0161en\u00ed nab\u00eddneme ve webov\u00e9 aplikaci jako dal\u0161\u00ed, alternativn\u00ed, souhrn.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"indentifikace-sentimentu\">Indentifikace sentimentu<\/h3>\n\n\n\n<p>Identifikace sentimentu dokumentu je vytv\u00e1\u0159ena na z\u00e1klad\u011b nikoliv cel\u00e9ho \u010dl\u00e1nku, ale pouze jeho souhrnu. V experiment\u00e1ln\u00ed f\u00e1zi v\u00fdvoje prototypu jsme identifikovali tento p\u0159\u00edstup jako vhodn\u011bj\u0161\u00ed, nebo\u0165 p\u0159i pr\u00e1ci s cel\u00fdm \u010dl\u00e1nkem n\u00e1m obvykle sentiment vych\u00e1zel jako neutr\u00e1ln\u00ed.<\/p>\n\n\n\n<p>Tato \u010d\u00e1st je postavena na modelu&nbsp;<strong>BERT<\/strong>, kter\u00fd byl firmou Google natr\u00e9nov\u00e1n na \u010dl\u00e1nc\u00edch ze zpravodajstv\u00ed. My jsme tento model doplnili o dotr\u00e9novanou vrstvu stoj\u00edc\u00ed na manu\u00e1ln\u011b olabelovan\u00fdch textech z oblasti finan\u010dn\u00edch trh\u016f.<\/p>\n\n\n\n<p>Sentiment je u ka\u017ed\u00e9ho \u010dl\u00e1nku nebo zpr\u00e1vy identifikov\u00e1n barvou z\u00e1hlav\u00ed \u0161t\u00edtku. Pokud nen\u00ed ozna\u010den \u017e\u00e1dnou barvou, znamen\u00e1 to, \u017ee nebylo mo\u017en\u00e9 sentiment ur\u010dit. Obvykle je p\u0159\u00ed\u010dinou p\u0159\u00edli\u0161 kr\u00e1tk\u00fd nebo neklasifikovateln\u00fd obsah. \u010cl\u00e1nky je mo\u017en\u00e9 na z\u00e1klad\u011b sentimentu i jednodu\u0161e filtrovat.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote pullquote is-style-default has-border-color\" style=\"border-color:#79be13\"><blockquote><p><em>Tvorba souhrnu&nbsp;i&nbsp;identifikace&nbsp;sentimentu&nbsp;prob\u00edhaj\u00ed pravideln\u011b v ur\u010den\u00fdch \u010dasov\u00fdch intervalech. M\u016f\u017ee se tedy st\u00e1t, \u017ee n\u011bkter\u00e9 \u010dl\u00e1nky nebo zpr\u00e1vy nejsou je\u0161t\u011b po sta\u017een\u00ed zpracov\u00e1ny.<\/em><\/p><\/blockquote><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:15%\"><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:15%\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:70%\">\n<h2 class=\"wp-block-heading\" id=\"uplatneni\">Uplatn\u011bn\u00ed<\/h2>\n\n\n\n<p>Aplikace je vytv\u00e1\u0159ena ve spolupr\u00e1ci se spole\u010dnost\u00ed&nbsp;<strong><a rel=\"noreferrer noopener\" href=\"https:\/\/www.ccfr.cz\/en\/\" target=\"_blank\">CCF Research<\/a>, a.s.<\/strong>, kter\u00e1 \u0159e\u0161en\u00ed nab\u00edz\u00ed komer\u010dn\u00edm subjekt\u016fm. Firemn\u00ed webov\u00e1 prezentace nab\u00edzen\u00e9 aplikace je k dispozici&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/mta.ccfr.cz\/summary-of-financial-articles\/\" target=\"_blank\"><strong>zde<\/strong><\/a>.<\/p>\n\n\n\n<p>Komer\u010dn\u00ed verzi rutinn\u011b vyu\u017e\u00edv\u00e1 spole\u010dnost<strong>&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/www.cyrrus.cz\/\" target=\"_blank\">Cyrrus<\/a>, a.s.<\/strong>&nbsp;Tato verze nab\u00edz\u00ed oproti prototypu v\u011bt\u0161\u00ed mno\u017estv\u00ed sledovan\u00fdch zdroj\u016f (dom\u00e9n) a dokumenty jsou stahov\u00e1ny s vy\u0161\u0161\u00ed frekvenc\u00ed, tak aby m\u011bli analytici k dispozici v\u017edy nej\u010derstv\u011bj\u0161\u00ed informace a dok\u00e1zali se v\u010das a spr\u00e1vn\u011b rozhodovat.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Um\u00edst\u011bn\u00ed<\/h2>\n\n\n\n<p>Aplikace je k dispozici <a href=\"https:\/\/sfa.ccfr.cz\/\">zde<\/a>.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:15%\"><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-10 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:15%\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:70%\">\n<h2 class=\"wp-block-heading\" id=\"uplatneni\">Publikace<\/h2>\n\n\n\n<div class=\"wp-block-group has-background\" style=\"background:linear-gradient(135deg,rgb(244,244,244) 14%,rgb(244,244,244) 100%)\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<ul class=\"wp-block-list\">\n<li>Chochula, P.: Summarization of Documents Focused on Financial Markets. In HAMPEL, Vr\u00e1nov\u00e1 PEFnet 2021: Abstracts. 1. vyd. Brno: Mendelova univerzita v Brn\u011b, 2021, s. 37\u201338. ISBN 978-80-7509-811-5.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Valovi\u010d, R. \u0160\u0165astn\u00e1, P.: Sentiment Analysis of Financial News. In HAMPEL, Vr\u00e1nov\u00e1 PEFnet 2021: Abstracts. 1. vyd. Brno: Mendelova univerzita v Brn\u011b, 2021, s. 137\u2013138. ISBN 978-80-7509-811-5.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Jak\u00fabek, T. Valovi\u010d, R. P\u0159ichystal, J.: Summarization of Financial Articles. In Solilov\u00e1, Vr\u00e1nov\u00e1 Economic Competitiveness and Sustainability 2022: Abstracts. 1. vyd. Brno: Mendelova univerzita v Brn\u011b, 2022, s. 18-19. ISBN 978-80-7509-826-9 (<a href=\"https:\/\/akela.mendelu.cz\/~jprich\/prichystal-sfa.pdf\">Working paper<\/a>)<\/li>\n<\/ul>\n<\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:15%\"><\/div>\n<\/div>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Aplikace&nbsp;Summary of Financial Articles (SFA)&nbsp;je ur\u010dena pro z\u00edsk\u00e1v\u00e1n\u00ed \u010dl\u00e1nk\u016f z oblasti finan\u010dn\u00edch trh\u016f publikovan\u00fdch r\u016fzn\u00fdmi internetov\u00fdmi m\u00e9dii a jejich n\u00e1slednou [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":186,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-177","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/nlp.pef.mendelu.cz\/index.php\/wp-json\/wp\/v2\/pages\/177","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nlp.pef.mendelu.cz\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/nlp.pef.mendelu.cz\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/nlp.pef.mendelu.cz\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nlp.pef.mendelu.cz\/index.php\/wp-json\/wp\/v2\/comments?post=177"}],"version-history":[{"count":76,"href":"https:\/\/nlp.pef.mendelu.cz\/index.php\/wp-json\/wp\/v2\/pages\/177\/revisions"}],"predecessor-version":[{"id":680,"href":"https:\/\/nlp.pef.mendelu.cz\/index.php\/wp-json\/wp\/v2\/pages\/177\/revisions\/680"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nlp.pef.mendelu.cz\/index.php\/wp-json\/wp\/v2\/media\/186"}],"wp:attachment":[{"href":"https:\/\/nlp.pef.mendelu.cz\/index.php\/wp-json\/wp\/v2\/media?parent=177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}