我是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']
答案 0 :(得分:2)
您在问题中发布的内容不是有效的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']
答案 1 :(得分:0)
你可以做到
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"]