Мы работаем с базой данных 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)
Мы знаем, что наши функции не верны, и мы отчасти знаем, где это идет не так, но мы просто не знаем, как это исправить.Кто-нибудь, кто может помочь нам?Не стесняйтесь задавать вопросы, если вы не понимаете что-то из обеих функций.
Спасибо за помощь заранее.