Найти тему
Nuances of programming

Как оптимизировать набор текста с помощью Python

Оглавление

Источник: Nuances of Programming

Набор текста давно превратился в неотъемлемую часть нашей повседневной рутины. Поэтому умение оптимизировать процесс ввода текста с клавиатуры приносит огромную пользу тем, кто большую часть своего рабочего времени проводит за компьютером.

В статье я расскажу, как организован этот процесс у меня, и поделюсь скриптами и пакетами, которые использую для фиксации и визуализации своей производительности.

Зачем оптимизировать процесс набора текста?

Я инженер по машинному обучению, а значит  —  провожу большую часть рабочего времени за компьютером, занимаясь созданием моделей и написанием кода. Три года назад, изучая в магистратуре применение генеративно-состязательных сетей, я решил повысить продуктивность и немного поработать над своими навыками набора текста.

Научился печатать вслепую и уже через три месяца скорость печати у меня возросла с 60 до 95 слов в минуту (сегодня моя средняя скорость составляет около 105 слов в минуту). Это производительность при обычном вводе текста с клавиатуры. Скорость написания кода увеличилась с 35 до примерно 55–60 слов в минуту.

Такой прогресс здорово пригодился в работе и помог в моем хобби (в написании текстов). Думается, что нам всем будет полезно немного попрактиковаться в наборе текста.

Оптимизация набора текста

Перейдем сразу к коду! Весь процесс набора текста у меня организован очень просто и занимает около 5–10 минут в день.

Для того, чтобы практиковаться в наборе текста в терминале, я использую mltype. Это замечательный инструмент CLI (интерфейса командной строки): очень гибкий, с открытым исходным кодом и довольно аккуратный!

Для автоматизации процесса набора текста перейдем ко скрипту:

1. Импортируем зависимости

import os
import pathlib
import random
import pandas as pd
from datetime import datetime
import sys
import plotly.express as px
import plotly.graph_objs as go

2. Запускаем процесс набора текста с помощью mltype

def typePractice(typingDataset): files = list(typingDataset.iterdir())
file = random.choice(files)
with open(file, "r") as f:
numberOfLines = len(f.readlines()) - 1
if numberOfLines<=1:
numberOfLines=2 elif numberOfLines>10:
numberOfLines=10
os.system(f"mlt file --n-lines {numberOfLines} {file}")


typingDatasetFolder = "path/to/your/typingDataset" typingDataset = pathlib.Path(typingDatasetFolder)
typingPerformance = "path/to/your/typingPerformance.csv" df = pd.read_csv(typingPerformance)
typePractice(typingDataset)

Здесь мы получаем все файлы Python в папке typingDataset, из которой выбираем случайный файл и отдаем его в вызов инструмента интерфейса командной строки mltype. Задаем количество строк этого файла параметром --n-lines, вот и все. Интерфейс для набора текста выглядит следующим образом:

-2

Довольно минималистичный и работает отлично.

3. Фиксируем производительность при вводе текста и обновляем csv-файл, включив в него эту производительность

def updateTypingPerformance(df,datedPerformance, typingDfPath="path/to/typingPerformance.csv"): df.loc[len(df)] = datedPerformance
df.to_csv(typingDfPath, index=False)
return df

cont = "y" while cont=="y":
performance = []
typePractice(typingDataset)
date = str(datetime.now())
wpm = input("What was the wpm?")

acc = input("Waht was the accuracy?")

performance.append(date)
performance.append(wpm)
performance.append(acc)

updateTypingPerformance(df,performance)

cont = input("Continue typing?")

Здесь мы получаем текущее время и фиксируем производительность с помощью встроенного метода Python input() (мне хотелось автоматизировать эту часть, но не удалось найти простой способ сделать это непосредственно из mltype).

Задействуем цикл while для бесконечного продолжения: так csv-файл с данными о производительности будет каждый раз обновляться.

4. Отображаем на графике

import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
from matplotlib import dates as mdates
from matplotlib import ticker


def plotTyping(typingDf): typingDf["wpm"] = pd.to_numeric(typingDf["wpm"])
typingDf["accuracy"] = pd.to_numeric(typingDf["accuracy"])
typingDf["date"] = pd.to_datetime(typingDf["date"])
wpmAcc = typingDf.groupby("date")["wpm", "accuracy"].mean()
wpm = wpmAcc["wpm"]
acc = wpmAcc["accuracy"]
fig, ax = plt.subplots(figsize=(15,7))
ax.plot(wpm,label="wpm trend",color="red")
ax.plot(acc, label="accuracy", color="green")
# wpmAcc["wpm"].plot(label="wpm trend",color="red") # wpmAcc["accuracy"].plot(label="accuracy",color="green") ax.set_xticks(df["date"])
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))
ax.xaxis.set_minor_formatter(mdates.DateFormatter("%Y-%m-%d"))
plt.gcf().autofmt_xdate()
ax.xaxis.set_major_locator(ticker.MultipleLocator(5))
plt.xticks(rotation=45)
plt.legend()
plt.show()

if len(sys.argv)>1:
if sys.argv[1]=="plot":
plotTyping(df)

-3

Здесь мы получаем простой график для текущей производительности при наборе текста. Зеленым цветом обозначены слова в минуту, а красным  —  процент точности. Как видите из графика, точность была в среднем выше 90 %, а скорость набора текста при написании кода  —  от 50 до 60 слов в минуту.

Заключение

Освоить быстрый набор текста  —  это круто, а написать код для автоматизации этого процесса  —  еще круче. Надеюсь, что статья оказалась полезной.

Спасибо за внимание!

Читайте также:

Читайте нас в TelegramVK

Перевод статьи Lucas Soares: Optimized Typing with Python