python遍历什么意思_python – 树遍历还是什么?

在Python中,我正在编写一个自然语言处理模块,无法解决如何编写函数来执行以下操作.

输入:从输入的句子作为短字符串导出的词性(POS)列表.列表中的某些项目本身就是列表,因为程序的该部分不知道从两种或更多种可能中选择哪个词性.

例如特定的六个字句导致[“DET”,“NOUN”,[“VERB”,“NOUN”],“CONJ”,[“ADJ”,“ADV”,“NOUN”],“ADV”]

即第一个字肯定是DET

第二个字肯定是一个NOUN

第三个单词可以是VERB或NOUN

第四个字肯定是一个CONJ

第五个字可能是ADJ,ADV或NOUN

第6个字肯定是ADV.

所以INPUT = [“DET”,“NOUN”,[“VERB”,“NOUN”],“CONJ”,[“ADJ”,“ADV”,“NOUN”],“ADV”]

我需要函数将每个可能的组合作为列表列表返回.所以上面的返回值应该是:

[["DET", "NOUN", "NOUN", "CONJ", "NOUN", "ADV"],

["DET", "NOUN", "NOUN", "CONJ", "ADV", "ADV"],

["DET", "NOUN", "NOUN", "CONJ", "ADJ", "ADV"],

["DET", "NOUN", "VERB", "CONJ", "NOUN", "ADV"],

["DET", "NOUN", "VERB", "CONJ", "ADV", "ADV"],

["DET", "NOUN", "VERB", "CONJ", "ADJ", "ADV"]]

句子可以是从1到n个单词长.每个单词可能会从一个到两个部分的语音回来.

解决方法:

您应该查看itertools module及相关配方.看起来您想要考虑所有可能的POS分配的笛卡尔积.这可以很容易地完成,尽管将INPUT的所有元素都列为列表更方便,即使它们只是一个列表.无论如何:

>>> import itertools

>>>

>>> INPUT = ["DET", "NOUN", ["VERB", "NOUN"], "CONJ", ["ADJ", "ADV", "NOUN"], "ADV"]

>>>

>>> I = [[kind] if type(kind) != list else kind for kind in INPUT]

>>> I

[['DET'], ['NOUN'], ['VERB', 'NOUN'], ['CONJ'], ['ADJ', 'ADV', 'NOUN'], ['ADV']]

所以这些是我们想要选择的可能性.这就是itertools.product的用途:

>>> possible_assignments = list(itertools.product(*I))

>>> possible_assignments

[('DET', 'NOUN', 'VERB', 'CONJ', 'ADJ', 'ADV'), ('DET', 'NOUN', 'VERB', 'CONJ', 'ADV', 'ADV'), ('DET', 'NOUN', 'VERB', 'CONJ', 'NOUN', 'ADV'), ('DET', 'NOUN', 'NOUN', 'CONJ', 'ADJ', 'ADV'), ('DET', 'NOUN', 'NOUN', 'CONJ', 'ADV', 'ADV'), ('DET', 'NOUN', 'NOUN', 'CONJ', 'NOUN', 'ADV')]

如果我理解你就是你想要的.好吧,他们是元组,而不是列表,但这不重要.

标签:python,nlp,tree

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值