Example of how to count the number of words in a text file using python
Get the number of words in a text
Let's consider the following text (extracted from a wikipedia' article)
txt = "Le français est une langue indo-européenne de la famille des langues romanes. Le français s'est formé en France (variété de la « langue d'oïl », qui était la langue de la partie septentrionale du pays). Le français est déclaré langue officielle en France en 15395"
To get the number of words in the above text, a solution is to create a list of words using split():
list_of_words = txt.split()
print(list_of_words)
['Le', 'français', 'est', 'une', 'langue', 'indo-européenne', 'de', 'la', 'famille', 'des', 'langues', 'romanes.', 'Le', 'français', "s'est", 'formé', 'en', 'France', '(variété', 'de', 'la', '«', 'langue', "d'oïl", '»,', 'qui', 'était', 'la', 'langue', 'de', 'la', 'partie', 'septentrionale', 'du', 'pays).', 'Le', 'français', 'est', 'déclaré', 'langue', 'officielle', 'en', 'France', 'en', '15395']
and to apply len():
print("Number of words in text: ", len(list_of_words))
returns
Number of words in text: 45
Get the number of words in a text without repetitions
1: Remove special characters
To remove special characters a solution is to use isalnum():
list_of_words = [''.join(e for e in word if e.isalnum()) for word in list_of_words]
print(list_of_words)
returns
['Le', 'français', 'est', 'une', 'langue', 'indoeuropéenne', 'de', 'la', 'famille', 'des', 'langues', 'romanes', 'Le', 'français', 'sest', 'formé', 'en', 'France', 'variété', 'de', 'la', '', 'langue', 'doïl', '', 'qui', 'était', 'la', 'langue', 'de', 'la', 'partie', 'septentrionale', 'du', 'pays', 'Le', 'français', 'est', 'déclaré', 'langue', 'officielle', 'en', 'France', 'en', '15395']
2 - Remove empty elements ""
list_of_words = [word for word in list_of_words if word]
print(list_of_words)
3 - Remove duplicate using set():
list_of_words = list(set(list_of_words))
4 - Get the number of unique words
print("Number of words in text: ", len(list_of_words))
returns
Number of words in text: 27