Как стать автором
Обновить

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

Как расслабиться инженеру на работе при помощи Python?

Мой вариант: запрограммировать массажное кресло.

Шикарный вариант!) А рядом бы ещё пшеничный смузи

пшеничный смузи

Виноградный тоже неплохо ;)

Кейс прекрасный. Ад в номенклатурных справочниках - постоянная проблема. Как-то на одном заводе (на самом деле почти на каждом так) разбирались с неликвидами. А их так процентов 30 запасов, а в деньгах на 1М$ было. Вот то же самое, ага. Так что этот кейс - это "прям деньги". Респект.

Хотя есть небольшая индульгенция у тех, кто "косячит" - они обязаны вводить данные в базу в строгом соответствии с первичным документами. И если ДТ в них указано как "солярка", то в базе данных нужна сшивка-интерпретатор, сохраняющая и бумажные, и "нормализованные" наименования.

Решить ряд идейных проблем кода думаю можно было бы, именно, что подключив к его работе ИИ (промт-инжиниринг), сделав "нейросотрудника", верно интерпретирующего не только части речи, но и общеупотребительные формулировки, учитывая значимость конкретного слова-ключа для идентификации.

Например, то же ДТ, ставшее ТД. Тут не хватает агрегирующего классификатора всех видов топлива. Тогда уровнем ниже был бы дизель(ное), бензин, итд. А на третьем уровне его марка и/или определяющее свойство. На четвертом ГОСТ, ТУ и пр. Т.е. нужно не просто исправить морфологию внутри фразы, но и сделать ее декомпозицию. А потом, если нужно, снова композицию в корректном виде. Но, как правило для решения конкретной бизнес-задачи достаточно второго уровня.

Спасибо!)
Понимаю и полностью согласен, я прям прочувствовал всю боль в "Ад в номенклатурных справочниках - постоянная проблема".

Не лишний раз упомянуть автора библиотеки pymorphy2 от @kmike

У меня есть замечание и предложение:

  • Библиотека из вашего кода всё же называется pymorphy2, а Pymorph - это что-то древнее и давно не поддерживаемое, вы явно используете не эту библиотеку. Хорошо бы привести текст в соответствие. И более того, библиотека pymorphy2 уже тоже несколько лет как заброшена, вместо неё теперь pymorphy3, рекомендуется использовать её.

  • Если у вас часто встречаются одинаковые слова, то советую попробовать вынести morph.parse(word)[0] в отдельную функцию, на которую повесить кеширующий декоратор. Для больших текстов у меня это давало ускорение раз в 10. Но тут сильно зависит от повторяемости слов. Что-то такое:

from functools import lru_cache

@lru_cache
def morph(word):
    return morph.parse(word)[0]

Вернее, вы, кажется, используете только .tag.POS от этого, имеет смысл сразу его и возвращать и кешировать тогда:

@lru_cache
def get_pos(word):
    return morph.parse(word)[0].tag.POS

...
                        pos = get_pos(word)
                        if pos == "PRED":

Хорошее замечание по поводу библиотеки. Да, я использую pymorphy3, это стоит упомянуть.
Как я понял, проект pymorphy2 был заброшен автором ещё в 20-ом году, на github это обсуждали.

Да, декоратор должен дать прирост в скорости

Приятно получить такую критику, в которой все по факту. Спасибо!)

Не нужен там декоратор, просто уберите повторения for word in words:

Только что проверил, как и ожидалось, декоратор дал прирост, но совсем немного в 2-3 секунды!) Из выгрузки, которая описывалась в статье.
Думаю результат будет более заметным, если выгрузка будет объемнее.

А как фильтрануть "лампа гОлАгеговая". Или "ОсСциЛограф"?)))

К сожалению, от опечаток никто не застрахован, особенно инженера на производстве, когда все делается на скорую руку.
Библиотека pymorph3 слова с ошибками: "голагеговая" и "оссцилограф" определяет как надо - прилагательное и существительное соответственно.

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

Если взять к примеру опечатку из выгрузки "Газы реакции/ котловая вода", то именно слово вместе со слэшем "реакции/" pymorph3 не сможет определить и выдаст результат, как UNKN, то есть токен не удалось распознать.
В этом случае перебор будет отличаться от входящего значения, и при сравнении измененных позиций сразу станет понятно (сразу скажу таких случаев было немного)

Лично я просматривал измененные позиции, что позволило вдобавок ещё навести красоту и отредактировать рабочую среду.

К сожалению, от опечаток никто не застрахован, особенно инженера на производстве, когда все делается на скорую руку.

Используя словари и ваши наработки на этапе ввода можно получить хорошую страховку.

Скорость работы алгоритма составила 29 секунд.

Давно скорость измеряется в секундах? Тогда уж "время работы алгоритма — 29 секунд."

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории