2016-02-22 39 views
8

Tôi đang tìm kiếm một mô-đun trong sklearn cho phép bạn lấy được ma trận đồng thời từ từ. Tôi có thể nhận được ma trận thuật ngữ tài liệu nhưng không chắc chắn làm thế nào để đi về việc có được một ma trận word-word của sự xuất hiện đồng thời.ma trận xuất hiện từ đồng nghĩa

+0

Bạn có thể thêm một số dữ liệu và nỗ lực của bạn để giải quyết vấn đề không? – Cleb

Trả lời

1

Bạn có thể sử dụng tham số ngram_range trong ví dụ CountVectorizer hoặc TfidfVectorizer

Code:

bigram_vectorizer = CountVectorizer(ngram_range=(2, 2)) # by saying 2,2 you are telling you only want pairs of 2 words 

Trong trường hợp bạn muốn một cách rõ ràng nói trước với các đồng lần xuất hiện của từ bạn muốn để đếm, sử dụng vocabulary param, tức là: vocabulary = {'awesome unicorns':0, 'batman forever':1}

http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html

Tự giải thích và sẵn sàng sử dụng mã với các từ đồng nghĩa được xác định trước. Trong trường hợp này chúng tôi đang theo dõi cho đồng xuất hiện của awesome unicornsbatman forever:

from sklearn.feature_extraction.text import CountVectorizer 
import numpy as np 
samples = ['awesome unicorns are awesome','batman forever and ever','I love batman forever'] 
bigram_vectorizer = CountVectorizer(ngram_range=(1, 2), vocabulary = {'awesome unicorns':0, 'batman forever':1}) 
co_occurrences = bigram_vectorizer.fit_transform(samples) 
print 'Printing sparse matrix:', co_occurrences 
print 'Printing dense matrix (cols are vocabulary keys 0-> "awesome unicorns", 1-> "batman forever")', co_occurrences.todense() 
sum_occ = np.sum(co_occurrences.todense(),axis=0) 
print 'Sum of word-word occurrences:', sum_occ 
print 'Pretty printig of co_occurrences count:', zip(bigram_vectorizer.get_feature_names(),np.array(sum_occ)[0].tolist()) 

đầu ra cuối cùng là ('awesome unicorns', 1), ('batman forever', 2), tương ứng một cách chính xác để samples dữ liệu cung cấp của chúng tôi.

11

Đây là giải pháp mẫu của tôi bằng cách sử dụng CountVectorizer khi tìm hiểu. Và đề cập đến điều này post, bạn chỉ có thể sử dụng phép nhân ma trận để có được ma trận co-occurrence word-word.

from sklearn.feature_extraction.text import CountVectorizer 
docs = ['this this this book', 
     'this cat good', 
     'cat good shit'] 
count_model = CountVectorizer(ngram_range=(1,1)) # default unigram model 
X = count_model.fit_transform(docs) 
Xc = (X.T * X) # this is co-occurrence matrix in sparse csr format 
Xc.setdiag(0) # sometimes you want to fill same word cooccurence to 0 
print(Xc.todense()) # print out matrix in dense format 

Bạn cũng có thể tham khảo từ điển các từ trong count_model,

count_model.vocabulary_ 

Hoặc, nếu bạn muốn bình thường hóa bởi thành phần đường chéo (gọi để trả lời ở bài trước).

import scipy.sparse as sp 
Xc = (X.T * X) 
g = sp.diags(1./Xc.diagonal()) 
Xc_norm = g * XC# normalized co-occurence matrix 
Các vấn đề liên quan