| messages |
| ------------------------------------ |
| 1 | 'one two three|||four five' |
| ------------------------------------ |
| 2 | 'six foo|||bar' |
------------------------------------
А еще есть датасет General Inquirer, в котором около 12к слов размечены по категориям:
entry | pos | neg | weak | strong
---------------------------------
foo | 0 | 1 | 1 | 0 |
---------------------------------
bar | 1 | 0 | 1 | 0 |
---------------------------------
И мне нужно для каждого юзера разметить все твиты согласно второму датасету. Я себе это так представляю: токенизирую строку с твитами, а потом ищу вхождение каждого токена во второй датасет, потом усредняю. Но та реализация, которая у меня есть сейчас, крайне медленная из-за того, что я криворукий мудак:
def inq_params(statuses):
count = len(statuses.split('|||'))
statuses = statuses.replace('|||', ' ')
tokens = tokenizer.tokenize(statuses)
print(len(tokens))
dfs = [inq[inq['Entry'] == token] for token in tokens]
return reduce(lambda x, y: x.add(y), dfs)
inq - второй датасет, собственно
А вызов идет так:
data['messages'].apply(inq_params)
Может кто-то предложит адекватное решение?
1) Делаешь explode по токенам первого датасета, у тебя пары ключ твита - токен. 2) Джойнишь датасеты по токену 3) профит
Обсуждают сегодня