Показать количество слов / облако тегов в пропорции - PullRequest
1 голос
/ 21 октября 2010

Это странно, так что наберитесь терпения, пока я пытаюсь объяснить.

Основная проблема: у меня массивная строка - она ​​может быть различной длины в зависимости от пользователя. Моя работа состоит в том, чтобы получить эту массивную строку в зависимости от пользователя, а затем отправить ее другому программному обеспечению для создания облака тегов. Если бы жизнь была легкой для меня, я мог бы просто отправить все это. Однако программное обеспечение облака тегов будет принимать только строку длиной 1000 слов, поэтому мне нужно выполнить некоторую работу над строкой, чтобы отправить самые важные слова.

Моей первой мыслью было подсчитать каждое вхождение слов, и бросить все это в массив с подсчетом каждого слова, а затем отсортировать.

array(517) (
    "We" => integer 4
    "Five" => integer 1
    "Ten's" => integer 1
    "best" => integer 2
    "climbing" => integer 3
     (etc...)

Форма здесь, я создаю новую строку и выкладываю каждое слово, умноженное на его количество. Как только общая строка достигает 1000 слов, я останавливаюсь. Это создает проблему.

Допустим, слово «яблоко» появляется в 900 раз, а слово «кот» - в 100 раз. Результирующее облако слов будет состоять только из двух слов.

Моя идея состоит в том, чтобы как-то выплевывать слова в некотором отношении к другим словам. Мои попытки пока не увенчались успехом на разных наборах данных, где соотношение невелико - особенно когда в «1» много слов, что делает GCD очень низким.

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

спасибо заранее.

1 Ответ

2 голосов
/ 21 октября 2010

посчитайте все слова, затем сделайте это для каждого слова в вашем массиве:

floor(count_of_the_word * (1000/numbber_of_total_words))

это приведет к максимуму 1000 слов, и все слова появятся в x раз, сократившись на соответствующую пропорцию.

таким образом, если в 50 раз кошка будет в 100 раз слабее гозиллы 4000, а в 4000 раз куст в 1000 раз больше, то вначале

array(
    cat[50]
    gozilla[100]
    looser[4000]
    bush[4000]
    george[1000]
)

после зацикливания и преобразования чисел вы получите это:

array(
    cat[5]
    gozilla[10]
    looser[437]
    bush[437]
    george[109]
)

Всего 998 слов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...