Склонение слов (место события, неодушевленное) (морфология)
В базу из соответствующего поля заносится какое-то место проведения работ, например: склад, подвальное помещение, ресторан, кафе, чердак, поликлиника и т.д.
В документе это место выводится как «... по своевременному проведению работ в склад по адресу:...».
А нужно «... по своевременному проведению работ в складе по адресу:...», «... по своевременному проведению работ в подвальном помещении по адресу:...», «... по своевременному проведению работ в ресторане по адресу:...».
Я дилетант в PHP, только учусь, и ничего лучшего не придумал, как задавать какую-то маску для сравнения возможных вариантов и если нет ничего похожего, то выводить то, что было вписано в поле:
function d_typeplace_morf($d_typeplace)
{
$d_typeplace = mb_strtolower($d_typeplace);
if ($d_typeplace === 'ресторан') : echo 'ресторане';
elseif ($d_typeplace === 'кафе') : echo 'кафе';
elseif ($d_typeplace === 'столовая') : echo 'столовой';
elseif ($d_typeplace === 'склад') : echo 'складе';
else : echo $d_typeplace;
endif;
}
Буду благодарен любой помощи в этом вопросе.
Ответы (1 шт):
Предложу прототип офлайн решения, которое основывается на пакете pymorphy2 для python.
Решение упрощенное, но которое можно развить в рабочее и надежное.
- Установить пакет
pip install pymorphy2 - Создать скрипт
morph.pyи сделать его исполняемымchmod a+x morph.py. Содержимое скрипта:
#!/usr/bin/env python
import pymorphy2
import sys
morph = pymorphy2.MorphAnalyzer()
p = morph.parse(sys.argv[1])[0]
print(p.inflect({'sing', 'loct'})[0])
- Создать php-скрипт
foo.phpи сохранить его в папку с питоновским скриптом. Содержимое скрипта:
<?php
$morph = "python " . __DIR__ . "/morph.py";
$ww = [
"склад",
"подвальное помещение",
"ресторан",
"кафе",
"чердак",
"поликлиника"
];
foreach ($ww as $w) {
$tt = explode(" ", $w);
$r = [];
foreach ($tt as $t) {
$r[] = rtrim(`$morph $t`);
}
echo implode(" ", $r) . "\n";
}
- Запустить скрипт:
php /path/to/folder/with/foo.php