Задача: разбить названия фильмов из файла csv на отдельные слова и посчитайте все слова и кол-во их упоминаний
Есть файл .csv со следующей структурой:
movieId, title, genres
1,Toy Story (1995),Adventure|Animation|Children|Comedy|Fantasy,
2,Jumanji (1995),Adventure|Children|Fantasy,
3,Grumpier Old Men (1995),Comedy|Romance,
4,Waiting to Exhale (1995),Comedy|Drama|Romance
Необходимо написать скрипт в Python, в котором разбить названия фильмов на отдельные слова и все эти слова посчитать.
Сейчас написан следующий код:
with open ('C:\file.csv', 'r') as f:
for row in f:
line_list = row.strip().split(',')
line = line_list[1]
line_1 = line.title().split()
print(line_1)
Результат такой, дальше продвинуться не могу
['Title']
['Toy', 'Story', '(1995)']
['Jumanji', '(1995)']
['Grumpier', 'Old', 'Men', '(1995)']
['Waiting', 'To', 'Exhale', '(1995)']
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
string = ''
with open ('file.csv', 'r') as f:
for row in f:
line_list = row.strip().split(',')
string += f'{line_list[1]} '
print(f'\n{string}\n')
lst_no = ['.', ',', ':', '!', '"', "'", '[', ']', '-', '—', '(', ')' ] # и т.д.
lst = []
for word in string.lower().split():
if not word in lst_no:
_word = word
if word[-1] in lst_no:
_word = _word[:-1]
if word[0] in lst_no:
_word = _word[1:]
lst.append(_word)
_dict = dict()
for word in lst:
_dict[word] = _dict.get(word, 0) + 1
# сортируем словарь посредством формирования списка (значение, ключ)
_list = []
for key, value in _dict.items():
_list.append((value, key))
_list.sort(reverse=True)
# печатаем первые 10 самых используемых слов
print('Первые 10 самых используемых слов:')
for freq, word in _list[0:10]:
print(f'{word:>10} -> {freq:>3}')
Автор решения: strawdog
→ Ссылка
Это все довольно легко сделать с помощью pandas (я взял другой csv, потому что ваш - не показателен):
import pandas as pd
s = pd.read_csv("movies.csv", usecols=[1], squeeze=True)
res = s.str.replace(r"\(.+\)","", regex=True).str.extractall("(\S+)").reset_index()[0].value_counts().nlargest(10)
Заметьте, я удаляю указание года в названии фильма. Если этого делать не нужно, просто убираем .replace(r"\(.+\)","", regex=True). Метод nlargest(10) показывает первые 10 наиболее часто встречающихся названий. Если нужно все показать, просто убираете этот метод.
res:
The 9
and 9
of 6
the 5
Love 4
You 4
in 4
a 3
Juliet 3
Day 3
