1
Fork 0
mirror of https://github.com/Steffo99/unisteffo.git synced 2025-02-16 15:53:58 +00:00

Add quite a few things

This commit is contained in:
Steffo 2021-01-26 19:35:07 +01:00
parent dca9247804
commit 6080e245fb
Signed by: steffo
GPG key ID: 6965406171929D01
15 changed files with 385 additions and 25 deletions

View file

@ -8,7 +8,7 @@
<inspection_tool class="LessResolvedByNameOnly" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="LessUnresolvedMixin" enabled="true" level="ERROR" enabled_by_default="true" />
<inspection_tool class="LessUnresolvedVariable" enabled="true" level="ERROR" enabled_by_default="true" />
<inspection_tool class="LongLine" enabled="true" level="WEAK WARNING" enabled_by_default="true" />
<inspection_tool class="LongLine" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
<inspection_tool class="PoetryPackageVersion" enabled="true" level="ERROR" enabled_by_default="true" />
<inspection_tool class="ProblematicWhitespace" enabled="true" level="WEAK WARNING" enabled_by_default="true" />
<inspection_tool class="PyAbstractClassInspection" enabled="true" level="ERROR" enabled_by_default="true" />

10
package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "appuntiweb2",
"version": "0.1.0",
"name": "appuntiweb",
"version": "0.11.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -3530,9 +3530,9 @@
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
},
"bluelib": {
"version": "0.24.1",
"resolved": "https://registry.npmjs.org/bluelib/-/bluelib-0.24.1.tgz",
"integrity": "sha512-USc401bLOfIoypZW2Q+2F3AncCMRUV41X7dYybfqZbHZtdi6us6lNAXwKT6aBxE5tQZCRp2rfVn6Qli2hbsfpQ==",
"version": "0.24.2",
"resolved": "https://registry.npmjs.org/bluelib/-/bluelib-0.24.2.tgz",
"integrity": "sha512-xzFax7NdysmuH7VEsZHEsU5OftWgagYua1s7JD9NWO2iooYNUzcAX/yXPTP9m4JUuW6EQZiapRqtCd49ubVrrg==",
"requires": {
"@babel/preset-env": "^7.12.11",
"@babel/preset-react": "^7.12.10",

View file

@ -6,7 +6,8 @@
"@testing-library/jest-dom": "^5.11.9",
"@testing-library/react": "^11.2.3",
"@testing-library/user-event": "^12.6.2",
"bluelib": "^0.24.1",
"bluelib": "^0.24.2",
"prop-types": "^15.7.2",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"react-router-dom": "^5.2.0",

View file

@ -3,12 +3,14 @@ import {Bluelib, Main} from "bluelib/lib/components";
import {Router} from "@reach/router";
import Home from "./routes/Home";
import Error404 from "./routes/Error404";
import Gestinfo from "./routes/Gestinfo";
export default function App() {
return (
<Bluelib skin={"rygblue"}>
<Router>
<Home path={"/"}/>
<Gestinfo path={"/gestinfo"}/>
<Error404 default/>
</Router>
</Bluelib>

View file

@ -1,10 +1,18 @@
import React from "react";
import {BaseLink, Bluelib, Title} from "bluelib/lib/components";
import {BaseLink, Title} from "bluelib/lib/components";
import PropTypes from "prop-types";
export default function Home() {
export default function MainTitle({subtitle}) {
return (
<div>
<Title size={"xxl"}><BaseLink href={"/"}>Unisteffo</BaseLink></Title>
<Title size={"xl"}>{subtitle}</Title>
</div>
)
}
MainTitle.propTypes = {
subtitle: PropTypes.node
}

View file

@ -1,15 +1,22 @@
import React from "react";
import {BaseLink, Title, Main} from "bluelib/lib/components";
import {Main} from "bluelib/lib/components";
import MainTitle from "./MainTitle";
import PropTypes from "prop-types";
export default function Page({children}) {
export default function Page({children, subtitle}) {
return (
<div>
<Title size={"xxl"}><BaseLink href={"/"}>Unisteffo</BaseLink></Title>
<Title size={"xl"}>Gli appunti open source di <BaseLink href={"https://steffo.eu"}>Steffo</BaseLink></Title>
<MainTitle subtitle={subtitle}/>
<Main>
{children}
</Main>
</div>
)
}
Page.propTypes = {
children: PropTypes.node,
subtitle: PropTypes.node,
}

View file

@ -0,0 +1,20 @@
import React from "react";
import {Box, Title} from "bluelib/lib/components";
import PropTypes from "prop-types";
export default function TitleBox({children, title}) {
return (
<Box>
<Title size={"l"}>
{title}
</Title>
{children}
</Box>
)
}
TitleBox.propTypes = {
children: PropTypes.node,
title: PropTypes.node
}

View file

@ -0,0 +1,22 @@
import React from "react";
import {Split, Title} from "bluelib/lib/components";
import PropTypes from "prop-types";
export default function TitleSplit({children, title}) {
return (
<section>
<Title size={"xl"}>
{title}
</Title>
<Split>
{children}
</Split>
</section>
)
}
TitleSplit.propTypes = {
children: PropTypes.node,
title: PropTypes.node
}

View file

@ -1,17 +1,23 @@
import React from "react";
import {Paragraph, Box, Title, Color} from "bluelib/lib/components";
import {Paragraph, Box, Title, Color, BaseLink} from "bluelib/lib/components";
import Page from "../components/Page";
import TitleBox from "../components/TitleBox";
import TitleSplit from "../components/TitleSplit";
export default function Error404() {
return (
<Page>
<Box>
<Title size={"l"}><Color value={"red"}>Non trovato</Color></Title>
<Paragraph>
Mi spiace, ma la pagina che hai richiesto non sembra esistere :(
</Paragraph>
</Box>
<TitleSplit title={<Color value={"red"}>Non trovato</Color>}>
<TitleBox title={<Color value={"red"}>404</Color>}>
<Paragraph>
Mi spiace, ma la pagina che hai richiesto non sembra esistere :(
</Paragraph>
<Paragraph>
<BaseLink href={"/"}> Torna alla home</BaseLink>
</Paragraph>
</TitleBox>
</TitleSplit>
</Page>
)
}

View file

@ -0,0 +1,15 @@
import React from "react";
import {Help} from "bluelib/lib/components";
import PropTypes from "prop-types";
export default function API() {
return (
<Help text={"[Web] Application Programming Interface, fonti di dati fruibili attraverso HTTP"}>API</Help>
)
}
API.propTypes = {
children: PropTypes.node,
title: PropTypes.node
}

View file

@ -0,0 +1,15 @@
import React from "react";
import {Help} from "bluelib/lib/components";
import PropTypes from "prop-types";
export default function IR() {
return (
<Help text={"Information Retrieval"}>IR</Help>
)
}
IR.propTypes = {
children: PropTypes.node,
title: PropTypes.node
}

View file

@ -0,0 +1,14 @@
import React from "react";
import PropTypes from "prop-types";
import style from "./Token.module.css";
export default function Token({children}) {
return (
<span className={style.token}>{children}</span>
)
}
Token.propTypes = {
children: PropTypes.node
}

View file

@ -0,0 +1,5 @@
.token {
border: 1px currentColor solid;
border-radius: 2px;
padding: 2px;
}

View file

@ -0,0 +1,209 @@
import React from "react";
import {Split, Aside, Anchor, Code, Help, Blockquote, Size, Color, BaseLink as A, Paragraph as P, Bold as B, Italic as I, ListItem as LI} from "bluelib/lib/components";
import Page from "../../components/Page";
import TitleSplit from "../../components/TitleSplit";
import TitleBox from "../../components/TitleBox";
import IR from "./abbr/IR";
import API from "./abbr/API";
import Token from "./components/Token";
export default function Gestinfo() {
return (
<Page subtitle={"Gestione dell'informazione"}>
<Split>
<TitleBox title={"Di cosa si tratta?"}>
<P>
Si parla di <B>come processare enormi quantità di testo</B> al fine di <B>effettuarvi ricerche</B>.
</P>
<Aside>
Praticamente, si parla di come funzionano i motori di ricerca!
</Aside>
</TitleBox>
<TitleBox title={"Il corso all'Unimore"}>
<P>
🎓 Il corso è tenuto dalla <Anchor href={"mailto:federica.mandreoli@unimore.it"}>Prof.ssa Federica Mandreoli</Anchor>.
</P>
<P>
📘 Le dispense sono disponibili su <Anchor href={"https://dolly.fim.unimore.it/2020/course/view.php?id=69"}>Dolly 2020</Anchor>.
</P>
<P>
🎥 Alcune videolezioni sono state eliminate, le restanti <Anchor href={"https://github.com/Steffo99/unimoreinfo-wiki/wiki/Scaricare-videolezioni#gestione-dellinformazione"}>possono essere scaricate</Anchor>.
</P>
</TitleBox>
</Split>
<TitleSplit title={"L'Information Retrieval"}>
<TitleBox title={"Cos'è?"}>
<P>
È il <B>processo</B> di <B>raccolta documenti</B>, <B>elaborazione query</B> e <B>richiamo di più risposte</B>.
</P>
<P>
Un'applicazione che effettua <IR/> si chiama <B>motore di ricerca</B>.
</P>
</TitleBox>
</TitleSplit>
<Split>
<TitleBox title={"Documenti"}>
<P>
Sono le unità con cui lavora il motore di ricerca.
</P>
<P>
Possono essere di vario tipo: <B>pagine web</B>, <B>metadati di file</B>, <B>paper accademici</B>...
</P>
<Aside>
Ad esempio, i documenti di <Anchor href={"https://google.com"}>Google Search</Anchor> sono le <B>pagine web</B>.
</Aside>
<P>
Vengono raccolti in svariati modi: possono provenire da <B><API/></B>, essere forniti manualmente e poi processati con un <B>parser</B>, essere scoperti tramite <B>web crawling</B> e processati tramite <B>web scraping</B>...
</P>
<Aside>
Il web crawler più famoso è <Anchor href={"https://it.wikipedia.org/wiki/Googlebot"}>Googlebot</Anchor>, che visita ricorsivamente tutti i collegamenti presenti su ogni pagina.
</Aside>
</TitleBox>
<TitleBox title={"Query"}>
<P>
La <B>richiesta di informazioni</B> effettuata da un utente, in un <B>linguaggio</B> che il motore di ricerca è <B>in grado di capire</B>.
</P>
<Aside>
In pratica, è quello che scrivi sulla casella di ricerca di Google!
</Aside>
<P>
Solitamente vi è possibile inserire <B>parole chiave</B> e <B>operatori</B> per specificare cosa si desidera trovare.
</P>
<Aside>
È possibile vedere tutti gli operatori supportati da Google nella pagina <Anchor href={"https://www.google.it/advanced_search"}>Advanced Search</Anchor>.
</Aside>
</TitleBox>
<TitleBox title={"Risposte"}>
<P>
I <B>documenti</B> che il motore di ricerca sceglie di mostrare all'utente in quanto li ha ritenuti <B>rilevanti alla query effettuata</B>.
</P>
<P>
Spesso sono composte da <B>metadati del documento</B> e da un <B>breve estratto</B> della sezione del documento più rilevante.
</P>
<Aside>
Google Search mostra <B>URL</B>, <B>titolo</B> e <B>descrizione</B> della pagina (o un suo <B>estratto</B> se una descrizione non è disponibile).
</Aside>
</TitleBox>
</Split>
<TitleSplit title={"Preparazione dei documenti"}>
<TitleBox title={"Cos'è?"}>
<P>
Una <B>procedura</B> che permette ai documenti di essere <B>indicizzati</B> e in seguito <B>richiamati</B> dal motore di ricerca.
</P>
<P>
È suddivisa in varie fasi, generalmente 5 o 6.
</P>
</TitleBox>
</TitleSplit>
<Split>
<TitleBox title={"1. Analisi lessicale"}>
<P>
Tutte le parole del documento vengono trasformate in <B>token</B>.
</P>
<P>
Il motore di ricerca decide se considerare come parte dei token i <B>simboli</B> tipografici, la <B><Help text={"Quello che in inglese si chiama 'case'. Sono grafie il maiuscolo, il minuscolo, il corsivo..."}>grafia</Help></B> delle lettere, le <B>cifre</B>...
</P>
<P>
Spesso si decide di <B>distinguere</B> tra gli <B><Help text={"Parole che si leggono e scrivono uguale ma significano cose diverse."}>ononimi</Help></B> attraverso algoritmi di <B><I>word sense disambiguation</I></B>, in grado di dedurre il contesto analizzando i significati delle parole circostanti.
</P>
<Aside>
<Token>sale 🧂</Token> oppure <Token>sale 🪜</Token> ?
</Aside>
</TitleBox>
<TitleBox title={"2. Eliminazione delle stopwords"}>
<P>
Le <I>stopwords</I>, i token ritenuti <B>inutili</B> ai fini delle ricerche, vengono <B>eliminate</B> dall'insieme di token ottenuto nel passo precedente.
</P>
<P>
Stopwords comuni sono gli <B><Help text={"Il, lo, la, un, una..."}>articoli</Help></B>, le <B><Help text={"E, perchè, ma, così..."}>congiunzioni</Help></B> e tutte le <B>parole più frequenti</B> di una lingua.
</P>
<P>
Talvolta capita di dover <B>distinguere</B> tra stopwords e <B>nomi propri</B>, soprattutto nell'inglese; per risolvere il problema ci si affida alla disambiguazione degli ononimi effettuata durante l'analisi lessicale.
</P>
<Aside>
La band <Anchor href={"https://en.wikipedia.org/wiki/The_Who"}>The Who</Anchor> è l'incubo dei motori di ricerca che eliminano indiscriminatamente le stopwords.
</Aside>
</TitleBox>
<TitleBox title={"3. Stemming / Lemmatizzazione"}>
<P>
Ai token del passo precedente vengono sostituite le <B>radici</B> (<I>stems</I>) oppure le <B>forme base</B> (<I>lemmas</I>) delle parole.
</P>
<Aside>
<P>
Alcune delle operazioni che vengono effettuate sono:
</P>
<ul>
<LI>
Plurale Singolare
<Aside>
<Token>fiori</Token> <Token>fiore</Token>
</Aside>
<Aside>
<Token>flowers</Token> <Token>flower</Token>
</Aside>
</LI>
<LI>
Verbo Infinito
<Aside>
<Token>vado</Token> <Token>andare</Token>
</Aside>
<Aside>
<Token>goes</Token> <Token>go</Token>
</Aside>
</LI>
</ul>
</Aside>
<P>
Gli algoritmi che realizzano questo passo sono detti rispettivamente <B><I>stemmer</I></B> o <B><I>lemmatizer</I></B>.
</P>
<Aside>
Generalmente sono implementati tramite <Help text={"Dizionari che associano ogni parola alla sua forma base."}>lookup tables</Help>, ma i motori di ricerca più avanzati <Anchor href={"https://en.wikipedia.org/wiki/Stemming#Algorithms"}>possono avere implementazioni anche più complesse</Anchor>.
</Aside>
</TitleBox>
</Split>
<Split>
<TitleBox title={"4. Normalizzazione dei token"}>
<P>
I <B>simboli</B> rimasti nei token vengono processati, sostituendoli con caratteri diversi oppure sdoppiando i token in diverse forme.
</P>
<Aside>
<P>
Alcune delle operazioni che possono essere effettuate sono:
</P>
<ul>
<LI>
Rimozione degli accenti
<Aside>
<Token>caffè</Token> <Token>caffe</Token>
</Aside>
</LI>
<LI>
Separazione dei trattini
<Aside>
<Token>state-of-the-art</Token> <Token>state</Token> <Token>of</Token> <Token>the</Token> <Token>art</Token>
</Aside>
</LI>
<LI>
Rimozione della punteggiatura
<Aside>
<Token>2020 d.c.</Token> <Token>2020dc</Token>
</Aside>
</LI>
</ul>
</Aside>
</TitleBox>
<TitleBox title={"5. Selezione degli index term"}>
<P>
</P>
</TitleBox>
<TitleBox title={"6. Categorizzazione"}>
<P>
</P>
</TitleBox>
</Split>
</Page>
)
}

View file

@ -1,14 +1,50 @@
import React from "react";
import {Box} from "bluelib/lib/components";
import {Split, Size, Color, Anchor, BaseLink as A, Paragraph as P, Bold as B, Italic as I, ListItem as LI} from "bluelib/lib/components";
import Page from "../components/Page";
import TitleSplit from "../components/TitleSplit";
import TitleBox from "../components/TitleBox";
export default function Home() {
return (
<Page>
<Box>
Benvenuto a Unisteffo!
</Box>
<Page subtitle={<span>Appunti open source di <A href={"https://steffo.eu"}>Steffo</A></span>}>
<Split>
<TitleBox title={"Unisteffo"}>
<P>
Ciao! Benvenuto a <B>Unisteffo</B>, il sito in cui carico tutto il materiale che uso per studiare!
</P>
<P>
Se trovi un errore negli appunti, o un bug del sito, per favore <Anchor href={"https://github.com/Steffo99/appuntiweb/issues/new"}>segnalamelo su GitHub</Anchor>!
</P>
<P>
<Color value={"yellow"}>🚧 Molte pagine non sono disponibili in quanto il sito è in fase di rinnovo.</Color>
</P>
</TitleBox>
</Split>
<TitleSplit title={"Università"}>
<TitleBox title={"Primo anno"}>
<ul>
<LI><Size value={"l"}><A href={"/analisi"} disabled={true}>Analisi matematica</A></Size></LI>
<LI><Size value={"l"}><A href={"/algebra"} disabled={true}>Algebra lineare</A></Size></LI>
<LI><Size value={"l"}><A href={"/algoritmi"} disabled={true}>Algoritmi e strutture dati</A></Size></LI>
</ul>
</TitleBox>
<TitleBox title={"Secondo anno"}>
<ul>
<LI><Size value={"l"}><A href={"/fisica"} disabled={true}>Fisica</A></Size></LI>
<LI><Size value={"l"}><A href={"/statistica"} disabled={true}>Statistica ed elementi di probabilità</A></Size></LI>
<LI><Size value={"l"}><A href={"/apprendimento"} disabled={true}>Apprendimento ed evoluzione in sistemi artificiali</A></Size></LI>
<LI><Size value={"l"}><A href={"/basididati"} disabled={true}>Basi di dati</A></Size></LI>
<LI><Size value={"l"}><A href={"/calcolo"} disabled={true}>Calcolo numerico</A></Size></LI>
<LI><Size value={"l"}><A href={"/oli"} disabled={true}>Ottimizzazione lineare intera</A></Size></LI>
</ul>
</TitleBox>
<TitleBox title={"Terzo anno"}>
<ul>
<LI><Size value={"l"}><A href={"/gestinfo"}>Gestione dell'informazione</A></Size></LI>
</ul>
</TitleBox>
</TitleSplit>
</Page>
)
}