Home > Software engineering >  Count occurrences of words in a text with special characters
Count occurrences of words in a text with special characters

Time:04-20

I want to count occurrences of each word in a text to spot the key words coming over the most.

This script works quite well but the problem is that this text is written in French. So there are important key words that would be missed.

For example the word Europe may appear in the text like l'Europe or en Europe.

In the first case, the code will remove the apostrophe and l'Europe is considered as one unique word leurope in the final result.

How can I improve the code to split l' from Europe?

import string

# Open the file in read mode
#text = open("debat.txt", "r")

text = ["Monsieur Mitterrand, vous avez parlé une minute et demie de moins que Monsieur Chirac dans cette première partie. Je préfère ne pas avoir parlé une minute et demie de plus pour dire des choses aussi irréelles et aussi injustes que celles qui viennent d'être énoncées. Si vous êtes d'accord, nous arrêtons cette première partie, nous arrêtons les chronomètres et nous repartons maintenant pour une seconde partie en parlant de l'Europe. Pour les téléspectateurs, M. Mitterrand a parlé 18 minutes 36 et M. Chirac, 19 minutes 56. Ce n'est pas un drame !... On vous a, messieurs, probablement jamais vus plus proches à la fois physiquement et peut-être politiquement que sur les affaires européennes... les Français vous ont vus, en effet, à la télévision, participer ensemble à des négociations, au coude à coude... voilà, au moins, un domaine dans lequel, sans aucun doute, vous connaissez fort bien, l'un et l'autre, les opinions de l'un et de l'autre. Nous avons envie de vous demander ce qui, aujourd'hui, au -plan européen, vous sépare et vous rapproche ?... et aussi lequel de vous deux a le plus évolué au cours des quelques années qui viennent de s'écouler ?... #"]

# Create an empty dictionary
d = dict()

# Loop through each line of the file
for line in text:
    # Remove the leading spaces and newline character
    line = line.strip()

    # Convert the characters in line to
    # lowercase to avoid case mismatch
    line = line.lower()

    # Remove the punctuation marks from the line
    line = line.translate(line.maketrans("", "", string.punctuation))

    # Split the line into words
    words = line.split(" ")

    # Iterate over each word in line
    for word in words:
        # Check if the word is already in dictionary
        if word in d:
            # Increment count of word by 1
            d[word] = d[word]   1
        else:
            # Add the word to dictionary with count 1
            d[word] = 1

sorted_tuples = sorted(d.items(), key=lambda item: item[1], reverse=True)

sorted_dict = {k: v for k, v in sorted_tuples}

# Print the contents of dictionary
for key in list(sorted_dict.keys()):
    print(key, ":", sorted_dict[key])

CodePudding user response:

line = line.translate(line.maketrans("", "", string.punctuation))

removes all punctuation characters (l'Europe becomes lEurope). Instead of that, you may want to replace them by spaces, using for example:

for p in string.punctuation:
   line = line.replace(p, ' ')

CodePudding user response:

Where you currently have:

line = line.translate(line.maketrans("", "", string.punctuation))

... you can add the following line before it:

line = line.translate(line.maketrans("'", " "))

This will replace the ' character with a space wherever it's found, and the line using string.punctuation will behave exactly as before, except that it will not encounter any ' characters since we have already replaced them.

  • Related