Извлечение отношений с помощью 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.
вы найдете гораздо больше примеров использования наhttp://www.nltk.org/howto/chunk.html. (К сожалению, это не настоящий how-to, а набор тестов.)
-
по данным этой вы можете указать несколько правил расширения, как это:
patterns = """NP: {<DT|PP$>?<JJ>*<NN>} {<NNP>+} {<NN>+} """
Я должен добавить, что грамматики может быть несколько правил с одинаковой левой стороны. Это должно добавить некоторую гибкость при группировании связанных правил и т. д.