powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Обход графа деревом
23 сообщений из 23, страница 1 из 1
Обход графа деревом
    #37766702
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый коллеги,
У меня проблема в разработке сабжевого алгоритма.

В общем случаи проблема выглядит так:
У меня есть очень большой граф(десятков миллионов узлов) он является модификатором дерева. Узел графа либо модифицирует дерево либо не модифицирует (если условия в узле графа не подходят для модификации дерева).
Если узел графа не модифицирует дерево, то ниже по графу не происходит опускания (т.е. ветка графа ниже считается не валидной)

В конкретном случаи моя проблема выглядит так:
Я пытаюсь разработать морфологический анализатор предложений
У меня есть
1) Морфологический анализ каждого слова (часть речи у слова т.е. прилагательное/существительное/наречие... а так же его грамматические координаты падеж, род, число... ) в предложении.
Это есть моё дерево.
2) Правила русского языка по согласованию слов в предложении.
Это есть граф.

Пример дерева:
Есть предложение
"Очень точно". слово "очень" это наречие. А вот слово "точно" может быть как наречием, частицей и прилагательным. И мне на основе правил русского языка надо определить какой частью речи является слово "точно".

Пример узлов графа (правила русского языка):
граф состоят из узлов-условий
NameNode { существительное{ падеж:им } глагол }
Этот узел говорит, что существительное с глаголом согласуются только в том случаи если существительное только в именительном падеже.
Узлы в свою очередь вызываю другие узлы
ГруппаНареч1 { NameNode наречие{СТЕПЕНЬ:АТРИБ} }
Т.е. кагбэ происходит подстановка
ГруппаНареч1 { существительное{ падеж:им } глагол наречие{СТЕПЕНЬ:АТРИБ} }

У уже месяца полтора пытаюсь написать алгоритм а в итоге только одни костыли получаются

Мне бы хотелось услышать ваши рекомендации как можно эффективно обходит такой граф.
...
Рейтинг: 0 / 0
Обход графа деревом
    #37766741
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tepka,

Дерево - это частный вид графа. А вы предлагаете - "обход графа деревом" т.е. обход графа графом, звучит не логгично неправда ли?
По моему тут проблема не в поиске алгоритма - а в правильной формулировке задачи. Как первый шаг - выразите что вам нужно в мат терминах
...
Рейтинг: 0 / 0
Обход графа деревом
    #37766763
Nis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nis
Гость
tepka,

есть такая библиотека jgrapht. документация слабовата.
...
Рейтинг: 0 / 0
Обход графа деревом
    #37766847
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Откуда у вас в предложении десятки миллионов узлов?
Если вы хотите решать задачу снятия морфологической омонимии, то начните с этого:
http://download.yandex.ru/company/Zelenkov_Segalovich.pdf
...
Рейтинг: 0 / 0
Обход графа деревом
    #37767027
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OOsalivanобход графа графом, звучит не логгично неправда ли?
Я с вами абсолютно согласен, звучит странновато. Понятие дерево тут не совсем конечно подходит, просто структура объекта самого предложения выглядит почти как дерево)
Но поймите и меня,
Ведь сами правила русского языка выглядят как граф. Ну таков уж с нами общий язык. С этим ничего не поделать.

А вот сами предложения конечно же можно представить по сути как угодно. Но мне почему то показалось, что в виде небольшого дерева его представить удобней всего. Если знаете как представить его удобней буду очень признателен.

Я на вскидку вижу два варианта для предложения "Очень точно":
1) в виде массива из
а) очень(прил.) точно(наречие)
б) очень(частица) точно(наречие)
с) очень(наречие) точно(наречие)
Но проблема в том что это очень короткое предложение, а если предложение будет из ну скажем 10 слов. Такой массив может быть из 300-500-700 элементов. И кол-во элементов в этом массиве растёт геометрически в зависимости от кол-ва слов.
Можно конечно использовать и такую структуру но она мне кажется очень затратной по памяти.

2) А можно представить в виде структуры очень похожей на дерево.
Первый уровень: Слово. (объект с полями: номер слова в базе, само слово в текстовом виде)
Второй уровень: Часть речи т.е. наречие, существительное, глагол... (объект с полями: номер части речи в базе, текстовое название части речи. )
Третий уровень: Грамматические координаты. Падеж:Существительное, Род:Муж, Лицо:1... (объект Map<Integer, Set<Integer>>, Map<CoordId, Set<CoordValues>>)

PS. Я тут по сути для того чтобы понять самую эффективную структуру и обход её.
...
Рейтинг: 0 / 0
Обход графа деревом
    #37767039
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeonidvОткуда у вас в предложении десятки миллионов узлов?
Если вы хотите решать задачу снятия морфологической омонимии, то начните с этого:
http://download.yandex.ru/company/Zelenkov_Segalovich.pdf
Да и Вы не понял чутка, десятки миллионов узлов в правилах. Точнее базовых правил то русского языка не так уж и много (сотни). Но проблема в том, что базовые правила включают в себя другие базовые правила, а эти другие базовые правила первые правила)

Да и читал я его диссертацию, у нас два разных подхода.
Он использует вероятностные методы снятия омонимов. Чем больше база данных тем правильнее будет разбор. Там для эффективной работы нужен очень большой объема корпуса русского языка.
У меня метод основана на правилах русского языка.

Зеленковым имеет смысл пользоваться если традиционный подход (правила русского языка) не дал эффекта.
...
Рейтинг: 0 / 0
Обход графа деревом
    #37767071
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tepkaOOsalivanобход графа графом, звучит не логгично неправда ли?
Я с вами абсолютно согласен, звучит странновато. Понятие дерево тут не совсем конечно подходит, просто структура объекта самого предложения выглядит почти как дерево)
Но поймите и меня,
Ведь сами правила русского языка выглядят как граф. Ну таков уж с нами общий язык. С этим ничего не поделать.


Не в том дело! Вас спрашивают, задача в чем? Чего хотите то?

Формулировка "обход графа графом" никому не понятна, т.е. не имеет смысла.
...
Рейтинг: 0 / 0
Обход графа деревом
    #37767075
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы имеете в виду это:
http://en.wikipedia.org/wiki/Augmented_transition_network
То есть такая книга:
http://www.paulgraham.com/onlisptext.html
Там есть код парсера естественного языка на основе континуаций.
...
Рейтинг: 0 / 0
Обход графа деревом
    #37767122
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Edd.DragonНе в том дело! Вас спрашивают, задача в чем? Чего хотите то?
Формулировка "обход графа графом" никому не понятна, т.е. не имеет смысла.
Нужно обойти объектом большой граф. Где узлы графа модифицируют поля объект.

Проблема: Первый уровень графа имеет 10 веток. После обхода первой ветки поля объекта модифицируются и когда доходит очередь до обхода второй ветки, поля у исходного объекта уже не те, что были до обхода первой ветки.
Как сохранять объект в целости, если ветка которую он обошел не подходит по условиям узлов?

PS. Делать clone() на каждом уровне не вариант, слишком много накладных расходов.
...
Рейтинг: 0 / 0
Обход графа деревом
    #37767126
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Йуный джавистЪЕсли вы имеете в виду это:
http://en.wikipedia.org/wiki/Augmented_transition_network
То есть такая книга:
http://www.paulgraham.com/onlisptext.html
Там есть код парсера естественного языка на основе континуаций.
Да очень похоже. Суть алгоритма понята, не понята реализация)
...
Рейтинг: 0 / 0
Обход графа деревом
    #37767132
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я хз, что там у вас за особенности алгоритма. Может после модификации нужно заново начинать обход. Может наоборот, надо сначала все обойти и собрать массив модификаций, а потом уже модифицировать.

Но! Цитаты из первого сообщения:

У меня есть очень большой граф (десятков миллионов узлов) он является модификатором дерева
Если узел графа не модифицирует дерево , то ниже по графу(?) не происходит опускания.
Мне бы хотелось услышать ваши рекомендации как можно эффективно обходит такой граф(?) .

Поясните, там дерево имелось ввиду или граф,как написано? И что понимается ввиду под "обойти"? Просмотреть все пары (элемент графа (правило), элемент дерева? Если так, то в общем случае, раз модификая может затронуть, что угодно и привести к необходимости модификации уже проверенных элементов уже просмотренными правилами, то значит после модификации "наша песня хороша - начинай сначала!". Или надо продумать, как иначе взглянуть на свод правил и на построение дерева предложения, чтобы отметать как можно больше заведомо ненужных проверок.
...
Рейтинг: 0 / 0
Обход графа деревом
    #37767220
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Edd.DragonЯ хз, что там у вас за особенности алгоритма.
Таки особенностей нет. Обычный граф, обходит объект. И объект модифицируются в каждом узле.

Edd.DragonМожет после модификации нужно заново начинать обход. Может наоборот, надо сначала все обойти и собрать массив модификаций, а потом уже модифицировать.
Ничего заново обходить не надо. А без самой именно модификации объекта мне не собрать массив модификаций.
Объект нужно именно изменять. Потому что условия в узлах графа смотрят на текущее состояние объект. И если состояние объекта удовлетворяет требованиям узла, узел модифицирует объект и пускает его дальше по цепочке. Если состояние объекта не удовлетворяет условиям в узле, то считаются все нижестоящие уровни не валидными.

Edd.DragonНо! Цитаты из первого сообщения:
У меня есть очень большой граф (десятков миллионов узлов) он является модификатором дерева
Если узел графа не модифицирует дерево , то ниже по графу(?) не происходит опускания.
Мне бы хотелось услышать ваши рекомендации как можно эффективно обходит такой граф(?) .
Поясните, там дерево имелось ввиду или граф,как написано?

Там ошибки нет. Замените слово дерево на объект. Мы вроде выше решили придерживаться этой терминологии.
Сам граф он стабилен, это правила русского языка. Мы применяем правила русского языка к одному предложению, методом перебора всех возможных правил русского языка.
Модификация объект выглядит по сути как "откусывание" по слову у русского предложения слева. Идёт простой перебор всех правил русского языка и попытка их применить к конкретному предложению.


Edd.DragonИ что понимается ввиду под "обойти"? Просмотреть все пары (элемент графа (правило), элемент дерева?
Да. Нужно обойти все элементы графа, объектом(деревом) модифицируя в каждом узле объект. Если модификации не происходит ветка не валидна. И дальше по ней не идёт алгоритм.

Edd.DragonЕсли так, то в общем случае, раз модификая может затронуть, что угодно и привести к необходимости модификации уже проверенных элементов уже просмотренными правилами, то значит после модификации "наша песня хороша - начинай сначала!". Или надо продумать, как иначе взглянуть на свод правил и на построение дерева предложения, чтобы отметать как можно больше заведомо ненужных проверок.
О проверенных элементах узел не может знать ничего. В этом и есть суть модификации объекта. Как я уже выше несколько раз сказал, модификация это откусывание слова у предложения. До тех пор пока предложение не станет нулевым. Если предложение стало нулевой длинны(без слов) это по сути означает что мы подобрали нужный набор правил русского языка к предложению.

Если хотите могу показать как часть правил русского языка в виде графа (но информация специфична, она далека мне кажется от понимаю человеку не в теме)
...
Рейтинг: 0 / 0
Обход графа деревом
    #37767426
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tepkaОн использует вероятностные методы снятия омонимов. Чем больше база данных тем правильнее будет разбор. Там для эффективной работы нужен очень большой объема корпуса русского языка.

Какую точность вы хотите достичь и с какой скоростью? Мне кажется, вероятностные методы будут быстрее. А точность лучших на сегодняшний день морфологических анализаторов достигает 97%.
...
Рейтинг: 0 / 0
Обход графа деревом
    #37767427
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tepkaЕсли хотите могу показать как часть правил русского языка в виде графа (но информация специфична, она далека мне кажется от понимаю человеку не в теме)
Покажите, интересно. Еще интересней, где взять полный набор правил в виде графа :)
...
Рейтинг: 0 / 0
Обход графа деревом
    #37767434
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tepkaСам граф он стабилен, это правила русского языка. Мы применяем правила русского языка к одному предложению, методом перебора всех возможных правил русского языка.

Посмотрите neo4j.
...
Рейтинг: 0 / 0
Обход графа деревом
    #37768203
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeonidvtepkaСам граф он стабилен, это правила русского языка. Мы применяем правила русского языка к одному предложению, методом перебора всех возможных правил русского языка.

Посмотрите neo4j.

Ну например покажу два коротеньких предложения:
"очень точно"
pattern begin { НеполнПредлож }
pattern НеполнПредлож { Обст }
pattern Обст { ГруппаНареч2 }
pattern ГруппаНареч2 { ГруппаНареч1 }
pattern ГруппаНареч1 { МодифНареч наречие:*{СТЕПЕНЬ:АТРИБ} }
pattern МодифНареч { наречие:очень{} }

"иногда очень точно"
pattern begin { НеполнПредлож }
pattern НеполнПредлож { Обст }
pattern Обст { ГруппаНареч2 }
pattern ГруппаНареч2 { ГруппаНареч1 }
pattern ГруппаНареч1 { ПремодифНареч МодифНареч наречие:*{СТЕПЕНЬ:АТРИБ} }
pattern ПремодифНареч { наречие:иногда{} }

Pattern - это и есть узел графа.
То что в скобках это условия либо модификации, либо перехода к другому узлу (или группе узлов, вот например "ГруппаНареч1" это не один конкретный узел, это группа узлов состоящая из 20 штук, например есть такой узел
pattern ГруппаНареч1 { НачНаречнойГруппы_ДоПосле @or(предлог:до{},предлог:после{}) СущСРодДоп{ Падеж:РОД } } ).

Распознавалось предложение за 10-15 мс. Обойдя 5500-5700 узлов.

А относительно вероятностных методов то для высокой точности нужен большой корпус русского языка. Только где же его взять то?)
...
Рейтинг: 0 / 0
Обход графа деревом
    #37768252
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tepkaА относительно вероятностных методов то для высокой точности нужен большой корпус русского языка. Только где же его взять то?)
Есть opencorpora и еще какой-то для русского языка.
А вообще, смотря какие методы. Можно расставить автоматически на основе словаря и обучать так. Тут, думаю, от метода зависит.

Есть возможность получить доступ к этим правилам? Я так понимаю, они у вас от научного руководителя, можно с ним связаться?
...
Рейтинг: 0 / 0
Обход графа деревом
    #37768366
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeonidvА вообще, смотря какие методы. Можно расставить автоматически на основе словаря и обучать так. Тут, думаю, от метода зависит.

А есть у Вас, что почитать относительно методов сбора корпуса?

LeonidvЕсть возможность получить доступ к этим правилам? Я так понимаю, они у вас от научного руководителя, можно с ним связаться?

На ваш email на list.ru отправить можно контакты?
...
Рейтинг: 0 / 0
Обход графа деревом
    #37768485
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tepkaLeonidvА вообще, смотря какие методы. Можно расставить автоматически на основе словаря и обучать так. Тут, думаю, от метода зависит.

А есть у Вас, что почитать относительно методов сбора корпуса?

Посмотрю дома.

tepkaLeonidvЕсть возможность получить доступ к этим правилам? Я так понимаю, они у вас от научного руководителя, можно с ним связаться?

На ваш email на list.ru отправить можно контакты?
Да, спасибо.
...
Рейтинг: 0 / 0
Обход графа деревом
    #37769989
пролетевший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще то алгоритм еще в 1965 году придумали
1. Преобразовать граматику ( правила ) в нормальную форму, с только бинарными шаблонами. Это можно и на автомате сделать.
2. Дерево обходится не сверху а снизу. то есть для фразы "очень точно" в ячейку для первого слова ставится 'наречие' , а в ячейку для "точно" 3 возможных варианта: наречие, частица, прилагательное. Тогда для узла который их объединяет надо найти все правила где слева прилагательное, а справа один из возможных вариантов. Всего 3 комбинации.
Если нашлось более одного, тут уже надо вероятности считать.
Дерево можно и в виде двумерного массива хранить.
Для того чтобы получить результат надо обратно развернуть путь по которому получили правило верхнего уровня.
Сложность алгоритма куб от размера предложения. Если правила хранить в проиндексированном виде, то от размера граматики не зависит.
...
Рейтинг: 0 / 0
Обход графа деревом
    #37771449
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пролетевший,

Ой, спасибо большое, много идей сразу после ваших слов пришло)
Я по сути то обходил сверху. И какая то фигня получалась. Очень затратно по памяти.
...
Рейтинг: 0 / 0
Обход графа деревом
    #37771498
пролетевший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Счастливым образом совпало что я как раз вчера лекцию на эту тему в стенфордовском курсе NLP слушал :-)
Кстати, советую посмотреть , там похоже все что вам нужно рассказывается.
...
Рейтинг: 0 / 0
Обход графа деревом
    #37771833
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пролетевшийСчастливым образом совпало что я как раз вчера лекцию на эту тему в стенфордовском курсе NLP слушал :-)
Кстати, советую посмотреть , там похоже все что вам нужно рассказывается.
Лекции хорошие. Тоже смотрю.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Обход графа деревом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]