1 / 1 / 0
Регистрация: 04.11.2018
Сообщений: 23
|
|
1 | |
Оптимизация кода19.09.2021, 20:52. Показов 1707. Ответов 13
Коллеги, здравствуйте! Как можно оптимизировать код, долго что-то выполняется
import math from collections import Counter def read_data(data=True): df = open('war_peace_processed.txt', 'rt').read() if data: return df.split('\n') else: df = df.split('[new chapter]') return [i.split('\n') for i in df] def df_calc(target_word): corpus = read_data(data=False) # corpus number_of_documents_with_target_word = 0 for chapter in corpus: if target_word in chapter: number_of_documents_with_target_word += 1 return number_of_documents_with_target_word / len(corpus) def tf_calc(target_word, target_chapter): corpus = read_data(data=False) # corpus sum_word_in_chapter = 0 n_target_word_in_chapter = len(corpus[target_chapter]) for term in corpus[target_chapter]: if term == target_word: sum_word_in_chapter += 1 return sum_word_in_chapter / n_target_word_in_chapter def tfidf(target_word, target_chapter): tf = tf_calc(target_word, target_chapter) idf = 1 / df_calc(target_word) return math.log(1 + tf) * math.log(idf) def calc_all_tfidf(target_chapter): tfidf_dict = {} corp = read_data(data=False)[target_chapter] for w in corp: tfidf_dict[w] = tfidf(w, target_chapter) res = dict(Counter(tfidf_dict).most_common(5)) ds = {k: v for k, v in sorted(res.items(), key=lambda item: item[1])} return list(ds.keys())[4:1:-1] (edited)
0
|
19.09.2021, 20:52 | |
Ответы с готовыми решениями:
13
Оптимизация кода Оптимизация кода Оптимизация кода Оптимизация кода |
SkyJump
|
||||||
19.09.2021, 21:22 | 2 | |||||
Используйте теги оформления кода:
И конкретизируйте свой вопрос: опишите, что должен делать код.
2
|
1 / 1 / 0
Регистрация: 04.11.2018
Сообщений: 23
|
||||||
19.09.2021, 21:42 [ТС] | 3 | |||||
0
|
19.09.2021, 21:46 | 4 |
Это не аргумент.
Покажи результат бенчмарков. Нормальных, а не через time.time. Покажи данные на которых выполняется бенчмарк. P.S.И сразу скажи откуда скопипастил код, чтобы у нас не было иллюзий.
0
|
1 / 1 / 0
Регистрация: 04.11.2018
Сообщений: 23
|
|
19.09.2021, 21:51 [ТС] | 5 |
Задача выглядит так: напишите код, который выведет на экран через пробел три слова, имеющие самое высокое значение tf*idf в заданной главе target_chapter в порядке убывания tf*idf.
Дело в том, что проверка данного кода выполняется грейдером на платформе SkillFactory, вот этот самый грейдер выдает ошибку: Code error: Exception('Timed out!',) в PyCharm выдается правильный (предложенный) ответ, как ускорить не могу разобраться
0
|
1103 / 689 / 306
Регистрация: 05.09.2021
Сообщений: 1,197
|
|
19.09.2021, 21:53 | 6 |
0
|
1 / 1 / 0
Регистрация: 04.11.2018
Сообщений: 23
|
|
19.09.2021, 22:04 [ТС] | 7 |
1 мин 20
0
|
1488 / 1415 / 240
Регистрация: 19.02.2010
Сообщений: 3,921
|
|
19.09.2021, 23:12 | 8 |
Независимо от ЯП, достаточно очевидное для всех умеющих программировать правило гласит: нефиг внутри цикла раз за разом (т.е. повторно) делать то, что не зависит от значения переменной цикла и/или от остальных изменяемых в цикле значений (если такие будут).
Не надо и внутри последовательного блока операторов дублировать вычисления. Этому приёму во всех школах учат, в средних классах (на алгебре, когда учат выносить общий множитель за скобки). Конкретно - в calc_all_tfidf() на каждой (!) итерации тамошнего цикла ты дважды (!) открываешь-читаешь-раскладываешь на слова файл. Пройдись по дереву вызовов функций - увидишь.
1
|
1 / 1 / 0
Регистрация: 04.11.2018
Сообщений: 23
|
|
19.09.2021, 23:45 [ТС] | 9 |
Подскажи, как исправить
0
|
Am I evil? Yes, I am!
17593 / 10342 / 2826
Регистрация: 21.10.2017
Сообщений: 22,417
|
|
19.09.2021, 23:50 | 10 |
0
|
1 / 1 / 0
Регистрация: 04.11.2018
Сообщений: 23
|
|
19.09.2021, 23:59 [ТС] | 11 |
не понятно как реализовать, не все я понимаю в программировании, иногда кажется, что ни чего. Подскажешь?
0
|
Просто Лис
|
||||||
20.09.2021, 07:49 | 12 | |||||
Сообщение было отмечено STV_AL как решение
РешениеНе по теме: переменная df меня чуть не отпугнула и почти заставила закрыть вкладку Ну во-первых закешируй текст.
2
|
1 / 1 / 0
Регистрация: 04.11.2018
Сообщений: 23
|
|
20.09.2021, 20:04 [ТС] | 13 |
Лис, ты крут!!! Спасибо!!!
0
|
Am I evil? Yes, I am!
17593 / 10342 / 2826
Регистрация: 21.10.2017
Сообщений: 22,417
|
|
20.09.2021, 20:06 | 14 |
0
|
20.09.2021, 20:06 | |
20.09.2021, 20:06 | |
Помогаю со студенческими работами здесь
14
Оптимизация кода Оптимизация скорости кода Оптимизация кода по времени Python. Оптимизация кода Оптимизация небольшого кода Оптимизация кода | requests Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |