2010-10-21 5 views
1

Это странно, поэтому будьте терпеливы, пока я пытаюсь объяснить.Отображать количество слов/облако тегов в пропорции

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

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

благодарит заранее.

+0

Вы правы, это странно. Можете ли вы определить проблему более конкретно, включая все границы (т. Е. Сколько слов в исходной строке) и, возможно, почему вы должны отправить строку в другую часть программного обеспечения? Мне кажется, что если в исходной строке у вас есть не более 1000 слов, вы можете отправить эту строку, и если бы у вас было более 1000 слов в исходной строке, вы могли бы получить 1001 + уникальные слова. Я предполагаю, что я не понимаю проблему ... – Kendrick

+0

отредактировал. дайте мне знать, если это поможет. – jmccartie

+0

Если я хорошо понимаю, ваша строка 1000 символов должна содержать дубликаты? – Jack

ответ

2

Количество слов, то сделать это для каждого слова в массиве:

floor(count_of_the_word * (1000/numbber_of_total_words)) 

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

таким образом имея в 50 раз кошачьи 100 раз GoZilla 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 слов

+1

Если вы хотите, чтобы избежать потери слов, то просто подсчитайте, как часто у вас есть 0 после преобразования и уменьшите наибольшее количество по этому номеру и добавьте 1 к каждому слово, которое имеет 0 как счет – ITroubs

+0

, избило меня до удара. +1 –

+0

спасибо всем! – jmccartie

Смежные вопросы