/** * Related Posts Loader for Astra theme. * * @package Astra * @author Brainstorm Force * @copyright Copyright (c) 2021, Brainstorm Force * @link https://www.brainstormforce.com * @since Astra 3.5.0 */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Customizer Initialization * * @since 3.5.0 */ class Astra_Related_Posts_Loader { /** * Constructor * * @since 3.5.0 */ public function __construct() { add_filter( 'astra_theme_defaults', array( $this, 'theme_defaults' ) ); add_action( 'customize_register', array( $this, 'related_posts_customize_register' ), 2 ); // Load Google fonts. add_action( 'astra_get_fonts', array( $this, 'add_fonts' ), 1 ); } /** * Enqueue google fonts. * * @return void */ public function add_fonts() { if ( astra_target_rules_for_related_posts() ) { // Related Posts Section title. $section_title_font_family = astra_get_option( 'related-posts-section-title-font-family' ); $section_title_font_weight = astra_get_option( 'related-posts-section-title-font-weight' ); Astra_Fonts::add_font( $section_title_font_family, $section_title_font_weight ); // Related Posts - Posts title. $post_title_font_family = astra_get_option( 'related-posts-title-font-family' ); $post_title_font_weight = astra_get_option( 'related-posts-title-font-weight' ); Astra_Fonts::add_font( $post_title_font_family, $post_title_font_weight ); // Related Posts - Meta Font. $meta_font_family = astra_get_option( 'related-posts-meta-font-family' ); $meta_font_weight = astra_get_option( 'related-posts-meta-font-weight' ); Astra_Fonts::add_font( $meta_font_family, $meta_font_weight ); // Related Posts - Content Font. $content_font_family = astra_get_option( 'related-posts-content-font-family' ); $content_font_weight = astra_get_option( 'related-posts-content-font-weight' ); Astra_Fonts::add_font( $content_font_family, $content_font_weight ); } } /** * Set Options Default Values * * @param array $defaults Astra options default value array. * @return array */ public function theme_defaults( $defaults ) { // Related Posts. $defaults['enable-related-posts'] = false; $defaults['related-posts-title'] = __( 'Related Posts', 'astra' ); $defaults['releted-posts-title-alignment'] = 'left'; $defaults['related-posts-total-count'] = 2; $defaults['enable-related-posts-excerpt'] = false; $defaults['related-posts-excerpt-count'] = 25; $defaults['related-posts-based-on'] = 'categories'; $defaults['related-posts-order-by'] = 'date'; $defaults['related-posts-order'] = 'asc'; $defaults['related-posts-grid-responsive'] = array( 'desktop' => '2-equal', 'tablet' => '2-equal', 'mobile' => 'full', ); $defaults['related-posts-structure'] = array( 'featured-image', 'title-meta', ); $defaults['related-posts-meta-structure'] = array( 'comments', 'category', 'author', ); // Related Posts - Color styles. $defaults['related-posts-text-color'] = ''; $defaults['related-posts-link-color'] = ''; $defaults['related-posts-title-color'] = ''; $defaults['related-posts-background-color'] = ''; $defaults['related-posts-meta-color'] = ''; $defaults['related-posts-link-hover-color'] = ''; $defaults['related-posts-meta-link-hover-color'] = ''; // Related Posts - Title typo. $defaults['related-posts-section-title-font-family'] = 'inherit'; $defaults['related-posts-section-title-font-weight'] = 'inherit'; $defaults['related-posts-section-title-text-transform'] = ''; $defaults['related-posts-section-title-line-height'] = ''; $defaults['related-posts-section-title-font-size'] = array( 'desktop' => '30', 'tablet' => '', 'mobile' => '', 'desktop-unit' => 'px', 'tablet-unit' => 'px', 'mobile-unit' => 'px', ); // Related Posts - Title typo. $defaults['related-posts-title-font-family'] = 'inherit'; $defaults['related-posts-title-font-weight'] = 'inherit'; $defaults['related-posts-title-text-transform'] = ''; $defaults['related-posts-title-line-height'] = '1'; $defaults['related-posts-title-font-size'] = array( 'desktop' => '20', 'tablet' => '', 'mobile' => '', 'desktop-unit' => 'px', 'tablet-unit' => 'px', 'mobile-unit' => 'px', ); // Related Posts - Meta typo. $defaults['related-posts-meta-font-family'] = 'inherit'; $defaults['related-posts-meta-font-weight'] = 'inherit'; $defaults['related-posts-meta-text-transform'] = ''; $defaults['related-posts-meta-line-height'] = ''; $defaults['related-posts-meta-font-size'] = array( 'desktop' => '14', 'tablet' => '', 'mobile' => '', 'desktop-unit' => 'px', 'tablet-unit' => 'px', 'mobile-unit' => 'px', ); // Related Posts - Content typo. $defaults['related-posts-content-font-family'] = 'inherit'; $defaults['related-posts-content-font-weight'] = 'inherit'; $defaults['related-posts-content-text-transform'] = ''; $defaults['related-posts-content-line-height'] = ''; $defaults['related-posts-content-font-size'] = array( 'desktop' => '', 'tablet' => '', 'mobile' => '', 'desktop-unit' => 'px', 'tablet-unit' => 'px', 'mobile-unit' => 'px', ); return $defaults; } /** * Add postMessage support for site title and description for the Theme Customizer. * * @param WP_Customize_Manager $wp_customize Theme Customizer object. * * @since 3.5.0 */ public function related_posts_customize_register( $wp_customize ) { /** * Register Config control in Related Posts. */ // @codingStandardsIgnoreStart WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once ASTRA_RELATED_POSTS_DIR . 'customizer/class-astra-related-posts-configs.php'; // @codingStandardsIgnoreEnd WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound } /** * Render the Related Posts title for the selective refresh partial. * * @since 3.5.0 */ public function render_related_posts_title() { return astra_get_option( 'related-posts-title' ); } } /** * Kicking this off by creating NEW instace. */ new Astra_Related_Posts_Loader(); Implementazione della Deduplicazione Semantica Avanzata per Metadati Tier 2 in Testi Multilingue Iteriani: Un Processo Esperto di Estrazione di Entità Nascoste – Quality Formación

Implementazione della Deduplicazione Semantica Avanzata per Metadati Tier 2 in Testi Multilingue Iteriani: Un Processo Esperto di Estrazione di Entità Nascoste

Nel panorama della gestione avanzata del patrimonio culturale digitale, la deduplicazione semantica rappresenta un passo cruciale per garantire l’integrità e l’utilità dei metadati, specialmente nei contenuti Tier 2 arricchiti da testi multilingue e dialettali. A differenza della deduplicazione sintattica, che si basa su corrispondenze testuali superficiali, la deduplicazione semantica mira a identificare duplicati fondati sul significato profondo, attraverso l’estrazione automatica di entità nascoste in contesti iteriani complessi — dove italiano, latino e dialetti regionali coesistono con specificità lessicali e culturali. Questo approfondimento esplora, con dettaglio tecnico e linee guida operative, il processo passo-passo per implementare un sistema di deduplicazione semantica efficace, partendo dalle fondamenta teoriche fino alle best practice di validazione, gestione degli errori e ottimizzazione continua.

1. Fondamenti: Differenze tra Deduplicazione Sintattica e Semantica in Contesti Multilingue Iteriani

Nel contesto dei contenuti Tier 2 — archivi storici, biblioteche digitali e collezioni patrimoniali multilingue — la deduplicazione sintattica, basata su matching di stringhe o frequenze lessicali, risulta insufficiente per rilevare duplicati di contenuti con significati equivalenti espressi in modi diversi. La deduplicazione semantica, invece, utilizza modelli NLP multilingue come XLM-R e mBERT per catturare il significato contestuale, riconoscendo entità nascoste anche quando espresse tramite sinonimi, ellissi o riferimenti impliciti. Per esempio, “Civico di Milano” e “Amministrazione comunale milanese” potrebbero riferirsi allo stesso ente, ma la sola analisi lessicale non li identifica. Qui entra in gioco la semantica computazionale, che permette di mappare concetti attraverso embedding contestuali e ontologie linguistiche specifiche delle regioni italiane.

Un aspetto critico è la gestione della variabilità dialettale: un termine comune in Lombardia potrebbe differire in significato o uso in Sicilia, creando falsi negativi. Per superare questa sfida, è essenziale integrare glossari terminologici regionali e modelli di lemmatizzazione avanzata che normalizzino varianti lessicali senza perdere la specificità culturale. Questo approccio garantisce che duplicati semantici — non sintattici — vengano rilevati con alta precisione, preservando la ricchezza multilingue del patrimonio digitale.

2. Metodologie Tecniche: Estrazione Automatica di Entità Nascoste con XLM-R e Tecniche di Embedding

Fase 1: Pre-elaborazione multilingue con tokenizzazione e lemmatizzazione contestuale

Esempio pratico:

Tokenizzazione e normalizzazione del testo lombardo con spaCy multilingue + Lemmatizzazione via FastText per dialetti
Tokenizzazione:
[«Civico», «di», «Milano», «gestisce», «servizi urbani»] → [civico, milano, gestione, servizi, urbano]

Passo 2: Embedding semantico avanzato tramite XLM-R
Il modello XLM-R consente di generare vettori semantici cross-lingue, fondamentali per rilevare equivalenze concettuali. Per ogni frase, si calcola un embedding medio e si applica una funzione di clustering gerarchico basato sul silhouette score per identificare gruppi di contenuti semanticamente simili.

embedding: [XLM-R(768D)]
distance_matrix = pairwise_distance(embeddings)
clusters = hierarchical_cluster_analysis(distance_matrix, threshold=0.85)

Questa pipeline permette di individuare, ad esempio, contenuti in latino e italiano che descrivono lo stesso evento storico con terminologie diverse, grazie alla capacità di XLM-R di catturare relazioni semantiche oltre la superficie linguistica.

3. Integrazione nella Pipeline di Metadati Tier 2: Gestione di Entità Nascoste e Validazione

La progettazione dello schema dei metadati deve includere campi dedicati a entità_nasconde, mappati a ontologie iteriane (es. SKOS, RDF triples) per garantire interoperabilità e tracciabilità.

Pipeline di normalizzazione semantica:
1. Embedding semantico → 2. Clustering → 3. Cross-check con glossari storici (patrimonio culturale italiano) → 4. Sovrascrittura automatica dei metadati con identificatori univoci e profili normalizzati

Esempio di validazione:

Entità estratta: “Civico di Milano” → Cross-check con Glossario Storico Lombardo 1350-1550
→ Conferma coerenza temporale e geografica → Aggiornamento metadato con riferimento SKOS: ``

Questa integrazione assicura che ogni entità nascosta, anche se espressa in dialetto o latino, venga riconosciuta, normalizzata e tracciata, migliorando la qualità semantica complessiva del contenuto Tier 2.

4. Errori Comuni e Strategie di Prevenzione in Ambienti Multilingue

Attenzione: sovrapposizione semantica tra termini regionali
> Un errore frequente è interpretare “civico” in Lombardia come un termine generico, mentre in Sicilia indica un’istituzione specifica. Questo genera falsi positivi nella deduplicazione.
>
> **Soluzione:** implementare un sistema di disambiguazione contestuale basato su ontologie culturali, dove la geolocalizzazione e il contesto temporale riducono ambiguità. Ad esempio, un contenuto con “civico” e data “XIV secolo” non può riferirsi a un comune moderno, ma a un’amministrazione storica.
>
> Checklist di prevenzione:
> – Normalizzare termini dialettali con glossari regionali
> – Validare entità tramite fonti storiche autorevoli
> – Monitorare metriche di precisione, recall e F1 su dataset multilingue
> – Adottare feedback umano-in-loop per correggere falsi positivi/negativi

Avvertenza: incoerenze nei formati di normalizzazione
> Latino e italiano standard vs. dialetti digitali (es. “civico” vs “civico” scritto con accenti o varianti ortografiche) possono fraintendere il matching.
>
> **Ottimizzazione:** utilizzare lemmatizzazione multilingue con modelli addestrati su corpora storici, e mappature fonetiche per varianti ortografiche.

5. Ottimizzazione e Best Practice per Implementazione Continua

Per garantire la sostenibilità del sistema di deduplicazione semantica Tier 2, è fondamentale:
– Sviluppare librerie modulari riutilizzabili (es. pipeline XLM-R + clustering) per ambienti Tier 2/3
– Aderire a standard aperti come Linked Open Data (JSON-LD) per interoperabilità con CMS e sistemi DAM
– Integrare sistemi automatizzati di feedback semantico: utenti segnalano falsi positivi con annotazioni contestuali, che alimentano il training dei modelli NLP
– Implementare dashboard analitiche per monitorare metriche chiave (precision, recall, F1) e pattern di errore ricorrenti

Esempio di active learning per raffinare modelli:
Fase 1: Identificare casi borderline con bassa confidenza (es. entità con 3 cluster sovrapposti) → Fase 2: Presentare questi casi a esperti linguistici per etichettatura → Fase 3: Aggiornare dataset di training con esempi corretti → Fase 4: Riaddestrare modello con incrementi mirati

Queste pratiche assicurano un processo iterativo, adattivo e culturalmente consapevole, fondamentale per preservare la ricchezza semantica del patrimonio digitale italiano.

6. Caso Studio: Deduplicazione Semantica in Archivi Digitali Storici Multilingue

Contesto: raccolta digitale di documenti medievali in latino, italiano e dialetti lombardi conservati in archivi storici regionali. Obiettivo: identificare duplicati di atti amministrativi con entità nascoste relative a “Consiglio Civico di Milano” e “Gestione Servizi Urbani”.
Fase 1: Pre-elaborazione con tokenizzazione e lemmatizzazione multilingue;
Fase 2: Generazione embedding XLM-R e clustering gerarchico con silhouette score (valore medio 0.89 → cluster ben formati);
Fase 3: Cross-check con glossario storico “Archivi del Ducato di Milano” → 12 entità nascoste rilevate, 9 già presenti nei metadati (riduzione duplichi

monopoly casino