Частота слов HW

#python #python-3.x

#python #python-3.x

Вопрос:

Напишите программу, которая запрашивает у пользователя имя файла, а затем считывает файл. Затем программа должна определить, как часто используется каждое слово в файле. Слова должны учитываться независимо от регистра, например, Spam и spam будут учитываться как одно и то же слово. Вы должны игнорировать знаки препинания. Затем программа должна вывести слова и указать, как часто используется каждое слово. Выходные данные должны быть отсортированы по наиболее частому слову до наименее частого слова.

Единственная проблема, с которой я сталкиваюсь, — это заставить код считать «The» и «the» как одно и то же. Код считает их разными словами.

 userinput = input("Enter a file to open:")
if len(userinput) < 1 : userinput = 'ran.txt'
f = open(userinput)
di = dict()
for lin in f:
    lin = lin.rstrip()
    wds = lin.split()
    for w in wds:
        di[w] = di.get(w,0)   1
    lst = list()
    for k,v in di.items():
       newtup = (v, k)
       lst.append(newtup)
lst = sorted(lst, reverse=True)
print(lst)
 

Необходимо считать «the» и «The» как в одном слове.

Комментарии:

1. Сделайте слова строчными, прежде чем добавлять их (и используйте счетчик ).

2. Проверьте мой ответ ниже и посмотрите, поможет ли он вам!

Ответ №1:

Мы начинаем с получения слов в списке, обновляя список так, чтобы все слова были в нижнем регистре. Вы можете игнорировать знаки препинания, заменив их в строке пустым символом

 
punctuations = '!"#$%amp;'()* ,-./:;<=>?@[\]^_`{|}~'
s = "I want to count how many Words are there.i Want to Count how Many words are There"

for punc in punctuations:
    s = s.replace(punc,' ')

words = s.split(' ')
words = [word.lower() for word in words]
 

Затем мы перебираем список и обновляем частотную карту.

 freq = {}

for word in words:
    if word in freq:
        freq[word]  = 1
    else:
        freq[word] = 1
print(freq)
#{'i': 2, 'want': 2, 'to': 2, 'count': 2, 'how': 2, 'many': 2, 
#'words': 2, 'are': #2, 'there': 2}
 

Комментарии:

1. Эта реализация не поддерживает пунктуацию.

2. Из сообщения: «Вы должны игнорировать знаки препинания» — я думаю, это означает удаление знаков препинания. Например, в «Once upon a time, there was …» слово «время» должно быть выделено без запятой.

3. Спасибо! Все, чего мне не хватало, это слов = [word. ниже() для слова в словах]

Ответ №2:

Вы можете использовать counter и re следующим образом,

 from collections import Counter
import re

sentence = 'Egg ? egg Bird, Goat  afterDoubleSpacennewline'

# some punctuations (you can add more here)
punctuationsToBeremoved = ",|n|?" 

#to make all of them in lower case
sentence = sentence.lower() 

#to clean up the punctuations
sentence = re.sub(punctuationsToBeremoved, " ", sentence) 

# getting the word list
words = sentence.split()

# printing the frequency of each word
print(Counter(words))