一种热编码,用于表示python中的语料库句子 - python

我是Python和Scikit学习库的入门者。
我目前需要从事一个NLP项目,首先需要通过One-Hot Encoding代表一个大型语料库。
我已经阅读了Scikit-learn的有关预处理的文档。但是,似乎这不是我对术语的理解。

基本上,这个想法类似于以下内容:

1000000星期日;
0100000星期一;
0010000星期二;
...
0000001星期六;

如果语料库只有7个不同的单词,那么我只需要一个7位数的向量来表示每个单词。然后,可以通过所有向量的合取来表示一个完整的句子,这是一个句子矩阵。
但是,我在Python中尝试过,似乎无法正常工作...

我该如何解决?我的语料库有很多不同的词。

顺便说一句,如果向量大部分都用零来满足,我们可以使用Scipy.Sparse来减小存储量,例如CSR。

因此,我的整个问题将是:

语料库中的句子如何用OneHotEncoder表示并存储在SparseMatrix中?

感谢大伙们。

python大神给出的解决方案

为了使用OneHotEncoder,您可以将文档拆分为令牌,然后将每个令牌映射到一个ID(对于相同的字符串始终相同)。然后将OneHotEncoder应用于该列表。默认情况下,结果是一个稀疏矩阵。

两个简单文档A BB B的示例代码:

from sklearn.preprocessing import OneHotEncoder
import itertools

# two example documents
docs = ["A B", "B B"]

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

# convert token lists to token-id lists, e.g. [[1, 2], [2, 2]] here
token_ids = [[word_to_id[token] for token in tokens_doc] for tokens_doc in tokens_docs]

# convert list of token-id lists to one-hot representation
vec = OneHotEncoder(n_values=len(word_to_id))
X = vec.fit_transform(token_ids)

print X.toarray()

印刷品(每个文档一个串联的热载体):

[[ 1.  0.  0.  1.]
 [ 0.  1.  0.  1.]]