Подсчет частот слов каждого слова в списке в кадре данных - PullRequest
0 голосов
/ 04 мая 2020

Я создал список слов, связанных с определенной категорией. Например:

care = ["safe", "peace", "empathy"]

И у меня есть информационный кадр, содержащий речи, которые в среднем состоят из 450 слов. Я посчитал количество совпадений для каждой категории, используя эту строку кода:

df['Care'] = df['Speech'].apply(lambda x: len([val for val in x.split() if val in care]))

Что дает мне общее количество совпадений для каждой категории.

Однако мне нужно просмотреть частоты каждого слова в списке. Я попытался использовать этот код для решения моей проблемы.

df.Tal.str.extractall('({})'.format('|'.join(auktoritet)))\
                           .iloc[:, 0].str.get_dummies().sum(level=0)

Я пробовал разные методы, но проблема в том, что я всегда включал частичные совпадения. Например, молоток считается за ветчину.

Есть идеи, как это решить?

Ответы [ 3 ]

1 голос
/ 04 мая 2020

Вы можете использовать Счетчик, который доступен из пакета коллекций

from collections import Counter
word_count=Counter()
for line in df['speech']:
   for word in line.split(' '):
      word_count[word]+=1

, он будет хранить количество всех слов в word_count. Затем Вы можете использовать

word_count.most_common()

, чтобы увидеть слова с наибольшей частотой.

0 голосов
/ 04 мая 2020

Я основываюсь на ответе Aka sh, и мне удалось получить частоты заранее заданных слов, сохраненных в списке, а затем подсчитать их в кадре данных, просто добавив строку.

from collections import Counter

word_count=Counter()
for line in df['Speech']:
   for word in line.split(' '):
       if word in care:
           word_count[word]+=1

word_count.most_common()
0 голосов
/ 04 мая 2020

Вы можете преобразовать каждое слово в кортеже с 1 в качестве второго элемента ('word', 1) и суммировать его для каждого слова в списке.

На выходе будет список кортежей со словами и частотами:

[('word1', 3), ('word2', 10) ... ]

Это основная идея.

...