我是 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']
最佳答案
您在问题中发布的内容不是有效的 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']
关于python - 使用特定标签连接列表的各个部分并在 Python 中创建新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38859823/