Python слово в идентификатор представления
Я пытаюсь представить набор слов числами. У меня есть этот код до сих пор:
from sklearn.preprocessing import OneHotEncoder
import itertools
docs = ["select", "max", "income", "from", "data", "where", "revenue", "between", "20", "40"]
# split documents to tokens
tokens_docs = [doc.split(" ") for doc in docs]
# convert list of of token-lists to one flat list of tokens
# and then create a dictionary that maps word to id of word,
# like {A: 1, B: 2} here
all_tokens = itertools.chain.from_iterable(tokens_docs)
word_to_id = {token: idx for idx, token in enumerate(set(all_tokens))}
Однако есть одно ограничение - когда сам токен уже является числом, мне нужно присвоить то же значение, что и число (в словаре word_to_id). Какие-либо предложения?
2 ответа
Решение
Ты можешь использовать if else
утверждение внутри словарного понимания.
{token: idx if not token.isdigit() else int(token)
for idx, token in enumerate(set(all_tokens)}
Это вернется {'4': 4, '5': 5, 'df': 1, 'dfg': 4, 'fd': 0, 'fg': 3}
если вход ['fd', 'df', '5', 'fg', 'dfg', '4']
Вы можете добавить еще одно условие в ваше понимание, и, чтобы сделать его короче, используйте сокращение для if
выражение: what_if_True if if_statement what_if_else
, Как это:
word_to_id = {token: token if token.isdigit() else idx for idx, token in enumerate(set(all_tokens))}