[PYTHON] 단어 - 단어 동시 발생 매트릭스
PYTHON단어 - 단어 동시 발생 매트릭스
나는 당신이 낱말 낱말 co-ocurrence 모체를 파생하게하는 sklearn에있는 단위를 찾고있다. 나는 문서 - 용어 행렬을 구할 수 있지만, 단어 - 단어 행렬의 동시 발생 (co-occurences)을 얻는 방법에 대해서는 확신 할 수 없다.
해결법
-
==============================
1.다음은 Scikit-Learn에서 CountVectorizer를 사용하는 예제 솔루션입니다. 그리고이 글을 참고하면 행렬 곱셈을 사용하여 단어 - 단어 동시 발생 행렬을 얻을 수 있습니다.
다음은 Scikit-Learn에서 CountVectorizer를 사용하는 예제 솔루션입니다. 그리고이 글을 참고하면 행렬 곱셈을 사용하여 단어 - 단어 동시 발생 행렬을 얻을 수 있습니다.
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) # X[X > 0] = 1 # run this line if you don't want extra within-text cooccurence (see below) 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
count_model에있는 단어 사전을 참조 할 수도 있습니다.
count_model.vocabulary_
또는 대각선 성분으로 정규화하려는 경우 (이전 게시물의 답변 참조)
import scipy.sparse as sp Xc = (X.T * X) g = sp.diags(1./Xc.diagonal()) Xc_norm = g * Xc # normalized co-occurence matrix
@Federico Caccia 응답에주의를 기울여야 할 경우, 자신의 텍스트에서 가짜 인 동시 발생을 원하지 않으면 1 : 1보다 큰 발생을 설정하십시오.
X[X > 0] = 1 # do this line first before computing cooccurrence Xc = (X.T * X) ...
-
==============================
2.CountVectorizer 또는 TfidfVectorizer에서 ngram_range 매개 변수를 사용할 수 있습니다
CountVectorizer 또는 TfidfVectorizer에서 ngram_range 매개 변수를 사용할 수 있습니다
코드 예 :
bigram_vectorizer = CountVectorizer(ngram_range=(2, 2)) # by saying 2,2 you are telling you only want pairs of 2 words
카운트 할 단어의 공동 발생을 명시 적으로 말하려면 어휘 매개 변수를 사용하십시오. 즉, vocabulary = { 'awesome unicorns': 0, 'batman forever': 1}
http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html
사전 정의 된 단어 - 단어 동시 발생으로 코드를 사용하고 자명하며 준비가되었습니다. 이 경우 우리는 멋진 유니콘과 배트맨의 동시 발생을 영원히 추적하고 있습니다.
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())
최종 결과물은 ( 'awesome unicorns', 1), ( 'batman forever', 2)이며, 우리의 샘플 제공 데이터와 정확하게 일치합니다.
-
==============================
3.@titipata 우리가 실제 co-ocurrences에 동일한 가중치를 주었고 단지 가짜 인 사건에 당신의 솔루션이 좋은 척도가 아니라고 생각합니다. 예를 들어, 5 개의 텍스트가 있고 apple과 house라는 단어가이 frecuency와 함께 나타나는 경우 :
@titipata 우리가 실제 co-ocurrences에 동일한 가중치를 주었고 단지 가짜 인 사건에 당신의 솔루션이 좋은 척도가 아니라고 생각합니다. 예를 들어, 5 개의 텍스트가 있고 apple과 house라는 단어가이 frecuency와 함께 나타나는 경우 :
텍스트 1 : 사과 : 10, "집": 1
text2 : apple : 10, "house": 0
text3 : apple : 10, "house": 0
text4 : 사과 : 10, "집": 0
text5 : apple : 10, "house": 0
우리가 측정 할 공동 발생은 10 * 1 + 10 * 0 + 10 * 0 + 10 * 0 + 10 * 0 = 10이지만 단지 가짜입니다.
그리고 다음과 같은 또 다른 중요한 경우에는 다음과 같습니다.
텍스트 1 : 사과 : 1, "바나나": 1
텍스트 2 : 사과 : 1, "바나나": 1
텍스트 3 : 사과 : 1, "바나나": 1
text4 : apple : 1, "banana": 1
텍스트 5 : 사과 : 1, "바나나": 1
우리는 사실 공동 출현이 정말로 중요 할 때 단지 1 * 1 + 1 * 1 + 1 * 1 + 1 * 1 = 5의 동시 발생을 얻을 것입니다.
@Guiem Bosch이 경우 두 단어가 연속적 일 때만 동시 발생이 측정됩니다.
매트릭스를 계산하기 위해 @titipa 솔루션을 사용할 것을 제안합니다.
Xc = (Y.T * Y) # this is co-occurrence matrix in sparse csr format
여기서 X를 사용하는 대신 0보다 큰 위치의 행렬 Y와 다른 위치의 0을 사용합니다.
이것을 사용하여, 첫 번째 예에서 우리는 다음을 갖게 될 것입니다 : 동시 발생 : 1 * 1 + 1 * 0 + 1 * 0 + 1 * 0 + 1 * 0 = 1 두 번째 예 : 동시 출현 : 1 * 1 + 1 * 1 + 1 * 1 + 1 * 1 + 1 * 0 = 5 그것은 우리가 정말로 찾고있는 것입니다.
from https://stackoverflow.com/questions/35562789/word-word-co-occurrence-matrix by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] TypeError 'x'객체에 '__getitem__'속성이 없습니다. (0) | 2018.11.25 |
---|---|
[PYTHON] 어떻게하면 x 개의 원소마다리스트를 나누고 그 원소 x 개의 원소를 새로운리스트에 추가 할 수 있을까요? (0) | 2018.11.25 |
[PYTHON] pandas DataFrame에서 열을 중첩 제거하려면 어떻게합니까? (0) | 2018.11.24 |
[PYTHON] BigQuery Python CLI에 GOOGLE_APPLICATION_CREDENTIALS 설정하기 (0) | 2018.11.24 |
[PYTHON] 'stdin'을 파이썬의 다른 프로세스에 인수로 전달하는 방법이 있습니까? (0) | 2018.11.24 |