在Python中连接具有特定标记的部分列表并创建新列表

2024-05-19 18:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,我面临一个问题。 我在Python中使用StanfordNER来标记文本,实体名称的输出如下:

[('Micheal', 'PERSON'),
 ('Jaf', 'PERSON'),
 ('Bin', 'PERSON'),
 ('Aloo', 'PERSON'),
 ('and', 'O'),
 ('Purno', 'PERSON'),
 ('Yusgiantoro', 'PERSON'),
 ('USA', 'LOCATION'),
 ('Ibrahim', 'PERSON'),
 ('Baah', 'PERSON'),
 ('Alolom', 'PERSON'),
 ('or', 'O'),
 ('Ahmad', 'PERSON'),
 ('Fahad', 'PERSON'),
 ('Al', 'PERSON'),
 ('Ahmad', 'PERSON'),
 ('in', 'O'),
 ('the', 'O'),
 ('Sabah', 'PERSON'),
 ('Purnomo', 'PERSON'),
 ('Khorabi', 'PERSON'),
 ('Elie', 'PERSON')]

我想加入每个人的名字和姓氏,并得到如下列表:

persons_names = ['Micheal Jaf Bin Aloo',
         'Purno Yusgiantoro',
         'Ibrahim Baah Alolom',
          'Ahmad Fahad Al Ahmad ' 
         'Sabah Purnomo Khorabi Elie'] 

Tags: binpersonalahmadmichealibrahimfahadsabah
2条回答

你能做到的

last=None
grouped=[]
for word,t in myList:
    if t==last:
        grouped[-1].append(word)
    else:
        grouped.append([t,word])
        last=t
person_names=[" ".join(i[1:]) for i in grouped if i[0]=="PERSON"]

您在问题中发布的内容不是有效的python对象。它很可能是某物的str版本。下面的代码段假设每个单词的第一个元素都转换为字符串。你知道吗

其思想是使用itertools.groupby。它根据给定的条件对相邻元素进行分组,并一次返回一组。剩下的就是用一个空间把它们连接起来。你知道吗

from itertools import groupby

lst = [("Micheal", 'PERSON'),("Jaf", 'PERSON'), ("Bin", 'PERSON'),("Aloo", 'PERSON'),("and", 'O'),("Purno", 'PERSON'), ("Yusgiantoro", 'PERSON'),("USA", 'LOCATION'),("Ibrahim", 'PERSON'), ("Baah", 'PERSON'), ("Alolom", 'PERSON'),("or", 'O'),("Ahmad", 'PERSON'),("Fahad", 'PERSON'),("Al", 'PERSON'),("Ahmad", 'PERSON')]

print [" ".join(x[0] for x in names) 
          for typ, names in groupby(lst, key=lambda x: x[1]) 
          if typ == "PERSON"]

输出:

['Micheal Jaf Bin Aloo', 'Purno Yusgiantoro', 'Ibrahim Baah Alolom', 'Ahmad Fahad Al Ahmad']

相关问题 更多 >