Здравствуйте! Подскажите, пожалуйста, какой есть выход из сложившейся ситуации... Есть две файла. В одном прописаны требования заказчика (1500 строк с наименованиями медицинских услуг). Во втором файле (прейскурант), прописаны 5000 строк с наименованиями услуг, стоимостью... Из-за того, что услуги не совпадают по написанию (где-то запятая не там стоит. где-то пробел лишний, скобка и т.д.) протянуть формулой не получается... Сидеть в ручную перебирать все не вариант (долго и муторно). Может есть способ по ключевым словам вытянуть нужную информацию, каким-то расставить наиболее похожие значения из прейскуранта к требованию заказчика?
Здравствуйте! Подскажите, пожалуйста, какой есть выход из сложившейся ситуации... Есть две файла. В одном прописаны требования заказчика (1500 строк с наименованиями медицинских услуг). Во втором файле (прейскурант), прописаны 5000 строк с наименованиями услуг, стоимостью... Из-за того, что услуги не совпадают по написанию (где-то запятая не там стоит. где-то пробел лишний, скобка и т.д.) протянуть формулой не получается... Сидеть в ручную перебирать все не вариант (долго и муторно). Может есть способ по ключевым словам вытянуть нужную информацию, каким-то расставить наиболее похожие значения из прейскуранта к требованию заказчика?Tso
Tso, приведите к единому виду функцией ПОДСТАВИТЬ, удалив все сомнительные знаки, например, пробелы и скобки. Если цены справочника в колонке F1:F1500, названия в колонке E1:E1500, и подставляем в ячейку F6 (название в C6) , а удаляем только пробелы и скобки, то поможет формула массива ( ввод через Ctrl+Shift+Enter) :
Перед диапазонами справочника надо подставить название файла и листа. У Вас цепочка "ПОДСТАВИТЬ(" будет длиннее, (придётся включить все удаляемые знаки)
Tso, приведите к единому виду функцией ПОДСТАВИТЬ, удалив все сомнительные знаки, например, пробелы и скобки. Если цены справочника в колонке F1:F1500, названия в колонке E1:E1500, и подставляем в ячейку F6 (название в C6) , а удаляем только пробелы и скобки, то поможет формула массива ( ввод через Ctrl+Shift+Enter) :
Перед диапазонами справочника надо подставить название файла и листа. У Вас цепочка "ПОДСТАВИТЬ(" будет длиннее, (придётся включить все удаляемые знаки)scriptapplications
Сообщение отредактировал scriptapplications - Понедельник, 03.10.2022, 18:00
У Вас цепочка "ПОДСТАВИТЬ(" будет длиннее, (придётся включить все удаляемые знаки)
Спасибо. С помощью этой формулы 10% от общего количество смог вывести. Подскажите, а если текст разный. К примеру, одно слово из предложения отличается или они немного в другом порядке... Возможно ли каким-то образом соотнести их по схожести? Я так понимаю, при всем разнообразии функций экселя, это невозможно, и надо в ручную обрабатывать. И вообще какими инструментами (питон, скюэль...) решаются подобного рода задачи?
У Вас цепочка "ПОДСТАВИТЬ(" будет длиннее, (придётся включить все удаляемые знаки)
Спасибо. С помощью этой формулы 10% от общего количество смог вывести. Подскажите, а если текст разный. К примеру, одно слово из предложения отличается или они немного в другом порядке... Возможно ли каким-то образом соотнести их по схожести? Я так понимаю, при всем разнообразии функций экселя, это невозможно, и надо в ручную обрабатывать. И вообще какими инструментами (питон, скюэль...) решаются подобного рода задачи?Tso
Это уже иной уровень!! С ходу не разберусь, конечно, но постараюсь научиться этим пользоваться. По описанию очень крутая штука, как раз то, что искал. Спасибо большое. :prof:
Это уже иной уровень!! С ходу не разберусь, конечно, но постараюсь научиться этим пользоваться. По описанию очень крутая штука, как раз то, что искал. Спасибо большое. :prof:Tso
Tso, жирный минус в том, что Вы не дали нормальный файл для экспериментов (эксельный файл примера с реальными данными). Тут много любознательных человеков, которые в свободную минуту с удовольствием бы поковырялись с Вашей темой. Глядишь, что-нибудь полезное и нарисовалось бы. Ну, а с фотографиями ковыряться - сами понимаете - чо с ними ковыряться?
И, кстати, 1500 строк, да и 5000 - не те объёмы для разбора, которые могут испугать настоящего рыцаря формул и макросов Во всяком случае, на понимание и более/менее эффективное применение нечеткого поиска уйдёт не меньше. Вот, к примеру, узнали Вы, что совпадение двух строк - 43%. Ваши дальнейшие действия?
"Если бы я был директором" (если бы передо мной стояла подобная задача), я бы сделал примерно следующие шаги:
1. Пронумеровал все строки в отдельном столбце - чтобы всегда можно было "вернуться", потому что я собираюсь активно применять вручную полную или частичную сортировку массивов.
2. Оставил бы в текстах только алфавитно-цифровые символы и пробелы. И удалил бы всё остальное (знаки препинания и спецсимволы) - в этом смысле scriptapplications абсолютно прав. И после этого сжал бы пробелы соответствующей функцией. И, наверное, перевел бы все символы в один регистр для единообразия, например, в строчный (маленькие буквы).
3. Разделил бы тексты по словам с помощью команды "Текст по столбцам", не упуская из виду номер строки из п.1.
4. Из получившегося материала сделал бы плоскую таблицу с двумя колонками: "Номер строки" и "Слово". На Форуме есть упоминания про "Редизайнер таблиц" - можно с его помощью, либо в Гугл таблицах есть подходящая для этой операции функция FLATTEN.
5. Дальше надо будет из значений колонки "Слово" выбрать уникальные, отсортировать их по алфавиту и справа от них создать колонку "Именительный в ед.числе". В нее надо будет поначалу скопировать значения из колонки "Слово", а затем вручную пройтись по ней, редактируя, приводя все слова в именительный падеж в единственном числе. Слова в разных падежах выстроятся рядом, поэтому достаточно будет отредактировать первое из них, а потом скопировать в нижерасположенные родственные строки.
6. Дальше надо будет "закинуть обратно" значения из отредактированной колонки "Именительный в ед.числе" в колонку "Слово" из п.4, заменив имеющиеся там слова через связь по колонке "Слово" п.п. 5 и 4.
7. После этого сортируем таблицу п.4 по возрастанию по колонкам "Номер строки" (1-й ключ сортировки) и "Слово" (2-й ключ).
8. Далее "разворачиваем" все слова одного номера по ячейкам строки вправо, т.е. придаём таблице вид как после применения команды "Текст по столбцам". Но теперь у нас все слова в именительном падеже единственного числа и внутри строки отсортированы по алфавиту.
9. Сцепляем (конкатенируем) все слова одной строки через пробел в одну ячейку. И таки теперь у нас есть кое-что, что можно эффективно посравнивать! (фильтрация и сортировка в помощь).
[p.s.]"Именительный в ед.числе" - ну, и мужской род, конечно, имеется в виду. Т.е. любое слово в этой колонке приводим к виду: Именительный падеж, Единственное число, Мужской род (если возможно, например, для прилагательных; соблюдая здравый смысл; слово "жена", конечно, не надо приводить к мужскому роду).
Tso, жирный минус в том, что Вы не дали нормальный файл для экспериментов (эксельный файл примера с реальными данными). Тут много любознательных человеков, которые в свободную минуту с удовольствием бы поковырялись с Вашей темой. Глядишь, что-нибудь полезное и нарисовалось бы. Ну, а с фотографиями ковыряться - сами понимаете - чо с ними ковыряться?
И, кстати, 1500 строк, да и 5000 - не те объёмы для разбора, которые могут испугать настоящего рыцаря формул и макросов Во всяком случае, на понимание и более/менее эффективное применение нечеткого поиска уйдёт не меньше. Вот, к примеру, узнали Вы, что совпадение двух строк - 43%. Ваши дальнейшие действия?
"Если бы я был директором" (если бы передо мной стояла подобная задача), я бы сделал примерно следующие шаги:
1. Пронумеровал все строки в отдельном столбце - чтобы всегда можно было "вернуться", потому что я собираюсь активно применять вручную полную или частичную сортировку массивов.
2. Оставил бы в текстах только алфавитно-цифровые символы и пробелы. И удалил бы всё остальное (знаки препинания и спецсимволы) - в этом смысле scriptapplications абсолютно прав. И после этого сжал бы пробелы соответствующей функцией. И, наверное, перевел бы все символы в один регистр для единообразия, например, в строчный (маленькие буквы).
3. Разделил бы тексты по словам с помощью команды "Текст по столбцам", не упуская из виду номер строки из п.1.
4. Из получившегося материала сделал бы плоскую таблицу с двумя колонками: "Номер строки" и "Слово". На Форуме есть упоминания про "Редизайнер таблиц" - можно с его помощью, либо в Гугл таблицах есть подходящая для этой операции функция FLATTEN.
5. Дальше надо будет из значений колонки "Слово" выбрать уникальные, отсортировать их по алфавиту и справа от них создать колонку "Именительный в ед.числе". В нее надо будет поначалу скопировать значения из колонки "Слово", а затем вручную пройтись по ней, редактируя, приводя все слова в именительный падеж в единственном числе. Слова в разных падежах выстроятся рядом, поэтому достаточно будет отредактировать первое из них, а потом скопировать в нижерасположенные родственные строки.
6. Дальше надо будет "закинуть обратно" значения из отредактированной колонки "Именительный в ед.числе" в колонку "Слово" из п.4, заменив имеющиеся там слова через связь по колонке "Слово" п.п. 5 и 4.
7. После этого сортируем таблицу п.4 по возрастанию по колонкам "Номер строки" (1-й ключ сортировки) и "Слово" (2-й ключ).
8. Далее "разворачиваем" все слова одного номера по ячейкам строки вправо, т.е. придаём таблице вид как после применения команды "Текст по столбцам". Но теперь у нас все слова в именительном падеже единственного числа и внутри строки отсортированы по алфавиту.
9. Сцепляем (конкатенируем) все слова одной строки через пробел в одну ячейку. И таки теперь у нас есть кое-что, что можно эффективно посравнивать! (фильтрация и сортировка в помощь).
[p.s.]"Именительный в ед.числе" - ну, и мужской род, конечно, имеется в виду. Т.е. любое слово в этой колонке приводим к виду: Именительный падеж, Единственное число, Мужской род (если возможно, например, для прилагательных; соблюдая здравый смысл; слово "жена", конечно, не надо приводить к мужскому роду).Gustav