计算具有特殊字符的文本中单词的出现次数

Count occurrences of words in a text with special characters

我想计算文本中每个单词的出现次数,以找出出现次数最多的关键词。

这个脚本工作得很好,但问题是这个文本是用法语写的。所以有一些重要的关键词会被遗漏。

例如,单词 Europe 可能出现在 l'Europeen Europe 等文本中。

在第一种情况下,代码将删除撇号,并且 l'Europe 在最终结果中被视为一个唯一的单词 leurope

如何改进代码以从 Europe 拆分 l'

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])
line = line.translate(line.maketrans("", "", string.punctuation))

删除 所有标点字符(l'Europe 变为 lEurope)。相反,您可能希望用空格 替换 它们,例如:

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

您目前所在的位置:

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

...您可以在其前面添加以下行:

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

这将在任何地方用 space 替换 ' 字符,并且使用 string.punctuation 的行的行为将与以前完全相同,只是它不会遇到任何 ' 个字符,因为我们已经替换了它们。