어떻게 Python 을 통 해 라벨 클 라 우 드 알고리즘 을 실현 합 니까?
3419 단어 python라벨클 라 우 드 알고리즘
실현 원리
라벨 클 라 우 드 가 최종 적 으로 보 여 주 는 효 과 는 두 개의 HTML 매개 변수 에 의 해 제 어 된 것 이다.그것 이 바로 font-size 와 color 이다.예 를 들 어:
<a href="http://foofish.net/blog/tag/django" rel="external nofollow" style="font-size:24px; color:#4f4f4f">django</a>
태그 와 연 결 된 글 이 많 을 수록 이 태그 가 인용 되 는 횟수 가 많 고 font-size 의 값 도 클 수록 color 의 색 이 진 하 다 는 것 을 나타 낸다.체험 효 과 를 고려 하여 font-size 는 태그 의 인용 횟수 가 증가 함 에 따라 무한 으로 증가 할 수 없습니다.그렇지 않 으 면 페이지 가 매우 추 해 보 입 니 다.따라서 font-size 를 한 구간 으로 제어 하고 동 리 color 도 한 구간 에 있다.여기 font-size 를 12 에서 33 사이 에 배열 FONTSIZES,태그 의 font-size 속성 은 안의 한 값 일 수 있 습 니 다.COLORS 는 FONT 입 니 다.SIZES 에 대응 하 는 배열,12 에 대응 하 는\#ccc,15 에 대응 하 는\#adadad 를 유추 합 니 다.
MIN_FONT_SIZE = 12 #
MAX_FONT_SIZE = 33 #
FONT_SIZES = [MIN_FONT_SIZE, 15, 18, 21, 24, 27, 30, MAX_FONT_SIZE]
COLORS = ['#ccc', "#adadad", '#8e8e8e', '#6f6f6f', '#4f4f4f', '#303030', '#111', '#000']
현재 관건 적 인 문 제 는 라벨 의 인용 횟수(tagref_count)font-size 를 확인 합 니 다.font-size 가 되면 color 도 이에 따라 확정 된다.태그 의 font-size 를 배열 FONT 에 고 르 게 분포 하려 면SIZES 에서 지 켜 야 할 원칙 은 횟수 가 증가 함 에 따라 font-size 의 수치 도 증가 하고 인용 횟수 가 가장 적은 라벨 은 MIN 을 사용 하 는 것 이다.FONT_SIZE,인용 횟수 가 가장 많은 라벨 은 MAX 사용FONT_SIZE。그래서 공식 이 있 습 니 다.MINFONT_SIZE + n*step = MAX_FONT_SIZE,step 는 걸음 길이 입 니 다.n 은 인용 횟수 가 가장 많은 라벨 에서 인용 횟수 가 가장 적은 라벨 을 뺀 것 을 말 합 니 다.둘 사이 에 모두 몇 걸음 의 step 가 있 는 지 를 말 합 니 다.이 루트 에 따라 한 걸음 의 step 값 이 얼마 인지 계산 할 수 있 습 니 다.걸음 이 길 다 는 것 을 알 게 되면 임의의 라벨 의 font-size 를 계산 할 수 있 습 니 다.모든 라벨 에서 최소 라벨 까지 의 걸음 수 는 이들 의 차이 입 니 다.그래서 모든 태그 의 font-size 는 MIN 입 니 다.FONT_SIZE + (tag_ref_count-min_ref_count)*step
원본 코드:
# encoding: utf-8
__author__ = 'liuzhijun'
class TagCloud(object):
MIN_FONT_SIZE = 12
MAX_FONT_SIZE = 33
FONT_SIZES = [MIN_FONT_SIZE, 15, 18, 21, 24, 27, 30, MAX_FONT_SIZE]
COLORS = ['#ccc', "#adadad", '#8e8e8e', '#6f6f6f', '#4f4f4f', '#303030', '#111', '#000']
def __init__(self, min_ref_count, max_ref_count):
TagCloud.min_ref_count = min_ref_count
# , 0, font-size.
if max_ref_count == min_ref_count:
TagCloud.step = 0
else:
TagCloud.step = (TagCloud.MAX_FONT_SIZE - TagCloud.MIN_FONT_SIZE) / (max_ref_count - min_ref_count)
def get_tag_font_size(self, tag_ref_count):
font_size = TagCloud.MIN_FONT_SIZE + (tag_ref_count - TagCloud.min_ref_count) * TagCloud.step
# font_size FONT_SIZES ,
# FONT_SIZES
font_size = min(TagCloud.FONT_SIZES, key=lambda x: abs(font_size - x))
return font_size
def get_tag_color(self, tag_ref_count):
return TagCloud.COLORS[(TagCloud.FONT_SIZES.index(self.get_tag_font_size(tag_ref_count)))]
출력 결과:
12,12,12,18,24,18,21,27,33,
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.