python - 使用特定标签连接列表的各个部分并在 Python 中创建新列表

标签 python list

我是 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/

相关文章:

矩阵的 Python 左乘与稀疏矩阵的逆

python - 使用 Python 将包含复杂日期值的字符串转换为日期

c# - 从 Active Directory 中检索包含电子邮件地址的 C# 列表

Python - 连续获取整个列表对象的最简单方法

Java - 链表初始化不正确

python - 如何在不 reshape 的情况下在 tensorflow 中将向量和矩阵相乘?

python - 检查单个元素是否包含在 Numpy 数组中

Python向API发送请求

python - Python 中 list.index(x) 的复杂性

java - 如何在 Java 中使我的 JSON 更好?严格使用 - org.json.JSON