Как посчитать количество вхождений каждого слова в предложении для каждой оценки предложения? - PullRequest
0 голосов
/ 05 июля 2018

У меня есть документ опроса пользователей:

Score    Comment
8        Rapid bureaucratic affairs. Reports for policy...
4        There needs to be communication or feed back f...
7        service is satisfactory
5        Good
5        There is no
10       My main reason for the product is competition ...
9        Because I have not received the results. And m...
5        no reason

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

Моя идея состоит в том, чтобы составить таблицу слов (или словаря «вектор слов»), которая будет содержать оценки, с которыми она связана, и количество раз, когда оценка была связана с этим предложением.

Примерно так:

Word        Score   Count
Word1:      7       1
            4       2
Word2:      5       1
            9       1
            3       2
            2       1
Word3:      9       3
Word4:      8       1
            9       1
            4       2
...         ...     ...

Тогда для каждого слова средний балл является средним из всех баллов, с которыми связано слово.

Для этого мой код следующий:

word_vec = {}
# col 1 is the word, col 2 is the score, col 3 is the number of times it occurs

for i in range(len(data)):
    sentence = data['SurveyResponse'][i].split(' ')
    for word in sentence:
        word_vec['word'] = word
        if word in word_vec:
            word_vec[word] = {'Score':data['SCORE'][i], 'NumberOfTimes':(word_vec[word]['NumberOfTimes'] += 1)}
        else:
            word_vec[word] = {'Score':data['SCORE'][i], 'NumberOfTimes':1}

Но этот код выдает мне следующую ошибку:

File "<ipython-input-144-14b3edc8cbd4>", line 9
    word_vec[word] = {'Score':data['SCORE'][i], 'NumberOfTimes':(word_vec[word]['NumberOfTimes'] += 1)}
                                                                                                  ^
SyntaxError: invalid syntax

Может кто-нибудь показать мне правильный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вы можете использовать счетчик сбора. Позволяет подсчитать количество вхождений каждого слова.

Вот пример:

 from collections import Counter

 c = Counter(["jsdf","ijoiuj","je","oui","je","non","oui","je"])

 print(c)

Результат:

Counter({'je': 3, 'oui': 2, 'ijoiuj': 1, 'jsdf': 1, 'non': 1})

Вы извлекаете слова из документа и помещаете их в список. Наконец, этот список будет обработан счетчиком для подсчета появления каждого слова.

0 голосов
/ 05 июля 2018

Попробуйте этот кусок кода

word_vec = {}
# col 1 is the word, col 2 is the score, col 3 is the number of times it occurs

for i in range(len(data)):
    sentence = data['SurveyResponse'][i].split(' ')
    for word in sentence:
        word_vec['word'] = word
        if word in word_vec:
            word_vec[word]['Score'] += data['SCORE'][i] # Keep accumulating the total score for each word, would be easier to find the average score later on
            word_vec[word]['NumberOfTimes'] += 1
        else:
            word_vec[word] = {'Score':data['SCORE'][i], 'NumberOfTimes':1}

Чтобы увеличить значение NumberOfTimes, вы можете напрямую увеличить его следующим образом word_vec[word]['NumberOfTimes'] += 1

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