我试图从列表中提取连续的'NN'元素(包括'NNP'),并附加到一个新的列表中,如果在'NN'之前遇到'IN'或'to'。我该怎么做?你知道吗
我尝试了以下代码。但无法捕捉到其他类似的例子。你知道吗
new = ['JJ',
'NN',
'IN',
'NNP',
'NN',
'MD',
'VB',
'VBN',
'IN',
'NN',
'TO',
'VB',
'NN',
'CC',
'NN',
'TO',
'NNP',
'NN',
'NN',
'.']
lst = []
for i,j in enumerate(new):
lst1 = []
if j == 'IN':
for i in new[i+1:]:
if 'NN' in i:
lst1.append(i)
lst.append(lst1)
break
lst = [['NNP'], ['NN']]
但我想改进代码,得到以下输出:
[['NNP', 'NN'], ['NN'], ['NNP', 'NN', 'NN']
每个输出块的前面都有“IN”或“TO”。你知道吗
实际上,上面的列表(新的)是这个列表的基本词类:
[['Additional',
'condition',
'of',
'DeNOx',
'activation',
'shall',
'be',
'introduced',
'in',
'order',
'to',
'provide',
'flexibility',
'and',
'robustness',
'to',
'NSC',
'regeneration',
'management',
'.'],
['JJ',
'NN',
'IN',
'NNP',
'NN',
'MD',
'VB',
'VBN',
'IN',
'NN',
'TO',
'VB',
'NN',
'CC',
'NN',
'TO',
'NNP',
'NN',
'NN',
'.']].
如何将结果映射回此列表以便
[['DeNOx', 'activation'], ['order'], ['NSC', 'regeneration', 'management']]
有另一个很好的答案张贴,而我正在键入这是一个简单的实现没有导入。你知道吗
你的车不太远。使之更容易的一种方法是获取
'IN'
和'TO'
的所有索引:它给出:
然后您只需要遍历这些索引,特别是
new[i+1:]
,并获取'NN'
或'NNP'
元素。当您到达一个不是这些元素之一的元素时,break
将退出循环。你知道吗举个例子:
最终输出:
另一个较短的方法,如@schwobasegll所建议的,是使用^{} 来简化
'NN'
元素的提取。这个函数基本上一直提取元素,直到第一个参数谓词返回false。你知道吗下面是它的样子:
更新:
如果要将单词和演讲映射到一起,可以执行以下操作:
输出:
您可以使用两个方便的^{} 来实现:^{} 和^{} :
它根据
TO
或IN
的项目将初始列表分块。从除第一个以外的每个块(为了避免任何初始的NNs
),这将在元素以NN
开头时获取元素。最后,它filters输出非真实(空)列表。你知道吗相关问题 更多 >
编程相关推荐