如何在没有拥挤图像的情况下使用pytagcloud构建一个干净的文字云 - Python

mon*_*top 8 word-count python-2.7 word-cloud pytagcloud

在上一个问题中,我向社区询问如何计算句子中每个连续两个单词的频率,我得到了一个很好的答案!现在我正在尝试使用包pytagcloud从结果中构建一个词云.

我所遇到的问题是所产生的图片很拥挤,而且文字也在一起扫描.任何想法是否有一个功能来分离单词并使它们可读或如果有任何替代方法在python中这样做.
谢谢!

我的代码是吼叫.这是我用于测试的文本的链接我尝试使用较少数量的单词组合,但这并没有改变图片中文本的拥挤度.
我还添加了一些功能,如玩"布局"和"大小"和"fontname ='龙虾'和fontzoom = 1",但没有一个给出最佳结果,这是一个干净的词云图片,其中的单词不拥挤.

import operator
import urllib2

from roundup.backends.indexer_common import STOPWORDS
import requests, collections, bs4
Data = "TEXT FROM The link above- TEXT file"
two_words = [' '.join(ws) for ws in zip(Data, Data[1:])]
wordscount = {w:f for w, f in Counter(two_words).most_common() if f > 12}
sorted_wordscount = sorted(wordscount.iteritems(), key=operator.itemgetter(1))

print sorted_wordscount;

from pytagcloud import create_tag_image, create_html_data, make_tags, LAYOUT_HORIZONTAL, LAYOUTS, LAYOUT_MIX, LAYOUT_VERTICAL, LAYOUT_MOST_HORIZONTAL, LAYOUT_MOST_VERTICAL
from pytagcloud.colors import COLOR_SCHEMES
from pytagcloud.lang.counter import get_tag_counts

create_tag_image(make_tags(sorted_wordscount), 'filename.png', size=(1300,1150), background=(0, 0, 0, 255), layout=LAYOUT_MIX, fontname='Molengo', rectangular=True)
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出结果的一个例子:HERE
最佳结果将类似于HERE中的一个图像

vin*_*aut 9

您正按升序排序标记而不是降序,这可能是pytagcloud所期望的.您应该将排序行更改为:

sorted_wordscount = sorted(wordscount.iteritems(), key=operator.itemgetter(1),reverse=True)
Run Code Online (Sandbox Code Playgroud)

修复后,关键参数是make_tags中的maxsize:

create_tag_image(make_tags(sorted_wordscount[:],maxsize=200), 'filename.png', size=(1300,1150), background=(0, 0, 0, 255), layout=LAYOUT_MIX, fontname='Molengo', rectangular=True)
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,则设置最大字体大小(具有最高频率的标签的大小),并计算与此相关的所有其他大小.影响字符串分布方式的另一个参数是窗口的大小.

您必须使用这些参数.

考虑到库函数get_tag_counts不仅仅返回频率:它还会过滤常用单词,应用小写,并且通常应该比简单排序更好地分配标记,就像您正在做的那样.

通过这些更改,您应该得到类似的结果(通过您在帖子中链接的文件的get_tag_counts获得,在1000x1000窗口中,maxsize = 260并封顶到前50个标签):

在此输入图像描述

编辑 - 根据要求,上面创建图像的代码:

import operator
import os
import urllib2

from roundup.backends.indexer_common import STOPWORDS
import requests, collections, bs4
with open("./const11.txt") as file:
  Data1 = file.read().lower()
  Data = Data1.split()
two_words = [' '.join(ws) for ws in zip(Data, Data[1:])]
wordscount = {w:f for w, f in collections.Counter(two_words).most_common() if f > 5}
sorted_wordscount = sorted(wordscount.iteritems(), key=operator.itemgetter(1),reverse=True)

from pytagcloud import create_tag_image, create_html_data, make_tags, LAYOUT_HORIZONTAL, LAYOUTS, LAYOUT_MIX, LAYOUT_VERTICAL, LAYOUT_MOST_HORIZONTAL, LAYOUT_MOST_VERTICAL
from pytagcloud.colors import COLOR_SCHEMES
from pytagcloud.lang.counter import get_tag_counts

tags = make_tags(get_tag_counts(Data1)[:50],maxsize=260)
create_tag_image(tags,'filename.png', size=(1000,1000), background=(0, 0, 0, 255), layout=LAYOUT_MIX, fontname='Lobster', rectangular=True)`
Run Code Online (Sandbox Code Playgroud)

使用python 2.7.5,在Ubuntu 13.04上使用apt-get安装pygame,其余的包使用pip."const11.txt"是问题中链接的文本文件.