2010-10-21 5 views
1

C'est bizarre, alors soyez patient pendant que j'essaie d'expliquer.Afficher le nombre de mots/nuage d'étiquettes en proportion

Problème de base: J'ai une chaîne massive - elle peut être de différentes longueurs selon l'utilisateur. Mon travail consiste à acquérir cette chaîne massive en fonction de l'utilisateur, puis à l'envoyer à l'autre logiciel pour créer un nuage de tags. Si la vie était facile pour moi, je pourrais simplement envoyer le tout. Cependant, le logiciel de nuage de tags n'acceptera qu'une chaîne de 1000 mots, je dois donc travailler sur ma chaîne pour envoyer les mots les plus importants. Ma première pensée a été de compter chaque occurrence des mots, et de jeter tout cela dans un tableau avec le nombre de chaque mot, puis trier.

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

Ici, je crée une nouvelle chaîne et crache chaque mot fois son nombre. Une fois que la chaîne totale atteint 1000 mots, je m'arrête. Cela crée un problème. Supposons que le mot «pomme» s'affiche 900 fois et que le mot «chat» s'affiche 100 fois. Le nuage de mots résultant ne comprendrait que deux mots.

Mon idée est de cracher en quelque sorte les mots à un certain type de rapport aux autres mots. Mes tentatives jusqu'ici ont échoué sur différents ensembles de données où le rapport n'est pas grand - particulièrement quand il y a beaucoup de mots à "1", rendant ainsi le GCD très bas. Je pense qu'il s'agit d'un problème mathématique simple que je ne peux pas comprendre, alors je me tourne vers l'oracle qu'est stackoverflow.

merci d'avance.

+0

Vous avez raison, c'est bizarre. Pouvez-vous définir plus précisément le problème, y compris toutes les limites (c'est-à-dire le nombre de mots dans la chaîne d'origine) et peut-être pourquoi vous devez envoyer une chaîne à l'autre partie du logiciel? Il me semble que si vous avez au plus 1000 mots dans la chaîne d'origine, vous pouvez envoyer cette chaîne, et si vous avez plus de 1000 mots dans la chaîne originale, vous pourriez vous retrouver avec 1001+ mots uniques. Je devine que je ne comprends pas le problème ... – Kendrick

+0

édité. laissez-moi savoir si ça aide. – jmccartie

+0

si je comprends bien votre chaîne 1000 caractères doit inclure des doublons? – Jack

Répondre

2

nombre tous les mots font alors ce pour chaque mot dans votre tableau:

floor(count_of_the_word * (1000/numbber_of_total_words)) 

cela se traduira par un maximum de 1000 mots et tous les mots apparaissent dans les temps x réduit la proportion en fonction.

afin d'avoir 50 fois chat 100 fois gozilla 4000 plus souple et 4000 fois brousse 1000 fois george donnera lieu d'abord à

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

après le bouclage et la conversion des chiffres que vous obtiendrez ceci:

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

résultant en 998 mots au total

+1

si vous voulez éviter totalement la perte de mots alors il suffit de compter combien de fois vous avez un 0 après la transformation et réduire le plus grand nombre de ce nombre et ajouter 1 à chaque mot qui a un 0 comme un compte – ITroubs

+0

me battre au coup de poing. +1 –

+0

merci à tous !! – jmccartie

Questions connexes