Ich habe eine Reihe von Tutorials über die richtige Methode zur Erzeugung einer logarithmischen Verteilung von Gewichten für Tagclouds gelesen. Die meisten von ihnen gruppieren die Tags in Schritte. Das erscheint mir etwas albern, deshalb habe ich meinen eigenen Algorithmus entwickelt, basierend auf dem, was ich gelesen habe, so dass er dynamisch die Anzahl der Tags entlang der logarithmischen Kurve zwischen dem Grenzwert und dem Maximum verteilt. Hier ist das Wesentliche davon in Python:
from math import log
count = [1, 3, 5, 4, 7, 5, 10, 6]
def logdist(count, threshold=0, maxsize=1.75, minsize=.75):
countdist = []
# mincount ist entweder der Grenzwert oder das Minimum, wenn es über dem Grenzwert liegt
mincount = threshold
``
Grundsätzlich würde es ohne die logarithmische Berechnung des individuellen Zählwerts eine Gerade zwischen den Punkten, (mincount, minsize) und (maxcount, maxsize) erzeugen.
Der Algorithmus liefert eine gute Näherung der Kurve zwischen den beiden Punkten, leidet jedoch an einem Nachteil. Der mincount ist ein Sonderfall, und der Logarithmus davon ergibt null. Das bedeutet, dass die Größe des mincount kleiner als minsize wäre. Ich habe versucht, Zahlen zusammenzustellen, um diesen Sonderfall zu lösen, aber kann es nicht richtig hinbekommen. Derzeit behandle ich den mincount nur als Sonderfall und füge "or 1
" zur logcount-Zeile hinzu.
Gibt es einen korrekteren Algorithmus, um eine Kurve zwischen den beiden Punkten zu zeichnen?
Update am 3. März: Wenn ich mich nicht irre, nehme ich den Logarithmus des Zählwerts und setze ihn dann in eine lineare Gleichung ein. Um die Beschreibung des Sonderfalls anders auszudrücken, bei y=lnx bei x=1, y=0. Das passiert beim mincount. Aber der mincount kann nicht null sein, das Tag wurde noch nicht 0 Mal verwendet.
Probieren Sie den Code aus und geben Sie Ihre eigenen Zahlen ein, um es zu testen. Den mincount als Sonderfall zu behandeln, ist für mich in Ordnung, ich habe das Gefühl, dass es einfacher wäre als die eigentliche Lösung für dieses Problem. Ich habe einfach das Gefühl, dass es eine Lösung dafür geben muss und dass vielleicht schon jemand eine Lösung gefunden hat.
UPDATE am 6. April: Eine einfache google-Suche zeigt viele der Tutorials, die ich gelesen habe, aber dies hier ist wahrscheinlich das vollständigste Beispiel für gestufte Tag-Clouds.
UPDATE am 28. April: Als Antwort auf die Lösung von antti.huima: Wenn man es grafisch darstellt, liegt die Kurve, die dein Algorithmus erzeugt, unter der Linie zwischen den beiden Punkten. Ich habe versucht, mit den Zahlen herumzuspielen, komme aber immer noch nicht darauf, wie ich diese Kurve auf die andere Seite der Linie bringen kann. Ich vermute, dass, wenn die Funktion in irgendeiner Form von Logarithmus statt einem Exponenten geändert wird, genau das passieren würde, was ich brauche. Ist das korrekt? Wenn ja, kann mir jemand erklären, wie man das erreichen kann?
``