Перегруппировать документы диалога в Dataframe - PullRequest
0 голосов
/ 30 января 2019

Я планирую проанализировать некоторые документы конференции, и перед анализом мне нужно переставить эти документы во фрейм данных.Формат, который я ожидаю, заключается в том, что для каждой строки данных первое значение - это динамик, а второе - это высказывание этого оратора.Например, [«Джо», «У меня только что были тако».].Образец документа может быть достигнут здесь .Ниже приведен прогресс:

file = open('the document','r') 
Name = []
sentence = []

for line in file:
    if line.find("Column") != -1:
        continue
    if line.find("Section") or line.find("Index") or line.find("Home Page"):
        continue
    if line.find(':') != -1:
        tokens = line.split(":")
        Name.append(tokens[0])
    else:
        sentence.append(line + " ")

Мой первый вопрос заключается в том, как я могу объединить говорящего и высказывание в одном списке, а затем искать следующего человека.Второй вопрос: есть ли лучший способ избавиться от контента до Oral Answers to Questions и после The House divided: Ayes 240, Noes 329.Division No. 54][9.59 pm.

Я ценю любую помощь.

1 Ответ

0 голосов
/ 30 января 2019

Здесь я предложил простое решение.Это простое решение состоит из трех частей:

  • Когда есть пустая строка
  • Когда строка заканчивается на :
  • В противном случае

Вот код:

import re
from collections import defaultdict


def clean_speaker(sp):
    sp = re.sub(r"(\(\w+\))", "", sp) #remove single words within parentheses
    sp = re.sub(r"(\d+\.?)", "", sp) #remove digits such as 1. or 2.
    return sp.strip()



document = []
with open('the document','r') as fin:
    foundSpeaker = False
    dialogue = defaultdict(str)
    for line in fin.readlines():
        line = line.strip() #remove white-spaces
        #----- when line is empty -----
        if not line:
            dialogue = defaultdict(str)
            foundSpeaker = False
        #----- When line ends with : -----
        elif line[-1] == ":":
            if dialogue:
                document.append(dialogue)
                dialogue = defaultdict(str)
            foundSpeaker = True
            dialogue["Speaker"] = clean_speaker(line[:-1])
        #----- Otherwise -----
        else:
            if foundSpeaker:
                dialogue["Sentence"] += " " + line
            else:
                if dialogue:
                    document.append(dialogue)
                    dialogue = defaultdict(str)
                    foundSpeaker = False
                continue

Теперь переменная document содержит все диалоги в данном файле ... это список словарей, где каждый словарь имеет только два ключа (speakersentence).Итак, мы можем посмотреть, что внутри document, вот так:


for d in document:
    for key, value in d.items():
        print(key+":", value)

Или вы можете сделать что-то более умное, превратив этот список в pandas.dataframe и записав этот фрейм данных в csv следующим образом:

import pandas as pd

pd.DataFrame.from_dict(document).to_csv('document.csv')

Теперь откройте document.csv, и вы найдете все в порядке ... Надеюсь, это поможет вам

...