Counting frequency of all words of a string is a basic operation for any programming language. The frequency of each word of the text can be counted and stored in a hash for further use. In Perl, we can do this by firstly splitting the words of the string into an array. We use the function split / / which splits the string with ‘ ‘. However the blank spaces can be more than one in between two words, therefore /\s+/ is used. Here \s+ denotes one or more occurrence of ‘ ‘. Now we traverse the new array created by splitting of text into words. This time we increment the count of the word while traversing the array.
- Example: To demonstrate Count the frequency of words in string
# Perl program for counting words in a string
$actual_text
=
"GFG GeeksforGeeks GFG"
;
# Creating words array by splitting the string
@words
=
split
/ /,
$actual_text
;
# Traversing the words array and
# increasing count of each word by 1
foreach
$word
(
@words
)
{
$count
{
$word
}++;
}
# Printing the word and its actual count
foreach
$word
(
sort
keys
%count
)
{
print
$word
,
" "
,
$count
{
$word
},
"\n"
;
}
Output:
GFG 2 GeeksforGeeks 1
Difference between /\s+/ and / /: The ‘\s+’ can be used for a delimiter with one or many space. However / / just separates words with 1 space. The following code represents the difference if the text has more than one space between two words.
- Example: To demonstrate the difference between /\s+/ and / /
# Perl program for counting words in a string using / /
# A text with two spaces rather than one
$actual_text
=
"GeeksforGeeks welcomes you to GeeksforGeeks portal"
;
# splitting the word with / /
@words
=
split
/ /,
$actual_text
;
# Counting the occurrence of each word
foreach
$word
(
@words
)
{
$count
{
$word
}++;
}
foreach
$word
(
sort
keys
%count
)
{
print
$word
,
" "
,
$count
{
$word
},
"\n"
;
}
Output:
1 GeeksforGeeks 2 portal 1 to 1 welcomes 1 you 1
Note: The extra ‘ ‘ is also counted as a word.
Using the command /\s+/ to split the words: Here space will not count as the separate word.
- Example:
#Perl program for counting words in a string using /\s+/
# Actual string with two spaces
$actual_text
=
"GeeksforGeeks welcomes you to GeeksforGeeks portal"
;
#S plitting the text using /\s+/ command
@words
=
split
/\s+/,
$actual_text
;
# counting the occurrence of each word
foreach
$word
(
@words
)
{
$count
{
$word
}++;
}
foreach
$word
(
sort
keys
%count
)
{
print
$word
,
" "
,
$count
{
$word
},
"\n"
;
}
Output:
GeeksforGeeks 2 portal 1 to 1 welcomes 1 you 1
Note: The extra ‘ ‘ is not counted as a word.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.