Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python NLTK:从Stanford依赖项解析结果中提取词法头项_Python_Nlp_Nltk_Stanford Nlp_Dependency Parsing - Fatal编程技术网

Python NLTK:从Stanford依赖项解析结果中提取词法头项

Python NLTK:从Stanford依赖项解析结果中提取词法头项,python,nlp,nltk,stanford-nlp,dependency-parsing,Python,Nlp,Nltk,Stanford Nlp,Dependency Parsing,我有一个句子,我想提取词法头项,我可以使用斯坦福NLP库进行依赖项解析 如何提取句子中的主要标题? 如果句子是下载并共享此工具,则标题为下载 我尝试了以下方法: def get_head_word(text): standepparse=StanfordDependencyParser(path_to_jar='/home/stanford_resource/stanford-parser-full-2014-06-16/stanford-parser.jar',path_to_mo

我有一个句子,我想提取词法头项,我可以使用斯坦福NLP库进行依赖项解析

如何提取句子中的主要标题?

如果句子是
下载并共享此工具
,则标题为
下载

我尝试了以下方法:

 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"]
}
tree_head = next(n for n in p_tree.node_values() if n['head'] == 1)

要查找句子的依赖项标题,只需查找其
head
值指向
root
节点的节点。在
NLTK
API to中,您可以轻松查找其头指向字典第一个索引的节点

请注意,在依赖项解析中,与典型的chomsky normal form/CFG解析树不同,依赖项解析可能有多个头

但是,由于要将依赖项输出强制转换为树结构,因此可以执行以下操作:

 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"]
}
tree_head = next(n for n in p_tree.node_values() if n['head'] == 1)

但请注意,从语言学角度来看,
下载并共享此工具
一句中的开头应该是
下载
共享
。但是从计算上讲,树是分层的,一个普通形式的树应该有
ROOT->Download->and->share
,但是一些解析器可能也会生成这个树:
ROOT->and->Download;共享

是否足够:
在p_tree.nodes.values()中的n个节点:
:如果n['head']==0:print n['word'],n['head']
您能重新表述一下您的问题吗?“下载”是什么意思?@alvas我想提取词法标题项。在上面提到的句子中,(如果我是正确的),标题是“下载”。因此,对于另一个句子
我们喜欢python
,词法头项将是
love
。哦,那么您只需要在“None->root”之后找到第一个节点,它将为您提供句子头<代码>下一步(n表示p_树中的n。如果n['head']==1,则节点的值为())