在上一个问题中,我问社区如何计算一个句子中每个连续两个单词的出现频率,我得到了一个很好的答案!现在,我正在尝试使用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)
您正在按照升序而不是降序对标签进行排序,这可能是pytagcloud期望的。您应该将排序行更改为:
sorted_wordscount = sorted(wordscount.iteritems(), key=operator.itemgetter(1),reverse=True)
固定后,关键参数就是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)
如果我理解正确,那么它将设置最大字体大小(具有最高频率的标签的字体大小),并计算与此字体有关的所有其他字体大小。影响字符串分配方式的另一个参数是窗口的大小。
您将必须使用这些参数。
请注意,库函数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)`
在Ubuntu 13.04上使用python 2.7.5,在pygame中安装了apt-get,而其余软件包则使用pip。“ const11.txt”是问题中链接的文本文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句