Python 3从辩论文件中提取候选词

时间:2012-11-04 23:15:13

标签: python

这是我的第一篇文章,所以如果我做错了什么我很抱歉。也就是说,我搜索了这个问题,发现了一些类似的东西,由于OP没有提供足够的信息而从未得到过回答。这也是家庭作业,所以我只是在寻找一个提示。我真的想靠自己来做这件事。

我需要阅读辩论文件(.txt),然后拉出并存储一个候选人所说的放在文字云中的所有行。该文件格式应该有所帮助,但我在说明如何做到这一点。提示是每次新人说话时,他们的名字后跟冒号是第一行中的第一个单词。但是,候选人的数据可以跨越多条线。我应该分别存储每个人的线。以下是该文件的示例:

  LEHRER:这场辩论和接下来的三场 - 两场总统,一场副局长   总统 - 由总统委员会赞助   争论。今晚的90分钟将是关于国内问题和意志   遵循委员会设计的格式。大致会有六个   15分钟段,第一个问题有两分钟答案,   然后公开讨论每个部分的剩余部分。

     先生们,欢迎你们俩。让我们开始经济,第一部分,   让我们从工作开始。有什么主要区别   你们俩有关如何创造新工作的方法吗?

     

LEHRER:你有两分钟。你们每个人都有两分钟的时间开始。一个   总统先生,你已经决定抛硬币,先走了。

     

奥巴马:嗯,非常感谢,吉姆,这个机会。我想要   感谢罗姆尼州长和丹佛大学为您提供的   款待。

     

今晚有很多要点,但最多   重要的是20年前我成为地球上最幸运的人   因为米歇尔奥巴马同意嫁给我。

到目前为止,这是我所拥有的功能:

def getCandidate(myFile):    
    file = open(myFile, "r")
    obama = []
    romney = []
    lehrer = []
    file = file.readlines()

我只是不确定如何迭代数据,以便正确地分隔每个人的单词。我创建了一个虚拟文件来创建单词云,我能够做到这一点,所以我想知道的是如何提取我需要的信息。

谢谢!如果我能提供更多信息,请告诉我。这是一门Python课程。

编辑:从响应中添加新代码。这在一定程度上起作用,但只抓住每个候选人的回应的第一行,而不是他们的整个回应。我需要编写代码,继续在该候选项下存储每一行​​,直到新名称位于一行的开头。

def getCandidate(myFile, candidate):   
    file = open(myFile, "r")
    OBAMA = []
    ROMNEY = []
    LEHRER = []
    file = file.readlines()
    for line in file:
        if line.startswith("OBAMA:"):
            OBAMA.append(line)
        if line.startswith("ROMNEY:"):
            ROMNEY.append(line)
        if line.startswith("LEHRER:"):
            LEHRER.append(line)
    if candidate == "OBAMA":
        return OBAMA
    if candidate == "ROMNEY":
        return ROMNEY
编辑:我现在有了一个新问题。如何概括文件以便我可以在两个人和一个主持人之间打开任何辩论文件?我在这个问题上遇到了很多麻烦。

我已经给了一个提示来查看该行的开头,看看每行的最后一个单词是否以“:”结尾,但我仍然不知道该怎么做。我尝试在空格上分割每一行,然后查看该行中的第一项,但这就​​是我得到的。

1 个答案:

答案 0 :(得分:2)

提示是这样的:拆分行后,迭代它们并检查每个候选的字符串函数 startswith ,然后追加。

对文件的迭代非常简单:

for row in file:
    do_something_with_row

编辑: 为了保持线条直到你找到一个新的候选人,你必须跟踪最后一个候选人的变量,如果你没有在行的开头找到任何匹配,你坚持使用与之前相同的候选人。

if line.startswith('OBAMA'):
    last_seen=OBAMA
    OBAMA.append(line)
elif blah blah blah

else:
    last_seen.append(line)

顺便说一句,我会更改函数的定义:不是取候选人的名字而只返回他的行,最好返回一个字典,其候选名称为键,其行为值,所以你不需要多次解析文件。当你使用更大的文件时,这可能是一个救星。

相关问题