Мы пытаемся связать строки идентификаторов, чтобы все идентификаторы, относящиеся друг к другу, имели одинаковый идентификатор разговора, но это не работает - PullRequest
0 голосов
/ 06 мая 2019

Мы работаем с базой данных Twitter, но она очень большая, поэтому мы создали обучающий набор, который выглядит так же, но гораздо меньше и его легче проверить.

Мы работаем в Python, и у нас есть30 удостоверений личности.Некоторые из этих идентификаторов являются ответом на другой идентификатор, поэтому несколько идентификаторов могут быть связаны друг с другом и вести разговор вместе.

Вот как выглядит кадр данных всех идентификаторов без каких-либо изменений (df_all): df_all (1/2) df_all (2/2)

И это кадр данных только твитов KLM (df_klm): df_klm

Когда мы пытаемся запустить наш код, он, похоже, не работает.Идентификаторы диалога кажутся неправильными.

Мы сделали 2 функции.

Обратная петля Convlink

def ConvLinkRev(KLM, ReplyID, ALL):
    for index, row in KLM.iterrows():
        ConvID = max(ALL['ConversationID'])
        if row['id_str'] == ReplyID:
            ALL['ConversationID'][index] = ConvID
            if ALL['in_reply_to_status_id_str'][index] != '':
                ConvLink(KLM.loc[[index]], ALL)
                break
            else:
                break
        else:
            pass

Петля Convlink

def ConvLink(KLM, ALL):
    for index1, row1 in KLM.iterrows():
        ConvID = max(ALL['ConversationID'])
        for index2, row2 in ALL.iterrows():
            if row2['id_str'] == row1['in_reply_to_status_id_str']:
                if ALL['ConversationID'][index2] == 0 & ALL['ConversationID'][index1] == 0:
                    ALL['ConversationID'][index1] = ConvID + 1
                    ALL['ConversationID'][index2] = ConvID + 1
                    if row2['in_reply_to_status_id_str'] != '':
                        ConvLinkRev(KLM, row2['in_reply_to_status_id_str'], ALL)
                    else:
                        break
                elif ALL['ConversationID'][index2] == 0:
                    ALL['ConversationID'][index2] = ConvID 
                    if row2['in_reply_to_status_id_str'] != '':
                        ConvLinkRev(KLM, row2['in_reply_to_status_id_str'], ALL)
                    else:
                        break
            else:
                pass
    return ALL

Это результаты при запуске функций:

df_all после запуска функций (1/2) df_all после запуска функций (2/2)

Мы знаем, что наши функции не верны, и мы отчасти знаем, где это идет не так, но мы просто не знаем, как это исправить.Кто-нибудь, кто может помочь нам?Не стесняйтесь задавать вопросы, если вы не понимаете что-то из обеих функций.

Спасибо за помощь заранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...