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()
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. –
Vous n'avez pas non plus dit ce qui ne va pas. –
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