我想从一个数组中提取二元组,取所有频率大于100的双字母组,然后使用减少的词汇表对第二个数组进行评分。
似乎词汇选项应该给我我需要的东西,但它似乎没有起作用。即使将一个输出直接馈送到另一个也只会产生(正确形状)零的数组。
from sklearn.feature_extraction.text import CountVectorizer
docs = ['run fast into a bush','run fast into a tree','run slow','run fast']
# Collect bigrams
vectorizer = CountVectorizer(ngram_range = (2,2))
vectorizer.fit(docs)
vocab = vectorizer.vocabulary_
# Score the exact same data
vectorizer = CountVectorizer(vocabulary=vocab)
output = vectorizer.transform(docs)
# Demonstrate that the array is all zeros
print "Length of vocab", len(vocab)
print output.A
Length of vocab 5
[[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]
答案 0 :(得分:0)
抓住了它。你需要在第二个实例中指定ngram_range(它不会自动解释unigrams vs bigrams。)
vectorizer = CountVectorizer(vocabulary=vocab ,ngram_range = (2,2))
答案 1 :(得分:0)
创建一个标记词的语料库。将 ngram 设置为 3 有奇数个单词,否则设置为 2 表示偶数。创建一个词袋矩阵。使用词矩阵包创建一个数据框,并获取向量化词作为特征。
from sklearn.feature_extraction.text import CountVectorizer
import nltk
docs = ['run fast into a bush','run fast into a tree','run slow','run fast']
str_buffer=" ".join(docs)
#print(str_buffer)
corpus=nltk.word_tokenize(str_buffer)
vectorizer_ng2=CountVectorizer(ngram_range=range(1,3),stop_words='english')
bow_matrix=vectorizer_ng2.fit_transform(corpus)
print(bow_matrix.toarray())
bow_df = pd.DataFrame(bow_matrix.toarray())
bow_df.columns = vectorizer_ng2.get_feature_names()
print(bow_df)
输出:
bush fast run slow tree
0 0 0 1 0 0
1 0 1 0 0 0
2 0 0 0 0 0
3 0 0 0 0 0
4 1 0 0 0 0
5 0 0 1 0 0
6 0 1 0 0 0
7 0 0 0 0 0
8 0 0 0 0 0
9 0 0 0 0 1
10 0 0 1 0 0
11 0 0 0 1 0
12 0 0 1 0 0
13 0 1 0 0 0