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