Ошибка типа: данные изображения не могут быть преобразованы в плавающее в проекте Wordcloud - PullRequest
0 голосов
/ 12 апреля 2020

Итак, у нас есть эта практика кода для создания облака слов, кажется очень простой, поскольку он просто создает словарь ... но каким-то образом код, который они предоставили для выполнения облака слов, дает мне ошибку

"TypeError: Image data cannot be converted to float". 

Я проверил тот же текстовый файл, который использовался на моем собственном компьютере только для создания словаря, и подтвердил, что значения действительно являются целыми числами, поэтому я застрял. Размещение всего кода, представленного ниже:

!pip install wordcloud
!pip install fileupload
!pip install ipywidgets
!jupyter nbextension install --py --user fileupload
!jupyter nbextension enable --py fileupload

import wordcloud
import numpy as np
from matplotlib import pyplot as plt
from IPython.display import display
import fileupload
import io
import sys

Это виджет загрузчика, который они нам дали

def _upload():

    _upload_widget = fileupload.FileUploadWidget()

    def _cb(change):
        global file_contents
        decoded = io.StringIO(change['owner'].data.decode('utf-8'))
        filename = change['owner'].filename
        print('Uploaded `{}` ({:.2f} kB)'.format(
            filename, len(decoded.read()) / 2 **10))
         file_contents = decoded.getvalue()

    _upload_widget.observe(_cb, names='data')
    display(_upload_widget)

_upload()

Вот код, который я написал

def calculate_frequencies(file_contents):
# Here is a list of punctuations and uninteresting words you can use to process your text
    punctuations = '''!()-[]{};:'"\,<>./?@#$%^&*_~'''
    uninteresting_words = ["the", "a", "to", "if", "is", "it", "of", "and", "or", "an", "as", "i", "me", "my", \
"we", "our", "ours", "you", "your", "yours", "he", "she", "him", "his", "her", "hers", "its", "they", "them", \
"their", "what", "which", "who", "whom", "this", "that", "am", "are", "was", "were", "be", "been", "being", \
"have", "has", "had", "do", "does", "did", "but", "at", "by", "with", "from", "here", "when", "where", "how", \
"all", "any", "both", "each", "few", "more", "some", "such", "no", "nor", "too", "very", "can", "will", "just"]

# My Code
    frequencies = {}
    floatdic = {}
    case = file_contents.split()
    for word in case:
        words = word.strip(punctuations)
        lower = words.lower()
        if lower.isalpha() == False or lower in uninteresting_words:
            continue
        elif lower not in frequencies:
            frequencies[lower]= 0
        frequencies[lower]+=1
    return frequencies
    #Their Code Provided for wordcloud
    cloud = wordcloud.WordCloud()
    cloud.generate_from_frequencies(frequencies)
    cloud.to_file("myfile.jpg")
    return cloud.to_array()

Затем они дайте этот код, чтобы выполнить слово cloud

myimage = calculate_frequencies(file_contents)
plt.imshow(myimage, interpolation = 'nearest')
plt.axis('off')
plt.show()

, которое вылетает в строке "plt.imshow". Они запускают этот код на ноутбуке Jupyter, если это поможет

1 Ответ

0 голосов
/ 14 апреля 2020

Мне удалось решить проблему! Я понял, что у меня есть

return frequencies

В конце кода, который я использовал для проверки словаря, и забыл удалить его для функции облака слов. Как только это было сделано, облако слов заработало отлично!

...