2009-03-05 9 views
5

Dato le parole e le loro frequenze e un'area di proprietà dello schermo, quali sono gli approcci validi per installare una nuvola di tag nello spazio? Le due variabili posso pensare per manipolare sono:Adattamento del tag cloud allo spazio disponibile

  • dimensioni dei caratteri (sia assoluti e il gradiente)
  • Numero di parole

approccio Tutto posso pensare richiede iterazione, come l'impostazione di un limite superiore sul numero di parole, quindi utilizzando la ricerca binaria sulle dimensioni dei caratteri fino a quando le parole si adattano solo all'area. Preferirei avere una soluzione analitica.

Una complicazione della mia situazione è che le nuvole sono ridimensionabili, quindi l'algoritmo deve essere in grado di gestire 100x100 pixel o 1000x1000 pixel ragionevolmente bene.

Modifica: avrei dovuto dirlo per un'applicazione rich client, non per il web (da qui la possibilità di ridimensionare). Inoltre, speravo di sentire un'esperienza come "nessuno guarda mai più di 100 parole nel tag cloud, quindi non preoccuparti di mostrarle".

risposta

0

Questo suona come , ma invertito e con più variabili. Non c'è una soluzione completa banale, ma è probabile che sarete in grado di trovare un algoritmo euristico che si avvicina alla soluzione ottimale nella maggior parte dei casi.

PS: è possibile eseguire questo lavoro in modo affidabile solo con dimensioni dei caratteri misurate in pixel. Le dimensioni dei caratteri misurate in pixel sono una brutta cosa (TM) in un buon web design.

0

È possibile creare un set predeterminato di intervalli di incidenza, che potrebbero quindi riguardare una dimensione di carattere nel cloud. Per esempio:

  • 0 - 100: 1 em
  • 101-500: 1.2 em
  • 501-1000: 1.4 em grassetto
  • 1001-1500: 1,8 em grassetto
  • 1501-2000 : 2.0 em grassetto corsivo/sottolineato/lampeggiante/qualsiasi cosa ecc ...

È possibile scalare la nuvola aggiungendo un offset fisso a tutti gli intervalli in base alle dimensioni del contenitore.

+0

C'è un modo per ottenere la dimensione di un contenitore misurata in ems? – Sparr

2

Quello che facciamo in Software Cartografo è

  • avere una dimensione massima di carattere,
  • mappa Math.sqrt(term.frequency) a questa gamma (dal momento che le parole sono le aree 2D),
  • mostrano solo la parte superiore 30 (o giù di lì),
  • esclude qualsiasi tipo di stampa fine, ad esempio la dimensione del carattere inferiore a 6 pt,
  • ordina i termini nel cloud in ordine alfabetico.

Alternative

  • Invece di mostrare i primi 30, scegliere la parte superiore k in modo tale che non ci sono barre di scorrimento.
  • Invece di mappare la parola più frequente alla dimensione massima del carattere, utilizzare una mappatura globale in modo che le dimensioni della parola siano confrontabili tra le nuvole (ciò dipende dal proprio caso d'uso).

A mia conoscenza, non sono disponibili studi empirici sul termine nuvole (forse Jonathan Feinberg, di fama mondiale, ne sa di più a tale riguardo).