pymorphy2 - морфологический поиск

Документация

Установка

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)
08 октября 2017, 14:10    19



Наверх