2010-10-23 18 views
0

J'ai construit un nuage de popularité, mais cela ne fonctionne pas correctement. Le fichier txt est;Le nuage de popularité python ne fonctionne pas

1 Top Gear 
3 Scrubs 
3 The Office (US) 
5 Heroes 
5 How I Met Your Mother 
5 Legend of the Seeker 
5 Scrubs 
..... 

Dans mon nuage de popularité, les noms sont écrits leur fréquence. Par exemple, Legend of the Seeker est écrit 5 fois et leur taille augmente. Chaque mot est censé être écrit une fois et la taille doit être en fonction du nombre de popularité (5). Mais chaque mot devrait être écrit une fois et sa taille doit être en fonction de sa popularité. Comment puis-je le réparer?

Et aussi mon programme devrait prévoir que la condition:

Conditions avec la même fréquence sont généralement affichées dans la même couleur par exemple Golf et Karaté. Des fréquences différentes sont typiquement représentées dans des couleurs différentes, par ex. Basketball, cricket et hockey. Au bas de chaque nuage, la fréquence/nombre de la couleur utilisée pour afficher les valeurs dans le nuage.

Mon code suit ici.

#!/usr/bin/python 
import string 

def main(): 
    # get the list of tags and their frequency from input file 
    taglist = getTagListSortedByFrequency('tv.txt') 
    # find max and min frequency 
    ranges = getRanges(taglist) 
    # write out results to output, tags are written out alphabetically 
    # with size indicating the relative frequency of their occurence 
    writeCloud(taglist, ranges, 'tv.html') 

def getTagListSortedByFrequency(inputfile): 
    inputf = open(inputfile, 'r') 
    taglist = [] 
    while (True): 
     line = inputf.readline()[:-1] 
     if (line == ''): 
      break 
     (count, tag) = line.split(None, 1) 
     taglist.append((tag, int(count))) 
    inputf.close() 
    # sort tagdict by count 
    taglist.sort(lambda x, y: cmp(x[1], y[1])) 
    return taglist 

def getRanges(taglist): 
    mincount = taglist[0][1] 
    maxcount = taglist[len(taglist) - 1][1] 
    distrib = (maxcount - mincount)/4; 
    index = mincount 
    ranges = [] 
    while (index <= maxcount): 
     range = (index, index + distrib-1) 
     index = index + distrib 
     ranges.append(range) 
    return ranges 

def writeCloud(taglist, ranges, outputfile): 
    outputf = open(outputfile, 'w') 
    outputf.write("<style type=\"text/css\">\n") 
    outputf.write(".smallestTag {font-size: xx-small;}\n") 
    outputf.write(".smallTag {font-size: small;}\n") 
    outputf.write(".mediumTag {font-size: medium;}\n") 
    outputf.write(".largeTag {font-size: large;}\n") 
    outputf.write(".largestTag {font-size: xx-large;}\n") 
    outputf.write("</style>\n") 
    rangeStyle = ["smallestTag", "smallTag", "mediumTag", "largeTag", "largestTag"] 
    # resort the tags alphabetically 
    taglist.sort(lambda x, y: cmp(x[0], y[0])) 
    for tag in taglist: 
     rangeIndex = 0 
     for range in ranges: 
      url = "http://www.google.com/search?q=" + tag[0].replace(' ', '+') + "+site%3Asujitpal.blogspot.com" 
      if (tag[1] >= range[0] and tag[1] <= range[1]): 
       outputf.write("<span class=\"" + rangeStyle[rangeIndex] + "\"><a href=\"" + url + "\">" + tag[0] + "</a></span> ") 
       break 
      rangeIndex = rangeIndex + 1 
    outputf.close() 

if __name__ == "__main__": 
    main() 
+3

Si votre question est si urgent, pourquoi ne pas prendre le temps de le formater correctement pour qu'il soit lisible? Alors peut-être que quelqu'un pourrait vous aider. –

+4

Vous n'avez pas non plus dit ce qui ne va pas. –

+1

Son code provient de http://sujitpal.blogspot.com/2007/04/building-tag-cloud-with-python.html, si quelqu'un se soucie de voir comment cela fonctionne. – Mark

Répondre