gpt4 book ai didi

python - 如何删除 nltk 中斜杠前的 POS 标签?

转载 作者:太空狗 更新时间:2023-10-30 01:58:02 30 4
gpt4 key购买 nike

这是我项目的一部分,我需要像这样表示短语检测后的输出 - (a,x,b),其中 a、x、b 是短语。我构建了代码并得到了这样的输出:

(CLAUSE (NP Jack/NNP) (VP loved/VBD) (NP Peter/NNP))
(CLAUSE (NP Jack/NNP) (VP stayed/VBD) (NP in/IN London/NNP))
(CLAUSE (NP Tom/NNP) (VP is/VBZ) (NP in/IN Kolkata/NNP))

我想让它像以前的表示一样,这意味着我必须删除“CLAUSE”、“NP”、“VP”、“VBD”、“NNP”等标签。

该怎么做?

我尝试了什么

首先将其写入文本文件,标记化并使用 list.remove('word')。但这根本没有帮助。我要澄清一点。

我的意见

(CLAUSE (NP Jack/NNP) (VP loved/VBD) (NP Peter/NNP))
(CLAUSE (NP Jack/NNP) (VP stayed/VBD) (NP in/IN London/NNP))

输出将是

[Jack,loved,Peter], [Jack,stayed,in London]输出只是根据大括号,没有标签。

最佳答案

既然你标记了这个nltk,让我们使用NLTK的树解析器来处理你的树。我们将阅读每棵树,然后简单地打印出树叶。完成。

>>> text ="(CLAUSE (NP Jack/NNP) (VP stayed/VBD) (NP in/IN London/NNP))"
>>> tree = nltk.Tree.fromstring(text, read_leaf=lambda x: x.split("/")[0])
>>> print(tree.leaves())

['Jack', 'stayed', 'in', 'London']

lambda 形式拆分每个 word/tag 对并丢弃标签,只保留单词。

多棵树

我知道,您会问我如何处理整个文件的此类树,其中一些需要不止一行。这是 NLTK 的 BracketParseCorpusReader 的工作,但它希望终端采用 (POS word) 而不是 word/POS 的形式。我不会那样做,因为更容易欺骗 Tree.fromstring() 读取所有树,就好像它们是一棵树的分支一样:

allmytext = """
(CLAUSE (NP Jack/NNP) (VP loved/VBD) (NP Peter/NNP))
(CLAUSE (NP Jack/NNP) (VP stayed/VBD) (NP in/IN London/NNP))
(CLAUSE (NP Tom/NNP) (VP is/VBZ) (NP in/IN Kolkata/NNP))
"""
wrapped = "(ROOT "+ allmytext + " )" # Add a "root" node at the top
trees = nltk.Tree.fromstring(wrapped, read_leaf=lambda x: x.split("/")[0])
for tree in trees:
print(tree.leaves())

如您所见,唯一的区别是我们在文件内容周围添加了 "(ROOT " and ")",并使用 for 循环生成输出.该循环为我们提供了顶级节点的子节点,即实际的树。

关于python - 如何删除 nltk 中斜杠前的 POS 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33705555/

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