Finding how many times a unique word has been used...

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
User avatar
Mr Tech
Forum Contributor
Posts: 424
Joined: Tue Aug 10, 2004 3:08 am

Finding how many times a unique word has been used...

Post by Mr Tech »

I have a script that strips the HTML tags from a website and sends back just the words...

What I want to do is count how many times each unique word has been used and then display it on the page.

How would I do this?
josh
DevNet Master
Posts: 4872
Joined: Wed Feb 11, 2004 3:23 pm
Location: Palm beach, Florida

Post by josh »

User avatar
Mr Tech
Forum Contributor
Posts: 424
Joined: Tue Aug 10, 2004 3:08 am

Post by Mr Tech »

Thanks for that!

I created this code:

Code: Select all

$words = explode(" ",$fields[content]);
$words_count = array_count_values($words);
foreach($words_count as $word) {
echo $word[0] . " " . $word[1] . "<br/>";
}
I want it to display the word and the amount of times it is used but this code above wont work...

I then also need it to display the words used the msot times first...

Thanks for your help jshpro2!
User avatar
sweatje
Forum Contributor
Posts: 277
Joined: Wed Jun 29, 2005 10:04 pm
Location: Iowa, USA

Post by sweatje »

This would print a list of the top ten words in a glob of text.

Code: Select all

$big_text = 'Lorem <b>ipsum</b> dolor sit amet, <i>consectetuer</i> adipiscing elit. Duis enim. Praesent viverra rhoncus ipsum. Donec gravida, urna non ornare placerat, enim tortor auctor massa, nec tempus neque mauris non ante. Fusce porttitor velit eu magna. In a tellus a justo venenatis porttitor. Suspendisse dapibus lobortis sapien. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Nunc elit justo, suscipit nec, vehicula sit amet, fermentum id, nibh. Integer tempor, diam eu ornare accumsan, nisl quam convallis nunc, sodales convallis elit nisl nec tortor. Etiam elementum eros in lorem. Integer volutpat tortor sed nulla. Ut orci lectus, hendrerit a, placerat eget, luctus sed, elit.
Etiam eget est. Suspendisse viverra neque id est. Aenean lacinia. Ut vitae tortor a eros dignissim iaculis. Cras tempus nisi vel risus. Donec in risus vel orci vulputate eleifend. Suspendisse commodo vulputate erat. Nullam eu dolor ac elit semper pellentesque. Integer sed lectus. Vivamus consequat tellus id turpis. Morbi eu sapien porttitor enim fringilla viverra. Morbi justo nunc, semper eu, venenatis sed, scelerisque vitae, eros. Maecenas aliquam lobortis quam. Pellentesque mollis, mauris nec pretium egestas, nisl libero malesuada felis, a lobortis neque purus vel augue. Nam cursus euismod urna.
Etiam sollicitudin, mauris vitae sodales aliquam, dolor eros vehicula justo, vel suscipit sem justo et orci. Suspendisse leo dolor, condimentum eu, porttitor vitae, dapibus ac, ante. Etiam a augue. Nunc quis risus. Cras non est vel erat congue consequat. Maecenas viverra iaculis lectus. In feugiat nisi nec tellus. Donec odio. Nulla viverra tortor eu enim. Aenean justo odio, accumsan a, ultricies a, faucibus non, tellus.
Etiam commodo magna eu mi. Nulla id felis. Donec a tellus. Suspendisse adipiscing venenatis nisi. Curabitur et tellus. Nullam vitae nibh in turpis lacinia dictum. Duis nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Suspendisse tincidunt vestibulum mi. Duis scelerisque lectus. Ut ullamcorper nisi porttitor est. Donec condimentum lectus sollicitudin pede. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Quisque condimentum justo at velit. Vestibulum a magna.
Vestibulum cursus sodales purus. Curabitur pharetra, pede et vestibulum ultricies, ipsum pede adipiscing eros, condimentum nonummy nibh lectus non dolor. Ut nec massa et lectus tincidunt luctus. Nulla a dolor non tortor condimentum placerat. Aenean commodo. Fusce lectus velit, adipiscing eget, viverra sit amet, aliquam id, lorem. Vestibulum nonummy. Maecenas ornare imperdiet lacus. Integer eu neque consectetuer diam pharetra euismod. Nunc sodales egestas erat. Quisque ligula urna, rutrum non, porta et, elementum nec, sem. Ut eget urna. In ante nibh, scelerisque a, hendrerit eu, consectetuer vitae, lectus. Etiam risus tortor, adipiscing quis, luctus et, pharetra vel, nunc.
';

$words = array_count_values(preg_split('/\W+/', strip_tags($big_text)));
arsort($words);
echo '<ul>';
foreach(array_slice($words,0,10) as $word => $count) {
	echo "<li>$word occured $count times.</li>\n";	
}
echo '</ul>';
Produces:

Code: Select all

<ul><li>a occured 12 times.</li>
<li>eu occured 10 times.</li>
<li>lectus occured 9 times.</li>
<li>nec occured 7 times.</li>
<li>tortor occured 7 times.</li>
<li>non occured 7 times.</li>
<li>justo occured 7 times.</li>
<li>viverra occured 6 times.</li>
<li>per occured 6 times.</li>
<li>Suspendisse occured 6 times.</li>
</ul>
josh
DevNet Master
Posts: 4872
Joined: Wed Feb 11, 2004 3:23 pm
Location: Palm beach, Florida

Post by josh »

Mr Tech wrote:Thanks for that!

I created this code:

Code: Select all

$words = explode(" ",$fields[content]);
$words_count = array_count_values($words);
foreach($words_count as $word) {
echo $word[0] . " " . $word[1] . "<br/>";
}
I want it to display the word and the amount of times it is used but this code above wont work...

I then also need it to display the words used the msot times first...

Thanks for your help jshpro2!
You need to do

Code: Select all

foreach ($words_count as $word => $times) {
 echo $word . ' was found ' . $times . ' times';
}
Post Reply