@CreativeStory

Как сделать сопоставление данных?

День добрый!
Сейчас решаю задачу по сопоставлению(сличению) данных и хотел бы уточнить, верное ли решение или нет?

1) На входе есть строка с названиями лекарства, типа:
$dtug = "НУРОФЕН 12+ ТАБ. П/О 200МГ №12 РЕКИТТ БЕНКИЗЕР ХЕЛСКЭР ИНТЕР";

2) Есть json с объектами лекарств, типа:
{
      "drugId": 69615,
      "drugName": "Нурофен плюс тб плен/об бл N12x1 Рекитт Бенкизер Хелскэр Инт ВБР",
      "checkDate": "2015-10-09T16:36:03.505+03:00",
      "invalid": 0
    },
    {
      "drugId": 69624,
      "drugName": "Нурофен форте тб п/о 400мг бл N12x1 Рекитт Бенкизер Хелскэр Инт ВБР",
      "checkDate": "2019-05-14T14:54:46.32+03:00",
      "invalid": 0
    },
    {
      "drugId": 73359,
      "drugName": "Нурофен для детей сусп внутрь апельс вкус 100мг/5мл фл с доз шприц 100мл N1x1 Рекитт Бенкизер Хелскэр ВБР",
      "checkDate": "2018-03-12T15:01:28.192+03:00",
      "invalid": 0
    },
    {
      "drugId": 74546,
      "drugName": "Нурофен для детей сусп внутрь клубн вкус 100мг/5мл фл 100мл N1x1 Рекитт Бенкизер Хелскэр Инт ВБР",
      "checkDate": "2009-10-14T00:00:00+04:00",
      "invalid": 0
   }


Нужно начальную строку сопоставить с json и найти более точное совпадение(по примеру это drugId: 69615).

Как я делаю сейчас,
1) входящую строку разбиваю на массив.
2) перебираю json и каждое название лекарства преобразую в массив
3) сравниваю перебором массив входящей строки с массивом первого объекта json, потом второго и т.д..
4) при сравнении массивов из пункта 3, формирую новый массив и записываю туда процент и id лекарства из json, типа:

$cpr = [
    [
      '%' => 35,
      'drugID' => 1111
    ],
    [
      '%' => 75,
      'drugID' => 69615
    ],
];


Терзают меня постоянно сомнения в правильности данного решения.
Возможно есть более элегантный и быстрый способ сопоставления?

Буду признателен!
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 2
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
а что у товара нет артикула/barcode/sku?

вообще тебе нужно хранить данные в верхнем регистре в виде массива

и тебе нужно постепенно преобразовывать базу в набор аттрибутов: бренди/производители, названия, дозировки, типы упаковки и т.д. делать первоначальный отсев по ним
можешь еще попобовать levenshtein()/similar_text() только возможно придется перевести названия в транслит
Ответ написан
@rPman
Все данные у тебя уже агрегированные и не подходящие для работы и сравнения (точнее любые инструменты без семантики будут выдавать ошибки)

Попробуй найти нормальную базу лекарственных средств, с наименованиями производителями и прочим, а уже на ее основе анализируй строчку

https://esklp.egisz.rosminzdrav.ru/esklp?smnn_date...
https://portal.eaeunion.org/ru-ru/_layouts/15/Cit....
и т.п. это первое что гугл выдал
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы