Вверх ↑
Ответов: 2059
Рейтинг: 132
#1: 2013-10-29 21:43:16 ЛС | профиль | цитата
mudfactory
к примеру " замена подшипника передней ступицы".

Тут как раз всё просто.
Разложу по полочкам сам алгоритм.
имеем:

замена
замена
25 21 19 1 35
подшипника
подшипник
26 22 19 1 35
передней
передний
26 21 19 3 35
ступицы
ступица
26 21 19 1 35

Можно триады распихать в три списка строк - меньще коммутаций.
и имеем:

замена < подшипника noun_es gen_es
подшипника < ступицы noun_es gen_es
передней > ступицы adj_es noun_es

1. запрос "замена" = замена < подшипника замене подчинён подшипник.
проверяем сточку 26 22 19 1 35 на наличее 3 (прилагательное) нет - поехали дальше
т.е того слова от которого указывает стрелочка.
2. запрос "подшипник" = подшипника < ступицы подшипнику подчинена ступица.
проверяем сточку 26 21 19 1 35 на наличее 3 нет - поехали дальше
3. запрос "ступица" = передней > ступицы
проверяем сточку 26 21 19 3 35 на наличее 3 есть - приехали.
А уж как выводить, - это дело третье. Все подряд, или первое слово и последнее.
Как это делается:
Связь слов получаем через точки doGetConnect - получаем списк в точке Count_Connect
подчинённых слов или наоборот, нас интересует подчинеие.
перебираем этот список через точку doIConnect. В точке onNumWordConnect получаем номера интересующих нас слов. В точке Connchr читаем знак подчинения < + >, + равнозначность.
Запихиваем эти номера в точку doNumWord и с модом 2 в точке Mode и получаем такие строки
26 21 19 3 35 в точке onNumWord, это равносильно чтению строки из третьего списка строк по индексу, если решили строить схему со списками строк. Всё.
карма: 6

0