2017-06-18 1 views
2

J'essaye de représenter un ensemble de mots par des nombres. J'ai ce code à ce jour:Mot de Python à la représentation d'identification

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))} 

Cependant, il y a une restriction - lorsque le jeton lui-même est déjà un certain nombre, je dois attribuer la même valeur que le nombre (dans le dictionnaire word_to_id). Des suggestions?

Répondre

0

Vous pouvez utiliser la déclaration if else dans la compréhension du dictionnaire.

{token: idx if not token.isdigit() else int(token) 
      for idx, token in enumerate(set(all_tokens)} 

Cela renverra {'4': 4, '5': 5, 'df': 1, 'dfg': 4, 'fd': 0, 'fg': 3}
si l'entrée est ['fd', 'df', '5', 'fg', 'dfg', '4']

0

Vous pouvez ajouter une condition supplémentaire à l'intérieur de votre compréhension, et pour raccourcir, utilisez l'expression if: what_if_True if if_statement what_if_else. Comme ceci:

word_to_id = {token: token if token.isdigit() else idx for idx, token in enumerate(set(all_tokens))} 
+0

Bien que cela puisse répondre à la question, certains commentaires et/ou explication serait bien. Cela aidera aussi les autres utilisateurs. – VDWWD

+0

fixe, merci)) – vZ10