#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))