【发布时间】:2015-08-25 02:12:46
【问题描述】:
我想在 scikit-learn 中将单词列表转换为整数列表,并为包含单词列表列表的语料库执行此操作。例如。语料库可以是一堆句子。
我可以使用sklearn.feature_extraction.text.CountVectorizer 执行以下操作,但有没有更简单的方法?我怀疑我可能缺少一些 CountVectorizer 功能,因为它是自然语言处理中常见的预处理步骤。在这段代码中,我首先拟合 CountVectorizer,然后我必须遍历每个单词列表的每个单词以生成整数列表。
import sklearn
import sklearn.feature_extraction
import numpy as np
def reverse_dictionary(dict):
'''
http://stackoverflow.com/questions/483666/python-reverse-inverse-a-mapping
'''
return {v: k for k, v in dict.items()}
vectorizer = sklearn.feature_extraction.text.CountVectorizer(min_df=1)
corpus = ['This is the first document.',
'This is the second second document.',
'And the third one.',
'Is this the first document? This is right.',]
X = vectorizer.fit_transform(corpus).toarray()
tokenizer = vectorizer.build_tokenizer()
output_corpus = []
for line in corpus:
line = tokenizer(line.lower())
output_line = np.empty_like(line, dtype=np.int)
for token_number, token in np.ndenumerate(line):
output_line[token_number] = vectorizer.vocabulary_.get(token)
output_corpus.append(output_line)
print('output_corpus: {0}'.format(output_corpus))
word2idx = vectorizer.vocabulary_
print('word2idx: {0}'.format(word2idx))
idx2word = reverse_dictionary(word2idx)
print('idx2word: {0}'.format(idx2word))
输出:
output_corpus: [array([9, 3, 7, 2, 1]), # 'This is the first document.'
array([9, 3, 7, 6, 6, 1]), # 'This is the second second document.'
array([0, 7, 8, 4]), # 'And the third one.'
array([3, 9, 7, 2, 1, 9, 3, 5])] # 'Is this the first document? This is right.'
word2idx: {u'and': 0, u'right': 5, u'third': 8, u'this': 9, u'is': 3, u'one': 4,
u'second': 6, u'the': 7, u'document': 1, u'first': 2}
idx2word: {0: u'and', 1: u'document', 2: u'first', 3: u'is', 4: u'one', 5: u'right',
6: u'second', 7: u'the', 8: u'third', 9: u'this'}
【问题讨论】:
标签: python nlp scikit-learn