gpt4 book ai didi

python - 你如何使用 nltk.util.breadth_first 来搜索?

转载 作者:太空宇宙 更新时间:2023-11-03 10:51:42 24 4
gpt4 key购买 nike

我正在尝试使用 breadth_first 搜索(首先)特定的叶词,然后在 ParentedTree 中搜索特定的标签 (NP)。如果已经有一个方法,我真的宁愿不自己实现它。这是我尝试过的方法(包括我如何制作树,以防那是我搞砸的地方):

import nltk
from nltk.util import breadth_first

grammar = nltk.data.load("/path/to/grammar.cfg")
parser = nltk.parse.EarleyChartParser(grammar)
sent = "They are happy people"
parse1 = list(parser.parse(sent.split()))
tree1 = nltk.tree.ParentedTree.convert(parse1[0])
bf = breadth_first(tree1)

这给了我一个生成器对象,但我不确定如何使用它来搜索我想要的东西(代词“他们”)。我尝试做一个简单的“for node in bf: print(node)”,它将字符串的每个字母单独打印在一行上,永远重复,直到我不得不关闭窗口。

我已阅读文档并进行了大量谷歌搜索,但找不到实际用于搜索的示例。我究竟做错了什么?

最佳答案

nltk.util.breadth_first 方法对您作为参数提供的树进行广度优先遍历。要将其用作搜索机制,您需要检查生成器返回的每个结果中的值。

如果您遍历 breadth_first 返回的生成器的结果并在遍历的每一步输出结果,您可以看到它遇到树中的每个节点(按 BFS 顺序),最终遇到叶节点和字符节点树也是如此。

因此,对于您的情况,您希望使用此生成器并在每个节点检查一些值,以查看您是否已到达具有您在搜索中寻找的符号或叶 token 的节点。

这是一个示例句子,它来自 nltk 的解析树,以及对树的遍历。

祝你好运!

>>> sentence
'They capture mice in the cells'
>>> parse
Tree('S', [Tree('NP', [Tree('PRP', ['They'])]), Tree('VP', [Tree('VBP', ['capture']), Tree('NP', [Tree('Nom', [Tree('Nom', [Tree('NNS', ['mice'])]), Tree('PP', [Tree('Prep', ['in']), Tree('NP', [Tree('Det', ['the']), Tree('Nom', [Tree('NNS', ['cells'])])])])])])])])
>>> i = 0
>>> for node in breadth_first(parse):
... print("*"*10)
... print(node)
... print(type(node))
... if i > 10:
... break
... i += 1
...
**********
(S
(NP (PRP They))
(VP
(VBP capture)
(NP
(Nom
(Nom (NNS mice))
(PP (Prep in) (NP (Det the) (Nom (NNS cells))))))))
<class 'nltk.tree.Tree'>
**********
(NP (PRP They))
<class 'nltk.tree.Tree'>
**********
(VP
(VBP capture)
(NP
(Nom
(Nom (NNS mice))
(PP (Prep in) (NP (Det the) (Nom (NNS cells)))))))
<class 'nltk.tree.Tree'>
**********
(PRP They)
<class 'nltk.tree.Tree'>
**********
(VBP capture)
<class 'nltk.tree.Tree'>
**********
(NP
(Nom
(Nom (NNS mice))
(PP (Prep in) (NP (Det the) (Nom (NNS cells))))))
<class 'nltk.tree.Tree'>
**********
They
<class 'str'>
**********
capture
<class 'str'>
**********
(Nom
(Nom (NNS mice))
(PP (Prep in) (NP (Det the) (Nom (NNS cells)))))
<class 'nltk.tree.Tree'>
**********
T
<class 'str'>
**********
h
<class 'str'>
**********
e
<class 'str'>

关于python - 你如何使用 nltk.util.breadth_first 来搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49161277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com