-
Notifications
You must be signed in to change notification settings - Fork 0
/
single_loader.php
192 lines (183 loc) · 11.1 KB
/
single_loader.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
<?php
$name = $argv[1] ?? '';
$clearName = clearName($name);
$type = getFormType($clearName);
$dosage = getDosage($clearName);
$releaseForm = getForm($clearName);
$shortName = getShortName($clearName, array_filter([$type, $dosage, $releaseForm]));
echo "name => {$name}\n";
echo "clearName => {$clearName}\n";
echo "type => {$type}\n";
echo "dosage => {$dosage}\n";
echo "releaseForm => {$releaseForm}\n";
echo "shortName => {$shortName}\n";
function clearName(string $name): string
{
$replaces = [
["/\"/ui" => ""],
["/\+/ui" => " плюс "],
["/(\d+)\s*\bМЕ\b/u" => "$1 ед. "],
["/(г|л)\/(д|доз|дозу|доза)\b\.?/ui" => "$1 на дозу "],
["/\/\s*([\d\.\,]*)\s*(л|мл|г|грамм|мг|мкг)/ui" => " на $1 $2 "],
["/(\d)(нг|мкг|мг|кг|г|л|мл|доз)\b/ui" => "$1 $2"],
["/\bг\b/ui" => "грамм"],
["/\bнг\b/ui" => "нанограмм"],
["/\bмкг\b/ui" => "микрограмм"],
["/\bмг\b/ui" => "миллиграмм"],
["/\bкг\b/ui" => "килограмм"],
["/\bипид\b/ui" => "липид"],
["/(\d+,\d+) (нано|микро|милли|кило)?грамм\b/ui" => "$1_$2грамма "],
["/((?:[02-9]|\b)[2-4]) (нано|микро|милли|кило)?грамм\b/ui" => "$1_$2грамма "],
["/(\d+) (нано|микро|милли|кило)?грамм\b/ui" => "$1 $2грамм "],
["/\bл\b/ui" => "литр"],
["/\bмл\b/ui" => "миллилитр"],
["/(\d+,\d+) (милли)?литр\b/ui" => "$1_$2литра "],
["/((?:[02-9]|\b)[2-4]) (милли)?литр\b/ui" => "$1_$2литра "],
["/((?:[02-9]|\b)1) (милли)?литр\b/ui" => "$1_$2литр "],
["/(\d+) (милли)?литр\b/ui" => "$1 $2литров "],
["/(\d)_/" => "$1 "],
["/(\d*[2-4])\s*ед\b\.?/ui" => " $1 единицы "],
["/(\d*[02-9][1]\b|\b1)\s*ед\b\.?/ui" => ", $1 единица "],
["/(\d+|\b)ед\b\.?/ui" => " $1 единиц "],
["/(\d+)([а-яё]+)/ui" => " $1 $2 "],
["/№\s*((?:\d*[02-9])*[2-4])\b/ui" => ", $1 штуки в упаковке, "],
["/№\s*(\d*[02-9][1]\b|\b1\b)/ui" => ", $1 штука в упаковке, "],
["/№\s*(\d+)/ui" => ", $1 штук в упаковке, "],
["/\(\d*\s*табл?\b\.?\)/ui" => ""],
["/((?:[02-9]|\b)[2-4])\s*табл?\.?(\s*(дисперг|дисп|подъяз)\b\.?)?/ui" => " $1_таблетки "],
["/((?:[02-9]|\b)1)\s*табл?\.?(\s*(дисперг|дисп|подъяз)\b\.?)?/ui" => " $1_таблетка "],
["/(\d+)\s*табл?\.?(\s*(дисперг|дисп|подъяз)\b\.?)?/ui" => "$1_таблеток "],
["/\bтабл?\.?(\s*(дисперг|дисп|подъяз|шип[а-яё]*)\b\.?)?/ui" => " таблетки "],
["/\b(капс\b|капсулы)\.?/ui" => " капсулы "],
["/\b(кап(л?)\b\.?|капли)(\s*(глазные|глаз\.|гл\.))*/ui" => " капли "],
["/\b(гранул|гран)\b\.?/ui" => " гранулы "],
["/\bтест\-пол\b\.?/ui" => " тест-полоски "],
["/\bДозатор (инсул|инс)\b\.?/ui" => "Дозатор инсулиновый "],
["/\b(однор|одноразовый)\b\.?\s*(инсул|инс)\b\.?/ui" => ""],
["/\b(аэрозоль|аэрозол|аэроз|аэр)\b\.?\s*(д\.?\/инг\b\.?)?/ui" => " аэрозоль "],
["/\b(лиоф-т|лиоф)\b\.?/ui" => " лиофилизат "],
["/\b(дет|детский)\b\.?/ui" => " детский "],
["/\b(п\/о)\b\.?/ui" => ""],
["/\(*витамин\s*[A-Za-zА-Яа-я]\)*/ui" => ""],
["/\b(д\/|д\/я|для )\s*\b(инфуз[а-яё]*|инф|рассас|расс)\b\.?/ui" => ""],
["/\b(д\/|для )\s*\b(пр\/?|при[её]м[а-яё]*)\b\.?\s*\b(внутрь|внутр|внут|вн)\b\.?(\s+и\b\s+(ингаляций|ингал|инг).?)?/ui" => ""],
["/\b(д\.?\/|д\/я|для\b)?\s*(приготов|пригот|приг|пр|риг)?\.?\s*\b(р-ра|раст\b\.?|раств\b\.?|внут\b\.?|раствора|(пероральной\s*)?сусп[а-яё]*\.?)(\s*(в\/в и в\/м введ\.|в\/в))?(\s*\/?(инфуз[а-яё]*|инф)\b\.?)?/ui" => ""],
["/\b(д\.?\/\s?|\/|для )*(в\/м|в\/в|в\/м и п\/к|п\/к\b|подкожного|подкожн|подкож|подк|внутр)(\.|\s*)((введения|введен|введ|вв|вл)\b\.?)?/ui" => ""],
["/\b(д\.?\/|для\b)\s*((мест\.?\s+и\s+)?(нар\b\.?|наруж\b\.?|наружнего))\s*\b(пр-я|пр\.?|применения\.?)?/ui" => ""],
["/\b(д\.?\/|для\b)\s*(мон|монитор|мониторинга)\b\.?\s*\b(ур|уровня)\b\.?\s*(глюк|глюкоз[а-я]?)\b\.?/ui" => ""],
["/\b(флакон|флак|фл)\b\.?(\s*с\s+(раст|раств|раствор|растворит)\b\.?)?/ui" => ""],
["/\b(флаконы?|флакон|флак|фл)\b\.?/ui" => ""],
["/\bр-р\b\.?(\/инг\.?)*/ui" => " раствор "],
["/\b(пор|порош)\b\.?/ui" => " порошок "],
["/\b(сусп)\b\.?/ui" => " суспензия "],
["/\b(спр[еэ]й)\s+(назальн[а-яё]*|назал|наз)\b\.?/ui" => " спрей назальный "],
["/\b(конц-т|конц)\b\.?/ui" => " концентрат "],
["/\bд\/(ингал|инг|ин).*(\b\.|,|$|\b)/uiU" => ""],
["/\b(инжекторов)/uiU" => ""],
["/\bд\/приг.*(\.|,|$)/uiU" => ""],
["/\b(п\/|покр\.)\s*киш.*(\.|,|$)/uiU" => ""],
["/\b(пл|плен|пленоч|пленочн|пленочной)\b\.?/ui" => ""],
["/\b(п|покр|покрыт|покрыты|покрытые)\b\.?/ui" => ""],
["/\b(о|об|обол|оболочкой|оболочка)\b\.?/ui" => ""],
["/(\bс\b\s+)?\b(модифиц[а-яё]*|модиф|мод)\b\.?/ui" => ""],
["/(\bс\b\s+)?\b(пролонг[а-яё]*|пролон|прол)\b\.?/ui" => ""],
["/\b(д-я|действ[а-яё]*|дейст)\b\.?/ui" => ""],
["/\b(высвобож[а-яё]*|высвоб|высв)\b\.?/ui" => ""],
["/\bдля\b(.+\.|,|$)/uiU" => ""],
["/(\d+(,\d+)?)\s*доз\b\.?/ui" => "$1_доз"],
["/\b(дозированный|дозирован|дозиров|дозир|доз)\b\.?/ui" => ""],
["/(\d+(,\d+)?)_/ui" => "$1 "],
["/\b(кишечнорас[а-яё]*|киш\.?\/рас[а-яё]*)\b\.?/ui" => ""],
["/\b(жевательн|жевател|жеват|жев)\b\.?/ui" => ""],
["/\bB(\d+)\b/" => "Б$1"],
["/\bD(\d+)\b/" => "Д$1"],
["/\bC(\d+)\b/" => "Ц$1"],
["/((?:[02-9]|\b)[2-4])\s*МЕ\b/ui" => " $1 единицы "],
["/((?:[02-9]|\b)1)\s*МЕ\b/ui" => " $1 единица "],
["/(\d+)\s*МЕ\b/ui" => "$1 единиц "],
["/\sМЕ\s/ui" => " единиц "],
["/((?:[02-9]|\b)[2-4])\s*млнМЕ\b/ui" => " $1 миллиона единиц "],
["/((?:[02-9]|\b)1)\s*млнМЕ\b/ui" => " $1 миллион единиц "],
["/(\d+)\s*млнМЕ\b/ui" => "$1 миллионов единиц "],
["/\sмлнМЕ\s/ui" => " миллионов единиц "],
["/((?:[02-9]|\b)[2-4])\s*тысМЕ\b/ui" => " $1 тысячи единиц "],
["/((?:[02-9]|\b)1)\s*тысМЕ\b/ui" => " $1 тысяча единиц "],
["/(\d+)\s*тысМЕ\b/ui" => "$1 тысяч единиц "],
["/\sтысМЕ\s/ui" => " тысяч единиц "],
["/\bКЕД\b/ui" => " единиц коагуляции "],
["/\-?(\d+(,\d+)?)\s*(нано|микро|милли|кило)?грамм\s+пак\b\.?/ui" => ", $1 $2грамм в пакете "],
["/\bсупп\.?\s*рект\b\.?/ui" => " суппозитории ректальные "],
["/\bрект\b\.\s*микроклиз\b\.?/ui" => ""],
["/карт.в руч.БиоматикПен2/ui" => ""],
["/плюс\s*р\-ль/ui" => ""],
["/\bсист\. Flash мон\. глюк\./ui" => ""],
["/\bшпр\b\.?\s*\-?\s*(тюб|руч)\b\.?/ui" => ""],
["/\bмикросф\b\.?/ui" => ""],
["/\bпомп\b\.?/ui" => ""],
["/\bгл\b\.?/ui" => ""],
["/\(?\bшприц в шприц-ручке\b\)?/ui" => ""],
["/\/?\b(пач|пачка)\b\.?(картон|карт|картонная)\b\.?/ui" => ""],
["/(\(.+)?\bв компл\.р\-рит\.(.+\))?/ui" => ""],
["/\bустр\-во\b\.?/ui" => " устройство "],
["/\bII\b/ui" => "2"],
["/\s+/ui" => " "],
["/\(+/ui" => "("],
["/\)+/ui" => ")"],
["/\(\s*\)/ui" => ""],
["/\s+(,|\.)/ui" => "$1"],
["/^[\s,]+(.+)/ui" => "$1"],
["/,\s+\)\s*$/ui" => ""],
["/(\s)+/ui" => "$1"],
["/(.+)[\s,\.,-,\\\,\/]+$/uiU" => "$1"],
["/,+/" => ","],
["/\s+\/\s+/" => " "]
];
foreach ($replaces as $replace) {
$name = preg_replace(array_key_first($replace), $replace[array_key_first($replace)], $name);
}
return trim($name);
}
function getDosage(string $name): ?string
{
$regexp = "/(((?:\d+,)*(?:\d+)\s*(?:нано|микро|милли|кило)?(?:грамм|литр|единиц)(?:а|ов)?(?:\s*на\s((?:\d+,)*(?:\d+))*\s*(?:нано|микро|милли|кило)?(?:грамм|литр|единиц|дозу)(?:а|ов)?)?)(?:\s*плюс\s*((?:\d+,)*(?:\d+)\s*(?:нано|микро|милли|кило)?(?:грамм|литр|единиц)(?:а|ов)?(?:\s*на\s((?:\d+,)*(?:\d+))*\s*(?:нано|микро|милли|кило)?(?:грамм|литр|единиц|дозу)(?:а|ов)?)?))?)/ui";
if (preg_match($regexp, $name, $matches)) {
return $matches[1] ?? null;
}
return null;
}
function getFormType(string $name): ?string
{
$regexp = "/\b(таблетки|капсулы|гранулы|аэрозоль|раствор|порошок|суспензия|спрей назальный|сироп|крем|пластырь|спрей|гель|капли)\b/ui";
if (preg_match($regexp, $name, $matches)) {
return $matches[1] ?? null;
}
return null;
}
function getForm(string $name): ?string
{
$regexp = "/(\d+\s*штук[а-я]* в упаковке)/ui";
if (preg_match($regexp, $name, $matches)) {
return $matches[1] ?? null;
}
return null;
}
function getShortName(string $name, array $clear): ?string
{
$name = str_replace($clear, '', $name);
$replaces = [
["/\s+/ui" => " "],
["/\(+/ui" => "("],
["/\)+/ui" => ")"],
["/\(\s*\)/ui" => ""],
["/\s+(,|\.)/ui" => "$1"],
["/^[\s,]+(.+)/ui" => "$1"],
["/,\s+\)\s*$/ui" => ""],
["/(.+)[\s,\.,-,\\\,\/]+$/uiU" => "$1"],
["/,+/" => ","],
["/(\s)+/ui" => "$1"],
];
foreach ($replaces as $replace) {
$name = preg_replace(array_key_first($replace), $replace[array_key_first($replace)], $name);
}
return trim($name);
}