показать дубликаты из списка в операции подсчета python - PullRequest
3 голосов
/ 26 марта 2020

у меня есть corpus_text со строкой текста, затем я преобразую это в список с разбивкой по словам

мне нужно сосчитать все слова, но мой алгоритм считает только уникальные

corpus_test = 'cat dog tiger tiger tiger cat dog lion'
corpus_test = [[word.lower() for word in corpus_test.split()]]
word_counts = defaultdict(int)
for rowt in corpus_test:
    for wordt in rowt:
        word_counts[wordt] += 1

        v_count = len(word_counts.keys())

        words_list = list(word_counts.keys())

        word_index = dict((word, i) for i, word in enumerate(words_list))

        index_word = dict((i, word) for i, word in enumerate(words_list))

и я хочу показать вам результаты этого алгоритма

v_count
#4

words_list
#['cat', 'dog', 'tiger', 'lion']

word_counts
#defaultdict(int, {'cat': 2, 'dog': 2, 'tiger': 3, 'lion': 1})

word_index
#{'cat': 0, 'dog': 1, 'tiger': 2, 'lion': 3}

index_word
#{0: 'cat', 1: 'dog', 2: 'tiger', 3: 'lion'}

мне нужно иметь:

index_word
#{0: 'cat', 1: 'dog', 2: 'tiger', 3: 'tiger', 4: 'tiger', 5: 'cat', 6: 'dog', 7:'lion'}

и

v_count
#8

Ответы [ 5 ]

3 голосов
/ 26 марта 2020

с существующим алгоритмом, вы можете попробовать это.

index_word = dict((i, word) for i, word in enumerate(rowt)) 
v_count = len(index_word)
3 голосов
/ 26 марта 2020

Если вам нужна карта индексов для слов, просто ... сделайте это?

index_word = dict(enumerate(word.lower() for word in corpus_test.split()))

Или вам нужно хранить списки / наборы индексов в вашем word_index, диктат не является multimap, он отображает один ключ на одно значение (хотя любое из них может быть составным).

Также word_counts может быть collection.Counter, имеет полезные функции (например, topN или возможность репликации / развернуть предметы по их количеству).

2 голосов
/ 26 марта 2020

Вы можете использовать:

corpus_test = 'cat dog tiger tiger tiger cat dog lion'
words=dict(enumerate([w.lower() for w in corpus_test.split()]))
print(words)
print(len(words))
# {0: 'cat', 1: 'dog', 2: 'tiger', 3: 'tiger', 4: 'tiger', 5: 'cat', 6: 'dog', 7: 'lion'}
# 8

Демо

2 голосов
/ 26 марта 2020

Вы можете использовать enumerate для index_list

corpus_test = 'cat dog tiger tiger tiger cat dog lion'
index_list=dict(enumerate(corpus_test.split()))
#{0: 'cat', 1: 'dog', 2: 'tiger', 3: 'tiger', 4: 'tiger', 5: 'cat', 6: 'dog', 7:'lion'}
1 голос
/ 26 марта 2020

Вы также можете достичь, используя itertools count() метод.

from itertools import count

corpus_test = 'cat dog tiger tiger tiger cat dog lion'
index_list = dict(zip(count(), corpus_test.split()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...