Извлечение отношений с помощью фрагментации с использованием NLTK

Я пытаюсь понять, как использовать каскадный блокировщик NLTK в соответствии с главой 7 книги NLTK. К сожалению, я сталкиваюсь с несколькими проблемами при выполнении нетривиальных мер фрагментации.

Начнем с этой фразы:

"adventure movies between 2000 and 2015 featuring performances by daniel craig"

Я могу найти все соответствующие NP, когда использую следующую грамматику:

grammar = "NP: {<DT>?<JJ>*<NN.*>+}"

Однако я не уверен, как создавать вложенные структуры с помощью NLTK. Книга дает следующий формат, но явно не хватает нескольких вещей (например, как на самом деле указать несколько правил?):

grammar = r"""
  NP: {<DT|JJ|NN.*>+}          # Chunk sequences of DT, JJ, NN
  PP: {<IN><NP>}               # Chunk prepositions followed by NP
  VP: {<VB.*><NP|PP|CLAUSE>+$} # Chunk verbs and their arguments
  CLAUSE: {<NP><VP>}           # Chunk NP, VP
  """

В моем случае я хотел бы сделать что-то вроде следующего:

grammar = r"""
          MEDIA: {<DT>?<JJ>*<NN.*>+}
          RELATION: {<V.*>}{<DT>?<JJ>*<NN.*>+}
          ENTITY: {<NN.*>}
          """

Предполагая, что я хочу использовать каскадный блокировщик для своей задачи, какой синтаксис мне нужно использовать? Кроме того, могу ли я указать определенные слова (например, «направленный» или «действующий») при использовании чанкера?


person grill    schedule 16.05.2015    source источник


Ответы (1)


Я не могу комментировать часть извлечения отношений, не в последнюю очередь потому, что вы не даете никаких подробностей о том, что вы хотите сделать и какие данные у вас есть. Так что это довольно частичный ответ.

а.) Как каскадное разбиение на фрагменты работает в NLTK б.) Можно ли обращаться с чанкером как с контекстно-свободной грамматикой, и если да, то как?

Насколько я понимаю, раздел "Построение вложенной структуры с каскадными чанкерами " в книге NLTK вы можете использовать его с контекстно-свободной грамматикой, но вам придется применять его неоднократно, чтобы получить рекурсивную структуру. Фрагменты плоские, но вы можете добавлять фрагменты поверх фрагментов.

c.) Как я могу использовать фрагментацию для извлечения отношений?

Я не могу говорить об этом, и в любом случае, как я уже сказал, вы не даете никаких подробностей; но если вы имеете дело с реальным текстом, я понимаю, что написанные от руки наборы правил для любой задачи бесполезны, если у вас нет большой команды и много времени. Изучите вероятностные инструменты, которые поставляются с NLTK. Будет намного проще, если у вас есть аннотированный учебный корпус.

В любом случае, еще пара комментариев о RegexpParser.

  1. Вы найдете гораздо больше примеров использования на http://www.nltk.org/howto/chunk.html. (К сожалению, это не настоящее руководство, а набор тестов.)

  2. В соответствии с здесь можно указать несколько правила расширения такие:

    patterns = """NP: {<DT|PP\$>?<JJ>*<NN>}
        {<NNP>+}
        {<NN>+}
    """
    

    Я должен добавить, что грамматики могут иметь несколько правил с одной и той же левой частью. Это должно добавить некоторую гибкость при группировке связанных правил и т.д.

person alexis    schedule 26.05.2015