コード例 #1
0
ファイル: Conversation.py プロジェクト: dhia1997/booksoup
class Conversation:
    def __init__(self, path, interval="month"):
        with open(path, 'r') as f:
            self.__soup = BeautifulSoup(f.read(), "html.parser")
            self.messages = []
            self.name = self.__soup.find("title").text.replace(
                "Conversation with ", "")
            message_headers = self.__soup.find_all("div",
                                                   class_="message_header")
            self.__span_meta = [
                m.find("span", class_="meta").text for m in message_headers
            ]
            self.__fbt = FbTime(self.__span_meta)

            for m in self.__soup.find_all("div", class_="message"):
                span = m.find("span", class_="meta")
                self.messages.append(
                    Message(
                        m.find("span", class_="user").text,
                        self.__fbt.span_meta_to_date(span.text, interval),
                        span.text, m.next_sibling.text))

            self.__sent = Sentiment(self.messages, self.__fbt)
            self.participants = self.__scrape_participants()

    def interaction_freq(self):
        times = self.__fbt.generate_time_dict()

        for date_str in self.__span_meta:
            time = date_str.split("at ")[1][:5]
            hour = time.split(":")[0]
            times[hour + ":00"] += 1
        return times

    def interaction_timeline(self, name):
        dates = self.__fbt.generate_date_dict()
        for message in self.messages:
            if message.name == name:
                dates[message.date] += 1
        return dates

    def sentiment_timeline(self, name):
        return self.__sent.sentiment_timeline(name)

    def avg_sentiment(self, name):
        return self.__sent.avg_sentiment(name)

    def __scrape_participants(self):
        users = []
        for user_span in self.__soup.find_all("span", "user"):
            user_name = user_span.text
            if user_name not in users:
                users.append(user_name)
        return users
コード例 #2
0
ファイル: Conversation.py プロジェクト: JorinRBM/booksoup
class Conversation:
    def __init__(self, path, interval="month"):
        with open(path, 'r') as f:
            self.__soup = BeautifulSoup(f.read(), "html.parser")
            self.messages = []
            self.name = self.__soup.find("title").text.replace(
                "Conversation with ", "")
            message_headers = self.__soup.find_all("div",
                                                   class_="message_header")
            self.__span_meta = [
                m.find("span", class_="meta").text for m in message_headers
            ]
            self.__fbt = FbTime(self.__span_meta)

            for m in self.__soup.find_all("div", class_="message"):
                span = m.find("span", class_="meta")
                self.messages.append(
                    Message(
                        m.find("span", class_="user").text,
                        self.__fbt.span_meta_to_date(span.text, interval),
                        span.text, m.next_sibling.text))

            self.__sent = Sentiment(self.messages, self.__fbt)
            self.participants = self.__scrape_participants()

    def interaction_freq(self):
        return self.__fbt.interaction_freq()

    def interaction_timeline(self, name):
        return self.__fbt.interaction_timeline(name, self.messages)

    def sentiment_timeline(self, name, interval):
        return self.__sent.sentiment_timeline(name, interval)

    def avg_sentiment(self, name):
        return self.__sent.avg_sentiment(name)

    def get24HourTime(self, elem):
        return self.__fbt.get24HourTime(elem)

    # Returns a list of participants in the conversation.
    def __scrape_participants(self):
        users = []
        for user_span in self.__soup.find_all("span", "user"):
            user_name = user_span.text
            if user_name not in users:
                users.append(user_name)
        return users