3

これは私の最初の投稿ですので、何か間違ったことをしてすみません。そうは言っても、私は質問を検索し、OPが十分な情報を提供していないために答えられなかった同様の何かを見つけました。これも宿題なので、ヒントを探しています。本当に自分で手に入れたいです。

ディベートファイル(.txt)を読み取り、1人の候補者がワードクラウドに入れると言っているすべての行をプルして保存する必要があります。ファイル形式が役立つはずですが、これを行う方法については空白にしています。ヒントは、新しい人が話すたびに、名前の後にコロンが続くことが最初の行の最初の単語であるということです。ただし、候補者のデータは複数の行にまたがることができます。私は一人一人のラインを別々に保管することになっています。ファイルのサンプルは次のとおりです。

レーラー:この討論と次の3つ(2つの大統領、1つの副大統領)は、大統領討論委員会によって後援されています。今夜の90分は国内問題についてであり、委員会によって設計された形式に従います。約15分のセグメントが6つあり、最初の質問に対する回答は2分で、その後、各セグメントの残りの部分についてオープンディスカッションが行われます。

紳士、お二人へようこそ。経済を始めましょう、セグメント1、そして仕事から始めましょう。新しい仕事をどのように作成するかについて、2人の主な違いは何ですか?

レーラー:2分あります。開始するのに2分あります。コイントスが決まった、大統領、あなたが先に行く。

オバマ:そうですね、ジム、この機会をありがとうございました。ロムニー知事とデンバー大学のおもてなしに感謝します。

今夜言いたいことはたくさんありますが、最も重要なのは、ミシェル・オバマが私と結婚することに同意したため、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

編集:私は今、新しい質問があります。2人とモデレーターの間でディベートファイルを開くことができるように、ファイルを一般化するにはどうすればよいですか?私はこれで多くの問題を抱えています。

行の先頭を見て、各行の最後の単語が「:」で終わるかどうかを確認するためのヒントが与えられましたが、これを行う方法がまだわかりません。各行をスペースで分割してから、行の最初の項目を見てみましたが、それは私が得た限りです。

4

1 に答える 1

2

The hint is this: after you split your lines, iterate over them and check with the string function startswith for each candidate, then append.

The iteration over a file is very simple:

for row in file:
    do_something_with_row

EDIT: To keep putting the lines until you find a new candidate, you have to keep track with a variable of the last candidate seen and if you don't find any match at the beginning of the line, you stick with the same candidate as before.

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

else:
    last_seen.append(line)

By the way, I would change the definitio of the function: instead of take the name of the candidate and returning only his lines, it would be better to return a dictionary with the candidate name as keys and their lines as values, so you wouldn't need to parse the file more than once. When you will work with bigger file this could be a lifesaver.

于 2012-11-04T23:45:01.413 に答える