首页 > 解决方案 > 我想将一些文本附加到新列表中,直到列表符合特定字符串

问题描述

我正在预处理特朗普-希拉里辩论脚本文本以创建 3 个列表,其中包括每个 3 人的说法。整个脚本是 1046 个列表

部分文字如下

for i in range(len(loaded_txt)):
    print("load_text[i]",load_text[i])

loaded_txt[i] TRUMP:不,它会完全帮助你。我们必须做的一件事:废除并取代被称为奥巴马医改的灾难。它正在摧毁我们的国家。它正在摧毁我们的企业、我们的小企业和我们的大企业。我们必须废除和取代奥巴马医改。

加载的_txt[i]

load_txt[i] 你看看在 17 年将花费我们的数字,这是一场灾难。如果我们不废除和替换——现在,它可能会因自身的重量而死。但奥巴马医改必须取消。这是——保费上涨了60%、70%、80%。明年他们将上涨超过 100%。

加载的_txt[i]

load_txt[i] 我真的很高兴保费已经开始了——至少人们看到了正在发生的事情,因为她想保留奥巴马医改,她想让它变得更糟,而且不能变得更糟。以最昂贵的价格提供糟糕的医疗保健。我们必须废除和取代奥巴马医改。

加载的_txt[i]

load_txt[i] WALLACE:克林顿国务卿,同样的问题,因为在这一点上,社会保障和医疗保险将用完,信托基金将用完钱。作为总统,你会招待吗?你会考虑一个大交易,包括增加税收和削减福利的交易,以试图挽救这两个项目吗?


我试图将列表附加到 TRUMP_script_list = [],如果它在这样的列表中有“TRUMP:”

TRUMP_script_list=[]

for i in range(len(loaded_txt)):
    if "TRUMP:" in loaded_txt[i]:
        TRUMP_script_list.append(loaded_txt[i])

但问题是没有名字的列表。但是没有名字的文字应该是特朗普的说法,如果它是在带有特朗普名字的文字下,UNTIL list 遇到包含非特朗普名字的文字(华莱士或克林顿)

我尝试了“while”循环,如果列表包含其他名称(华莱士,克林顿),该循环将被终止。但未能实施。

我怎样才能实现这个算法或任何其他好主意?

标签: pythontextdata-science

解决方案


定义函数以获取标题:

def get_title(text, titles, previous_title):
    for title in titles:
        if title in text:
            return title
    return previous_title

定义参考字典:

name_script_list = {'TRUMP:':TRUMP_script_list, 'HILLARY:':HILLARY_script_list, 'WALLACE:':WALLACE_script_list}
titles = set(name_script_list.keys())
title = ''

在 for 循环中遍历列表:

for text in loaded_txt:
    title = get_title(text, titles, title)
    name_script_list[title].append(text)

基本上这个想法是 get_title() 获取一系列标题来尝试,以及最后一个标题是什么。如果出现任何标题,则返回该标题。否则,它返回之前的标题

我将初始标题初始化为''. 只要第一行文本中有标题,这将起作用。如果没有,它会抛出一个错误。对此的修复取决于您希望它如何实现。您只是不想考虑这种情况(表示loaded_txt 中的错误,或可能的标题列表)?是否要将特定人员的姓名设置为默认的初始头衔?你想跳过行直到最初的标题吗?有很多方法,我不确定你更喜欢哪一种


推荐阅读