【问题标题】:Creating Word Cloud in Python --- Making Words Different Sizes?在 Python 中创建词云 --- 使单词大小不同?
【发布时间】:2015-03-26 04:39:42
【问题描述】:

我正在尝试使用pytagcloud 在 python 中创建一个词云。用我现在的云,我可以生成一个云,但是所有的词都是一样的大小。 如何更改代码以使我的单词大小与其频率相关?

我的文本文件中已经包含了具有各自频率计数的单词,格式如“George, 44”换行“Harold, 77”、换行、“Andrew, 22”、换行等。但是,当它显示单词,它还显示频率。

with open ("MyText.txt", "r") as file:
   Data =file.read().replace('\n', '')

tags = make_tags(get_tag_counts(Data), maxsize=150)

create_tag_image(tags, 'Sample.png', size=(1200, 1200),background=(0, 0, 0, 255),  fontname='Lobstero', rectangular=True)

import webbrowser
webbrowser.open('Sample.png')

【问题讨论】:

  • make_tagget_tag_countscreate_tag_image 定义在哪里?
  • 尝试将 MyText.txt 作为 csv 文件打开,这样您会得到名称和频率相关但不同的行。
  • @Taylor 欢迎来到 Stack Overflow!您必须包含您的导入语句或提及您正在使用的库。 您正在使用这个库 - 如果没有这些信息,我们将无法帮助您!请务必投票并接受好的答案,并在需要时寻求有关元数据的帮助。
  • 无法将其另存为 .csv,我在 Windows 机器上。另外,我正在使用 pytagcloud 库
  • 仅供新访问者参考,现在我将使用 wordcloud

标签: python pytagcloud


【解决方案1】:

您需要将结果转换为元组。使用您的问题作为输入文本,我们会得到预期的结果:

from pytagcloud import create_tag_image, make_tags
from pytagcloud.lang.counter import get_tag_counts

TEXT = '''I am trying to create a word cloud in python. With my current cloud, I can generate a cloud, but the words all are the same size. How can I alter the code so that my words' sizes appear in relation to their frequency?'''

counts = get_tag_counts(TEXT)
tags = make_tags(counts, maxsize=120)
create_tag_image(tags, 'cloud_large.png', size=(900, 600), fontname='Lobster')

变量counts值得一看:

[('cloud', 3), 
('words', 2), 
('code', 1), 
('word', 1), 
('appear', 1), ...

这只是一个元组列表。由于您的输入文本文件包含一个元组列表,您只需将该信息传递给make_tags

编辑:你可以像这样读取文件

counts = []
with open("tag_file.txt") as FIN:
   for line in FIN:
       # Assume lines look like: word, number
       word,n = line.strip().split()
       word = word.replace(',','')
       counts.append([word,int(n)])

【讨论】:

  • 对不起,这不起作用。单词在一个文件中,分开。如果我只是将它们作为字符串输入,则会忽略它们各自的频率。当我尝试您的代码时,它没有生成词云。只是为了清楚起见:我列表中的每个单词只列出一次,其频率来自直接旁边的语料库,并用逗号分隔
  • @Taylor 我认为您的问题出在文件中。如果您发布一些模仿频率表的示例代码,我们可以从那里开始。我将添加一个小示例来展示如何读取文件。
  • 我的文本文件中的项目涉及一个字符串和一个整数。整数需要以某种方式影响词云中单词的大小,因为每个单词都有不同的预定频率。如果我按照您的演示将它们变成字符串,则每个单词只会出现一次,因此不会影响大小。这不是我需要的
  • 如果你传入元组counts,整数改变大小。您可能没有将其转换为 int,因此模块认为该数字是一个字符串。
  • 这更有帮助,但是当我尝试你编辑上面的代码时,它告诉我有太多的值需要解压。我有 98 行 --- 无论如何要解决这个问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 2011-10-18
相关资源
最近更新 更多