Массив кортежей, необходимых для метода generate_from_frequencies в Python wordcloud

Я пытаюсь создать облако слов в Python на основе значения строк и соответствующих им значений данных в документе Excel. Метод generate_from_frequencies принимает параметр частот, который, как говорят в документации, должен принимать массив кортежей.

Фрагмент кода из исходного кода wordcloud:

def generate_from_frequencies(self, frequencies):
    """Create a word_cloud from words and frequencies.
    Parameters
    ----------
    frequencies : array of tuples
        A tuple contains the word and its frequency.
    Returns
    -------
    self
    """
    # make sure frequencies are sorted and normalized
    frequencies = sorted(frequencies, key=item1, reverse=True)
    frequencies = frequencies[:self.max_words]
    # largest entry will be 1
    max_frequency = float(frequencies[0][1])

    frequencies = [(word, freq / max_frequency) for word, freq in frequencies]

Я попытался использовать обычный список, затем попробовал ndarray из numpy, но PyCharm показывает предупреждения о том, что тип параметра должен быть array.py, который, как я читал, должен принимать только символы, целые числа и числа с плавающей запятой (документы array.py):

Этот модуль определяет тип объекта, который может компактно представлять массив основных значений: символы, целые числа, числа с плавающей запятой.

Мой тестовый код:

import os
import numpy
import wordcloud

d = os.path.dirname(__file__)
cloud = wordcloud.WordCloud()
array = numpy.array([("hi", 6), ("seven"), 17])
cloud.generate_from_frequencies(array)  # <= what should go in the parentheses

Если я запускаю приведенный выше код, несмотря на предупреждение PyCharm, я получаю следующую ошибку, которая, я полагаю, является еще одним способом сказать мне, что он не может принять тип ndarray:

  File "C:/Users/Caitlin/Documents/BioDataSorter/tag_cloud_test.py", line 8, in <module>
cloud.generate_from_frequencies(array)  # <= what should go in the parentheses
  File "C:\Python34\lib\site-packages\wordcloud\wordcloud.py", line 263, in generate_from_frequencies
frequencies = sorted(frequencies, key=item1, reverse=True)
TypeError: 'int' object is not subscriptable

Другая потенциальная проблема может заключаться в том, что wordcloud был написан на Python 2, но я использую Python 3.4, что могло сделать часть кода непригодным для использования. Какой тип я должен передать этому методу?


person CCCodes    schedule 07.07.2016    source источник


Ответы (2)


Из вашего тестового кода... # <= что должно быть в скобках

Я считаю, что у вас должен быть кортеж (("hi", float(6/(6+17)),("seven", float(17/(6+17))))

person J Herron    schedule 24.08.2016
comment
Спасибо за ответ! Я изменил эту строку на: cloud.generate_from_frequencies((("hi", float(6/(6+17)),("seven", float(17/(6+17)))))) , но получил TypeError: Float object is not subscriptable, поэтому я изменил float на int, и это сработало. - person CCCodes; 26.08.2016

Благодаря J Herron и Selva за ответ на использование кортежей вместо объекта списка - и я закончил с этим:

cloud.generate_from_frequencies((("hi", 3),("seven", 7)))

Создано облако слов

Это по-прежнему возникало как ошибка в моей IDE, что вводило в заблуждение, но оно работало так, как должно было.

person CCCodes    schedule 26.08.2016