с помощью Dependency Parser в Stanford coreNLP - PullRequest
4 голосов
/ 17 ноября 2011

Я использую Stanford coreNLP (http://nlp.stanford.edu/software/corenlp.shtml) для разбора предложений и извлечения зависимостей между словами.

Мне удалось создать граф зависимостей, как в примере в поставляемой ссылке, но я не знаю, как с ним работать. Я могу напечатать весь график, используя метод toString(), но проблема у меня заключается в том, что методы, которые ищут определенные слова в графике, такие как getChildList, требуют в качестве параметра объект IndexedWord. Теперь понятно, почему они это делают, потому что узлы графа относятся к типу IndexedWord, но мне не ясно, как я создаю такой объект для поиска определенного узла.

Например: я хочу найти дочерние элементы узла, который представляет слово «проблема» в моем предложении. Как создать объект IndexWord, представляющий слово «проблема», чтобы я мог найти его на графике?

1 Ответ

11 голосов
/ 26 ноября 2011

В общем, вы не должны создавать свои собственные объекты IndexedWord.(Они используются для представления «токенов слов», т. Е. Определенных слов в тексте, а не «типов слов», и поэтому запрос слова «проблема» - тип слова - на самом деле недопустим; в частности,предложение может иметь несколько токенов этого типа.)

Существует несколько удобных методов, которые позволяют вам делать то, что вы хотите:

  • sg.getNodeByWordPattern (String pattern)
  • sg.getAllNodesByWordPattern (String pattern)

Первый является немного опасным, поскольку он просто возвращает первый IndexedWord, соответствующий шаблону, или ноль, если его нет.Но это именно то, о чем вы просили.

Некоторые другие методы для начала:

  • sg.getFirstRoot (), чтобы найти (первый, обычно только) корень графаа затем перейти оттуда, например, с помощью метода sg.getChildren (root).
  • sg.vertexSet (), чтобы получить все объекты IndexWord на графике.
  • sg.getNodeByIndex (int), если вы уже знаете входное предложение и, следовательно, можете запрашивать слова по их целочисленному индексу.

Обычно эти методы оставляют вас при переборе узлов.Действительно, первые два метода get ... Node ... просто выполняют итерацию за вас.

...