Почему моя функция выводит на печать кратные?

У меня такой код:

def sent_dictionary(text):
    token_dictionary = {}
    both_keys = in_both.keys()

    sentences = sent_tokenize(text)
    tokens = word_tokenize(str(sentences))

    for token in tokens:
        if token in both_keys:
            token_dictionary[token]=in_both[token]
        print(token_dictionary)

У меня есть словарь in_both, который содержит слова, которые есть в словаре, и мой текст, который выглядит так:

{'think': -0.125, 'seem': 0.0, 'able': 0.25, 'make': 0.0, 'correct': 0.0, 'understand': 0.125, 'words': -0.125, 'appropriate': 0.0, 'confuse': -0.375, 'underactive': -0.625, ... }

Полный словарь здесь

Я хочу, чтобы моя функция принимала ввод текста, разбивалась на предложения, а затем на слова. Затем, если слово также находится в словаре in_both, поместите его в token_dictionary вместе со значением, которое находится в in_both.

Когда я пытаюсь использовать эту функцию, происходит следующее:

sent_dictionary("His father was a successful local businessman and his mother was the daughter of a landowner. Shakespeare is widely regarded as the greatest writer in the English language and the world's pre-eminent dramatist. He is often called England's national poet and nicknamed the Bard of Avon")

Результат:

{}
{}
{}
{}
{}
{}
{}
{}
{}
{'language': 0.0}
{'language': 0.0}
{'language': 0.0}
{'language': 0.0}
{'language': 0.0}
{'language': 0.0}
{'language': 0.0}
{'language': 0.0}
{'language': 0.0}
{'language': 0.0}
{'language': 0.0}
{'language': 0.0}
{'language': 0.0}
{'language': 0.0, 'often': 0.25}
{'language': 0.0, 'often': 0.25}
{'language': 0.0, 'often': 0.25}
{'language': 0.0, 'often': 0.25}
{'language': 0.0, 'often': 0.25}
{'language': 0.0, 'often': 0.25}
{'language': 0.0, 'often': 0.25}

Я хочу, чтобы результат выглядел так:

{'language': 0.0, 'often': 0.25}

Теперь, когда я думаю об этом, в моем тексте есть кратные, с которыми я работаю. Поэтому я не хочу их исключать, мне нужно, чтобы все токены были учтены.

Вы вызываете print во внешнем цикле вложенного цикла for, возможно, вы захотите назвать его после, цикл for завершен.

user3483203 02.05.2018 00:44

Проблема в том, что у вас есть print(token_dictionary) внутри цикла for. Итак, вы снова и снова распечатываете весь словарь. Просто удалите эту строку, чтобы это произошло только после завершения цикла.

abarnert 02.05.2018 00:45

Что вы имеете в виду под «учитываются все жетоны»?

das-g 02.05.2018 00:45

Если вы хотите обрабатывать повторяющиеся ключи, суммируя все значения для каждого ключа, вы должны использовать defaultdict(float) или Counter (оба в модуле collections в stdlib) вместо простого dict для token_dictionary, затем выполните token_dictionary[token] += in_both[token].

abarnert 02.05.2018 00:57

Если вы хотите обрабатывать повторяющиеся ключи, например, сохраняя набор всех значений, идея та же; просто используйте defaultdict(set) и token_dictionary[token].add(in_both[token]). Или, если хотите, используйте простой диктатор и выполните token_dictionary.setdefault(token, set()).add(in_both[token]). (Разница в том, что когда вы будете искать что-то позже, defaultdict предоставит вам пустой набор неизвестных ключей, а обычный dict, который вы создали с помощью setdefault, даст вам KeyError.)

abarnert 02.05.2018 00:58

@abarnert, я получаю ключевую ошибку. ---> 12 token_dictionary [токен] .add (in_both [токен]) 13 new_token_dict = token_dictionary 14 text_values ​​= list (new_token_dict.values ​​()) KeyError: 'who'

Shelina 02.05.2018 02:08

@Shelina Какое решение вы получили KeyError? Вы заменили token_dictionary на default_dict(set) вместо обычного set?

abarnert 02.05.2018 02:09

@abarnert да, я заменил token_dictionary на default_dict (set)

Shelina 02.05.2018 02:14

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

abarnert 02.05.2018 02:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
9
48
0

Другие вопросы по теме