Python NLTK:从 Stanford 依赖项解析结果中提取词汇头项
Python NLTK : Extract lexical head item from Stanford dependency parsed result
我有一个句子,我想提取词首项,我可以使用 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"]
}
要找到句子的依赖中心,只需查找其 head
值指向 root
节点的节点。在NLTK
API 到DependencyGraph 中,你可以很容易地找到它的头指向字典第一个索引的节点。
请注意,与典型的乔姆斯基范式/CFG 解析树不同,在依赖解析中,依赖解析可能有不止一个头。
但是由于您要将依赖项输出转换为树结构,您可以执行以下操作:
tree_head = next(n for n in p_tree.node_values() if n['head'] == 1)
但请注意,在语言上,句子Download and share this tool
中的中心词应该是Download
和 share
。但是在计算上一棵树是分层的,一棵 normal-form 树会有 ROOT->Download->and->share
但一些解析器也可能产生这棵树:ROOT->and->Download;share
我有一个句子,我想提取词首项,我可以使用 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"]
}
要找到句子的依赖中心,只需查找其 head
值指向 root
节点的节点。在NLTK
API 到DependencyGraph 中,你可以很容易地找到它的头指向字典第一个索引的节点。
请注意,与典型的乔姆斯基范式/CFG 解析树不同,在依赖解析中,依赖解析可能有不止一个头。
但是由于您要将依赖项输出转换为树结构,您可以执行以下操作:
tree_head = next(n for n in p_tree.node_values() if n['head'] == 1)
但请注意,在语言上,句子Download and share this tool
中的中心词应该是Download
和 share
。但是在计算上一棵树是分层的,一棵 normal-form 树会有 ROOT->Download->and->share
但一些解析器也可能产生这棵树:ROOT->and->Download;share