Python 2.7 如何使用pytagcloud构建干净的单词云,而不使用拥挤的图像-Python

Python 2.7 如何使用pytagcloud构建干净的单词云,而不使用拥挤的图像-Python,python-2.7,word-count,word-cloud,pytagcloud,Python 2.7,Word Count,Word Cloud,Pytagcloud,在一次访谈中,我问社区如何计算一句话中每个连续两个单词的频率,我得到了一个很好的答案! 现在,我正试图使用pytagcloud包从结果中构建一个单词云 我确实有一个问题,那就是制作出来的照片很拥挤,文字也在相互亲吻。是否有一个函数来分隔单词并使其可读,或者是否有其他方法在python中实现这一点。 谢谢 我的密码是贝娄。这是我用于测试的文本的结尾 我尝试使用较少的单词组合,但这并没有改变图片中文本的拥挤程度。 我还添加了一些功能,比如玩“布局”和“大小”以及“fontname='Lobster'

在一次访谈中,我问社区如何计算一句话中每个连续两个单词的频率,我得到了一个很好的答案! 现在,我正试图使用pytagcloud包从结果中构建一个单词云

我确实有一个问题,那就是制作出来的照片很拥挤,文字也在相互亲吻。是否有一个函数来分隔单词并使其可读,或者是否有其他方法在python中实现这一点。
谢谢

我的密码是贝娄。这是我用于测试的文本的结尾 我尝试使用较少的单词组合,但这并没有改变图片中文本的拥挤程度。
我还添加了一些功能,比如玩“布局”和“大小”以及“fontname='Lobster'和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)
这是我得到的输出结果的一个示例:

最佳结果将类似于其中一幅图像

编辑:虽然我的答案中下面引用的
标记填充
参数可能对某些情况有兴趣,但vinaut的答案显然是最好的开始


现在来看,似乎
标记填充
可能是控制单词间距的参数


因为它在源代码中被设置为一个文本值,并且在多个地方被引用,所以您要么必须将源代码更改为更适合您的参数(并重新打包/重新安装),要么将源代码复制到您自己的项目中,并相应地进行更改。

您正在按升序而不是降序对标记进行排序,正如Pytagloud所期望的那样。您应该将排序行更改为:

sorted_wordscount = sorted(wordscount.iteritems(), key=operator.itemgetter(1),reverse=True)
修复后,关键参数为make_标记中的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)
如果我理解正确,这将设置最大字体大小(具有最高频率的标记的字体大小),并计算与此相关的所有其他大小。影响字符串分布方式的另一个参数是窗口的大小

您必须使用这些参数

考虑到库函数get_tag_counts的作用不仅仅是返回频率:它还过滤常用词,使用小写字母,一般来说,与简单的排序相比,它应该为您提供更好的标记分布

通过这些更改,您应该会得到类似的结果(在1000x1000窗口中,使用get_tag_计数在您的帖子中链接的文件上获得,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)`

在Ubuntu13.04上使用Python2.7.5,pygame安装了apt get,其余的软件包安装了pip。“const11.txt”是问题中链接的文本文件。

Hi vinaut!!!非常感谢你的回答!!!我试图复制结果,但失败了,你的云看起来比我的好1000倍!你能把你的密码贴出来让我看看我做错了什么吗?再次感谢大家!!!!不用担心,用生成图像的代码编辑了答案。非常感谢vinaut!PS-你的笔记本电脑里有一些魔力!:)这是我用maxsize=50得到的最好的25个单词,size=(130011100)。我不知道为什么它不能使单词变成像你一样的矩形,即使矩形=真。很抱歉,它不适合你:这正是我使用的代码。你可能有一个与我不同的版本的软件包,把事情搞砸了:作为最后的手段,你可以尝试使用一个干净的Ubuntu安装的虚拟机(或ec2实例),然后像我一样安装所有的软件包。正如我所说,我从头安装了所有的软件包(python、pygame,所有的软件包)在一个全新的Ubuntu虚拟机上,使用apt get和pip。做同样的事情,你会得到同样的结果:)