From 400a067a3a5a9d80fb635b9c06bcef388a54d00d Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Wed, 27 Jan 2021 18:44:49 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Complete=20A3-FullTextIndexing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/TitleSplit.js | 5 +- src/components/TitleSplit.module.css | 3 + src/routes/Gestinfo/abbr/API.js | 7 +- src/routes/Gestinfo/abbr/IC.js | 12 +++ src/routes/Gestinfo/abbr/IR.js | 7 +- src/routes/Gestinfo/abbr/Ononimi.js | 12 +++ src/routes/Gestinfo/index.js | 154 ++++++++++++++++++++++++++- 7 files changed, 186 insertions(+), 14 deletions(-) create mode 100644 src/components/TitleSplit.module.css create mode 100644 src/routes/Gestinfo/abbr/IC.js create mode 100644 src/routes/Gestinfo/abbr/Ononimi.js diff --git a/src/components/TitleSplit.js b/src/components/TitleSplit.js index 2bc300e..88e4c8d 100644 --- a/src/components/TitleSplit.js +++ b/src/components/TitleSplit.js @@ -1,18 +1,19 @@ import React from "react"; import {Split, Title} from "bluelib/lib/components"; import PropTypes from "prop-types"; +import style from "./TitleSplit.module.css"; export default function TitleSplit({children, title}) { return ( -
+
{title} {children} -
+ ) } diff --git a/src/components/TitleSplit.module.css b/src/components/TitleSplit.module.css new file mode 100644 index 0000000..6862549 --- /dev/null +++ b/src/components/TitleSplit.module.css @@ -0,0 +1,3 @@ +.titlesplit { + margin-top: 20px; +} diff --git a/src/routes/Gestinfo/abbr/API.js b/src/routes/Gestinfo/abbr/API.js index d59fd80..6743779 100644 --- a/src/routes/Gestinfo/abbr/API.js +++ b/src/routes/Gestinfo/abbr/API.js @@ -5,11 +5,8 @@ import PropTypes from "prop-types"; export default function API() { return ( - API + API ) } -API.propTypes = { - children: PropTypes.node, - title: PropTypes.node -} +API.propTypes = {} diff --git a/src/routes/Gestinfo/abbr/IC.js b/src/routes/Gestinfo/abbr/IC.js new file mode 100644 index 0000000..95bd6f6 --- /dev/null +++ b/src/routes/Gestinfo/abbr/IC.js @@ -0,0 +1,12 @@ +import React from "react"; +import {Help} from "bluelib/lib/components"; +import PropTypes from "prop-types"; + + +export default function IC() { + return ( + IC + ) +} + +IC.propTypes = {} diff --git a/src/routes/Gestinfo/abbr/IR.js b/src/routes/Gestinfo/abbr/IR.js index 6c30c70..ae2dabe 100644 --- a/src/routes/Gestinfo/abbr/IR.js +++ b/src/routes/Gestinfo/abbr/IR.js @@ -5,11 +5,8 @@ import PropTypes from "prop-types"; export default function IR() { return ( - IR + IR ) } -IR.propTypes = { - children: PropTypes.node, - title: PropTypes.node -} +IR.propTypes = {} diff --git a/src/routes/Gestinfo/abbr/Ononimi.js b/src/routes/Gestinfo/abbr/Ononimi.js new file mode 100644 index 0000000..ac998cb --- /dev/null +++ b/src/routes/Gestinfo/abbr/Ononimi.js @@ -0,0 +1,12 @@ +import React from "react"; +import {Help} from "bluelib/lib/components"; +import PropTypes from "prop-types"; + + +export default function Ononimi() { + return ( + ononimi + ) +}; + +Ononimi.propTypes = {} diff --git a/src/routes/Gestinfo/index.js b/src/routes/Gestinfo/index.js index fdf5bee..214512e 100644 --- a/src/routes/Gestinfo/index.js +++ b/src/routes/Gestinfo/index.js @@ -1,11 +1,13 @@ 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 {Split, Aside, Anchor, LatexMath, Help, Blockquote, Color, Underline as U, 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"; +import IC from "./abbr/IC"; +import Ononimi from "./abbr/Ononimi"; export default function Gestinfo() { @@ -105,7 +107,7 @@ export default function Gestinfo() { Basi di Dati → Basi di Dati

- Spesso si decide di distinguere tra gli ononimi attraverso algoritmi di word sense disambiguation, in grado di dedurre il contesto analizzando i significati delle parole circostanti. + Spesso si decide di distinguere tra gli attraverso algoritmi di word sense disambiguation, in grado di dedurre il contesto analizzando i significati delle parole circostanti.

+ + +

+ Una misura di quanto due token hanno significati in comune. +

+ +

+ Generalmente si basa su un thesaurus. +

+
+ +

+ La word sense disambiguation sfrutta la similarità tra l'ononimo e i token circostanti per stabilire il significato corretto. +

+

+ Talvolta alla similarità sono aggiunte anche altre informazioni, come la distanza tra i token e dati provenienti da sorgenti esterne. +

+
+
+ + +

+ Un modo di misurare la similarità tra due token basato sulla loro posizione all'interno del thesaurus. +

+ + +

+ Si basa sull'inverso della distanza tra i due token all'interno dell'albero: +

+ {`sim_{pd}(t_1, t_2) = \\frac{1}{dist(t_1, t_2) + 1}`} +
+ +

+ Si basa sulla profondità del minimo antenato comune tra i due token: +

+ {`sim_{wp}(t_1, t_2) = 2 \\cdot \\frac{depth(mac_{\\ t_1,t_2})}{depth(t_1) + depth(t_2)}`} +
+
+
+ Similarità -based}> +

+ L' è una misura probabilistica di quanto un token sia inaspettato all'interno di un documento. +

+

+ Definendo {`P(t)`} come la probabilità che un token scelto a caso sia {`t`}, l' sarà: +

+ {`ic(t) = - \\log \\left( P(t) \\right)`} +

+ La similarità -based è quindi un modo di misurare la similarità basato sull'. +

+ +

+ Si basa sull' del minimo antenato comune: +

+ {`sim_{r} = ic \\left( mac_{\\ t_1,t_2} \\right)`} +
+
+
+ + +

+ Gli indici sono strutture dati in cui vengono inseriti i documenti e i loro token dopo essere stati preparati. +

+

+ L'indicizzazione è la procedura che crea e mantiene aggiornati uno o più indici. +

+
+ +

+ Sono fondamentali per velocizzare notevolmente le ricerche e per permettere certi tipi di operazioni sulle query. +

+
+
+ +

+ Un indice basato sulla costruzione di una matrice in cui le righe sono i documenti, le colonne i token e le celle valori booleani che descrivono se il token compare nel documento. +

+

+ È terribilmente inefficiente in termini di spazio, perchè la matrice è sparsa. +

+

+ Una sua evoluzione spazialmente più efficiente è l'inverted index. +

+
+ +

+ L'indice più comune, costituito da tante posting list raggiungibili attraverso un vocabolario. +

+ + +

+ L'insieme di tutte le occorrenze di un dato token. +

+

+ Può essere realizzata in due modi: +

+
    +
  • Document-based: lista ordinata di documenti con la frequenza del token in essi
  • +
  • Word-based: lista ordinata di documenti che punta a una lista ordinata delle posizioni del token in essi
  • +
+

+ Essendo le liste ordinate, vi è possibile effettuare operazioni di unione e intersezione in tempo lineare utilizzando dei cursori. +

+

+ Per velocizzare ulteriormente l'intersezione è possibile introdurre nelle liste degli skip pointers +

+

+ Non è però altrettanto efficiente in operazioni di negazione. +

+
+ +

+ L'insieme delle associazioni tra token e la loro posting list. +

+

+ Ci sono tanti modi diversi di implementarlo: +

+
    +
  • Doppia lista ordinata: lista di token che punta a una lista di occorrenze
  • +
  • + Trie: albero in cui ogni arco rappresenta una stringa e ogni nodo una concatenazione delle stringhe tra sè e la radice +
      +
    • Prefix tree: trie che usa i prefissi dei token
    • +
    • Suffix tree: trie che usa i suffissi dei token
    • +
    + +
  • +
  • B+ tree: albero particolarmente ottimizzato, in cui le foglie sono le occorrenze
  • +
  • Dizionario: hashmap che usa come chiave il token stesso, e una lista di occorrenze come valore
  • +
+

+ Generalmente, occupano spazio logaritmico rispetto al numero di token. +

+
+
+
+ TODO: Ricordati di scrivere nella sezione delle query gli algoritmi di retrieval! ) }