Слова, используемые в мешочке слов, а также частота в токенизаторе keras - PullRequest
1 голос
/ 26 мая 2020

Я просто хочу знать, как идентифицировать или получить список слов вместе с их частотой, которые считаются для набора слов токенизатором keras. Рассмотрим приведенный ниже пример

from tensorflow.keras.preprocessing import text
my_list = [["a", "a", "a", "b","c"], ["b", "c","c", "b", "c" "a"]]

Здесь я выбираю размер словаря 2. Один будет использоваться для заполнения, а другой будет использоваться словами с наибольшей частотой в my_list.

m_tokenizer = text.Tokenizer(num_words=2)
m_tokenizer.fit_on_texts(my_list)

мешок слов с использованием токенизатора

bow = tokenizer.text_to_matrix(my_list)

лук

array([[0., 1.],
         [0., 1.]])

Я могу легко получить dict всех слов вместе с их индексацией, которые токенизатор использует для внутренних целей. m_tokenizer.word_index

{'a': 1, 'c': 2, 'b': 3}

Теперь я хочу знать, когда я выбрал num_words = 2, какие слова используются токенизатором вместе с их частотой в корпусе для создания мешка слов? (Очевидно, первое - для заполнения) Скажем, например, здесь используется максимальная частота в my_list, и она используется для формирования лука. Теперь у меня есть метод, который поможет мне получить dict (или может быть что-то еще), который дает мне

 {"a":4} # as count of a is 4 is my_list

Ответы [ 2 ]

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

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

bow = m_tokenizer.texts_to_matrix(my_list, mode='count')
req_dict = {}
for key,value in m_tokenizer.word_index.items():
   if int(value) < num_words:
       req_dict[key] = int(bow[0][int(value)])
print(req_dict)
1 голос
/ 26 мая 2020

вы можете получить доступ к счетчику ВСЕХ слов, найденных в исходном тексте, используя m_tokenizer.word_counts. он возвращает OrderedDict([('a', 4), ('b', 3), ('c', 4)])

, если вы хотите ограничить словарь максимальным значением num_words, которое вы определили, вы можете сделать автоматически:

for i, (word, count) in enumerate(m_tokenizer.word_counts.items()):
    if i < m_tokenizer.num_words-1:
        print((word, count)) # print or store in an object
...