遍历 python 3 字符串列表,将每个项目与其他项目匹配,并返回最大的匹配项



我有一个python列表。在此列表中,我需要将每个项目与其他项目进行比较,并将较短的字符串替换为最长的字符串。

编辑:我有一个使用Spacy模块获得的人名列表,它是实体提取。我得到一个列表,有时是全名,有时是名称的一部分。我想规范化此列表,使其始终是全名(或文章中最长的名称(。这将帮助我确定文章中最突出/提到的人是谁。

small_example = ['David', 'David Stevens', 'Steve Martin' ]
small_example_outcome = [ 'David Stevens','David Stevens', 'Steve Martin'] 

完整示例:

person_list = [ 'Omarosa Manigault Newman', 'Manigault Newman','Trump', 'Apprentice', 'Mark Burnett', Manigault Newman','TAPES', 'Omarosa', 'Donald J. Trump','Omarosa', 'Donald J. Trump', 'Jacques Derrida', 'Derrida', 'Sigmund Freud', 'Mark Burnett', 'Manigault Newman', 'Manigault Newman', 'Trump', 'Mark Burnett' ]
Ideally what I'd have in the end is:       
corrected_list = [ 'Omarosa Manigault Newman', 'Omarosa Manigault Newman', 'Donald J. Trump', 'Apprentice', 'Mark Burnett', 'Omarosa Manigault Newman', 'TAPES', 'Omarosa', 'Donald J. Trump', 'Omarosa Manigault Newman', 'Donald J. Trump', 'Jacques Derrida', 'Jacques Derrida', 'Sigmund Freud', 'Mark Burnett', 'Omarosa Manigault Newman', 'Omarosa Manigault Newman', 'Donald J. Trump', 'Mark Burnett' ]

但是像这样的列表也可以工作:

normalized_list = ['Omarosa Manigault Newman', 'Apprentice', 'Mark Burnett', 'TAPES', 'Jacques Derrida', 'Donald J. Trump', 'Sigmund Freud']

我认为您要查找的是每个字符串是否是列表中另一个字符串的子字符串?

如果列表很短,就像这个一样,我们可以通过愚蠢的二次搜索来做到这一点:

corrected_list = []
for person in person_list:
matches = (other for other in person_list if person in other)
longest = max(matches, key=len)
corrected_list.append(longest)

如果你的列表很大,那就太慢了,我们需要做一些更聪明的事情,比如构建前缀和后缀尝试。但对于这么小的东西,我认为这是矫枉过正。

相关内容

  • 没有找到相关文章

最新更新