pymorphy2 - морфологический поиск
морфологический поиск на php
Установка
pip install pymorphy2
Подключение
import pymorphy2
morph = pymorphy2.MorphAnalyzer()
butyavka = morph.parse(u'Все тендеры Новокузнецк')
butyavka.make_agree_with_number(2).word
// вернет "Все тендеры Новокузнецка"
// Местоположения
butyavka = morph.parse(u'Все тендеры Кемеровская область')[1]
// где?
print butyavka.inflect({'loc2'}).word
PHP код для исполнения скрипта
запускает при включенном exec
$str = 'Кемеровская';
$jsondata = exec("/usr/bin/python2.7 /astep/morch/run.py {$str}");
$data = json_decode($jsondata, true);;
/*
nomn именительный Кто? Что? хомяк ест
gent родительный Кого? Чего? у нас нет хомяка
datv дательный Кому? Чему? сказать хомяку спасибо
accs винительный Кого? Что? хомяк читает книгу
ablt творительный Кем? Чем? зерно съедено хомяком
loct предложный О ком? О чём? и т.п. хомяка несут в корзинке
voct звательный Его формы используются при обращении к человеку. Саш, пойдем в кино.
gen2 второй родительный (частичный) ложка сахару (gent - производство сахара); стакан яду (gent - нет яда)
acc2 второй винительный записался в солдаты
loc2 второй предложный (местный) я у него в долгу (loct - напоминать о долге); висит в шкафу (loct - монолог о шкафе); весь в снегу (loct - писать о снеге)
*/
$cases = array(
'nomn' => 'именительный - Кто? Что? (хомяк ест)',
'gent' => 'родительный - Кого? Чего? (у нас нет хомяка)',
'datv' => 'дательный - Кому? Чему? (сказать хомяку спасибо)',
'accs' => 'винительный - Кого? Что? (хомяк читает книгу)',
'ablt' => 'творительный - Кем? Чем? (зерно съедено хомяком)',
'loct' => 'предложный - О ком? О чём? (и т.п. хомяка несут в корзинке)',
'voct' => 'звательный - (Его формы используются при обращении к человеку. Саш, пойдем в кино)',
'gen2' => 'второй родительный (частичный) - (ложка сахару (gent - производство сахара); стакан яду (gent - нет яда))',
'acc2' => 'второй винительный (записался в солдаты)',
'loc2' => 'второй предложный (местный) (я у него в долгу (loct - напоминать о долге); висит в шкафу (loct - монолог о шкафе); весь в снегу (loct - писать о снеге))',
);
$array = array();
foreach ($data as $value) {
$case = $value['case'];
$value[$case.'_desc'] = $cases[$case];
$array[] = $value;
}
echo '<pre>';
print_r($array); die;
Скрипт исполнения
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import pymorphy2
import sys
import json
import types
morph = pymorphy2.MorphAnalyzer()
#print 'Enter the word'
#raw = raw_input().decode(sys.stdin.encoding or 'utf-8')
#arr = morph.parse(raw)
wordstr = ''
if __name__ == "__main__":
for param in sys.argv:
wordstr = str(param)
if wordstr is not '' :
raw = wordstr.decode('utf-8')
arr = morph.parse(raw)
#arr = morph.parse(u"Новокузнецк")
data = {}
cases = {'nomn','gent','datv','accs','ablt','loct','voct','gen2','acc2','loc2'}
i = 0
if len(arr) > 0 :
for word in arr:
if len(word) > 0 :
for case in cases:
obj = word.inflect({str(case)})
if str(type(obj)) == "<class 'pymorphy2.analyzer.Parse'>" :
tag = obj.tag
data[i] = {
'case': case,
'word': obj.word,
'case': tag.case,
'number': tag.number,
'gender': tag.gender,
'part_speech' : tag.POS,
}
i = i + 1
print json.dumps(data)
31 августа 2018, 14:44 2784
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()