So erstellen Sie eine saubere Wortwolke mit pytagcloud ohne ein überfülltes Bild - Python

8

In einer vorherigen Frage, Ich fragte die Gemeinde, wie man die Häufigkeit der jeweils zwei aufeinander folgenden Wörter in einem Satz zählt, und ich bekam eine großartige Antwort! jetzt versuche ich, aus den Ergebnissen eine Wortwolke mit dem Paket pytagcloud aufzubauen.

Das Problem, das ich habe, ist, dass die produzierten Bilder überfüllt sind und die Wörter knutschen. irgendeine Idee, wenn es eine Funktion gibt, Wörter zu trennen und sie lesbar zu machen, oder wenn es irgendeinen alternativen Weg gibt, das in Python zu machen.
Vielen Dank!

Mein Code ist unten. Dies ist der Link des Textes, den ich für den Test verwendet habe Ich habe versucht, eine kleinere Anzahl von Wortkombinationen zu verwenden, aber das hat die Menge des Textes auf dem Bild nicht verändert Ich fügte auch einige Funktionen wie "Layout" und "Größe" und "fontname = 'Lobster' und fontzoom = 1" hinzu, aber keine von ihnen gibt die optimalen Ergebnisse, die ein sauberes Wortwolkenbild ist, wo die Wörter nicht überfüllt sind.

%Vor%

Dies ist ein Beispiel für die Ausgabeergebnisse, die ich bekomme: HIER Das optimale Ergebnis wird ähnlich einem der Bilder sein HIER

    
mongotop 24.09.2013, 06:28
quelle

2 Antworten

9

Sie sortieren die Tags in aufsteigender Reihenfolge anstatt absteigend, wie es wahrscheinlich pytagcloud erwartet. Sie sollten die Sortierlinie zu:

ändern %Vor%

Sobald dies behoben ist, lautet der Schlüsselparameter maxsize in make_tags:

%Vor%

Wenn ich das richtig verstehe, wird die maximale Schriftgröße (diejenige des Tags mit der höchsten Häufigkeit) eingestellt und alle anderen Größen werden in Relation zu dieser berechnet. Der andere Parameter, der die Verteilung der Zeichenfolgen beeinflusst, ist die Größe des Fensters.

Sie müssen mit diesen Parametern spielen.

Beachten Sie, dass die Bibliotheksfunktion get_tag_counts mehr als nur die Häufigkeit zurückgibt: Sie filtert auch gängige Wörter, wendet sie in Kleinbuchstaben an und sollte Ihnen im Allgemeinen eine bessere Verteilung von Tags als eine einfache Sortierung geben , wie Sie es tun.

Mit diesen Änderungen sollten Sie so etwas erhalten (erhalten Sie mit get_tag_counts über die Datei, die Sie in Ihrem Post verlinkt haben, in einem 1000x1000 Fenster, maxsize = 260 und capping auf die ersten 50 Tags):

Bearbeiten - Wie gewünscht, den Code zum Erstellen des obigen Bildes:

%Vor%

Mit Python 2.7.5, auf Ubuntu 13.04 mit pygame installiert mit apt-get, und den Rest der Pakete mit pip. "const11.txt" ist die Textdatei, die in der Frage verlinkt ist.

    
vinaut 03.10.2013, 00:17
quelle
3

BEARBEITEN : Während der Parameter TAG_PADDING , auf den in meiner Antwort unten verwiesen wird, in einigen Fällen von Interesse sein könnte, ist die Antwort von vinaut eindeutig die bessere Lösung.

Wenn Sie Ссылка betrachten, sieht es so aus, als ob TAG_PADDING der Parameter wäre steuert den Abstand zwischen Wörtern.

Da es im Quellcode auf einen Literalwert gesetzt ist und an mehreren Stellen referenziert wird, müssen Sie entweder den Quellcode in einen Parameter ändern, der Ihnen besser passt (und neu packen / neu installieren) oder die Quelle in Ihren Quellcode kopieren eigenes Projekt und ändere es entsprechend.

    
Alanyst 02.10.2013 20:46
quelle