Python NLTK: Извлечь лексический элемент заголовка из результата анализа зависимости Стэнфорда

У меня есть предложение, и я хочу извлечь лексический элемент заголовка, я мог бы выполнить анализ зависимостей, используя библиотеку Stanford NLP.

Как я могу извлечь главу головы в предложении?

В случае с предложением Download and share this toolголова будет Download,

Я пробовал следующее:

 def get_head_word(text):
     standepparse=StanfordDependencyParser(path_to_jar='/home/stanford_resource/stanford-parser-full-2014-06-16/stanford-parser.jar',path_to_models_jar='/home/stanford_resource/stanford-parser-full-2014-06-16/stanford-parser-3.4-models.jar',model_path='/home/stanford_resource/stanford-parser-full-2014-06-16/stanford-parser-3.4-models/edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz')
     parsetree=standepparse.raw_parse(text)
     p_tree=list(parsetree)[0]
     print p_tree.to_dot()

 text = 'Download and share this tool'
 get_head_word(text)


output:

digraph G{
edge [dir=forward]
node [shape=plaintext]

0 [label="0 (None)"]
0 -> 1 [label="root"]
1 [label="1 (Download)"]
1 -> 2 [label="cc"]
1 -> 3 [label="conj"]
1 -> 5 [label="dobj"]
2 [label="2 (and)"]
3 [label="3 (share)"]
4 [label="4 (this)"]
5 [label="5 (software)"]
5 -> 4 [label="det"]
}

1 ответ

Решение

Чтобы найти заголовок зависимости, просто найдите узлы, чьи head значения указывают на root узел. В NLTK API для DependencyGraph, вы можете легко найти узел, который указывает на его 1-й индекс словаря.

Обратите внимание, что при разборе зависимостей в отличие от типичных деревьев синтаксического анализа chomsky нормальной формы / CFG может быть несколько головок для анализа зависимостей.

Но так как вы преобразуете вывод зависимостей в древовидную структуру, вы можете сделать следующее:

tree_head = next(n for n in p_tree.node_values() if n['head'] == 1)

Но обратите внимание, что лингвистически, глава в предложенииDownload and share this tool должно быть Download а также share, Но в вычислительном отношении дерево является иерархическим и дерево нормальной формы будет иметь ROOT->Download->and->share но некоторые парсеры тоже могут создавать это дерево: ROOT->and->Download;share

Другие вопросы по тегам