Я написал рекурсивный метод, который возвращает список всех компонентов / блоков в документе на основе результатов синтаксического анализатора интересов CoreNLP - был бы рад поделиться моим кодом. Однако одна проблема заключается в том, что элементы в этом списке могут иметь перекрытия. Это потому, что когда я анализирую дерево постоянных, очевидно, что у нас есть несколько меток одного типа (например, VP или NP) на одном и том же пути к ребенку. Например, для входного предложения:
Я купил книгу, потому что прочитал хорошие отзывы о ней.
список чанков будет выглядеть следующим образом (это вывод моего метода, и в этом случае я перечислял только VP, NP и SBAR):
[['NP', 'I'],
['NP', 'the book'],
['NP', 'I'],
['NP', 'good reviews'],
['NP', 'it'],
['SBAR', 'because I read good reviews about it'],
['VP', 'bought the book because I read good reviews about it'],
['VP', 'read good reviews about it']]
Как видите, между двумя ПО и SBAR есть совпадение.
Теперь мой вопрос / путаница в том, как мне справиться с перекрытиями между кусками? Зависит ли это от того, где я хочу использовать эти куски? Существует ли уникальная стратегия / правило, которому я должен следовать, чтобы устранить совпадения? Я не ищу здесь код, и поэтому пока не поделился своим реальным кодом, но я ищу алгоритм, который я должен использовать, если таковой имеется, для устранения перекрытий.