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

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

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

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

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

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.*>}
          """

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

1 ответов


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

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

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

c.) Как использовать chunking для извлечения отношений?

Я не могу говорить об этом, и в любом случае, как я сказал, Вы не даете никаких подробностей; но если вы имеете дело с реальным текстом, Я понимаю, что рукописные наборы правил для любой задача бесполезна, если у вас большая команда и много времени. Посмотрите на вероятностные инструменты, которые поставляются с НЛТК. Это будет намного проще, если у вас есть аннотированный учебный корпус.

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

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

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

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

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