问题描述
基本上,我正在尝试实现此目标... https://www.youtube.com/watch?v=sI7VpFNiy_I&t=20m
在我被困在这里之后,另一个人正在台阶上 Second-order cooccurrence of terms in texts
我的问题是... 为什么我的示例中的函数“ A”失败? 在我的示例中如何使函数“ A”起作用?
在上面的视频中,Thomas定义了一个函数(下面的函数“ A”),该函数采用一个共同出现矩阵并返回相关矩阵。
我只是走出熊猫之路,变得肮脏,所以我不知道代码中发生了什么,或者代码是否仍然有效。
def _association_matrix(self,matrix):
O=matrix.copy()
#N compute expected matrix
N=O.sum(1).sum()
R=O.copy()
R.data=np.ones(len(R.data))
R.data=R.data/N
Fx_old=np.array(O.sum(1).flatten())
Fy_old=np.array(O.sum(0).flatten())
Fx=spdiags(Fx_old,Fx_old.shape[0],Fx_old.shape[0])
Fy=spdiags(Fy_old,Fy_old.shape[0],Fy_old.shape[0])
Fx=Fx.tocsc()
Fy=Fy.tocsc()
E=Fx*R*Fy
E.tocsc()
#compute poisson association measure
poi=E.copy()
poi.data=(np.sign(O.data-E.data)*
(O.data*np.log(O.data/E.data)-
(O.data-E.data)))
return poi
我在我制作的共现矩阵上尝试了该代码(下面的代码),但出现以下错误: ValueError:无法将输入数组从形状(5158)广播到形状(1)
from nltk.corpus import state_union
StateofUnion=[]
for i in state_union.fileids():
StateofUnion.append(state_union.raw(i))
import pandas as pd
#I didn't download most of nltk so just loading all of nltk isnt heavy for me,but would be heavy for most users
import nltk
years=pd.Series(state_union.fileids()).str.slice(stop=4)
presidents=pd.Series(state_union.fileids()).str.slice(start=5,stop=-4)
presidents=presidents.str.replace('|'.join(['1','2','-']),'')
party=[]
for i in presidents:
if i=='Truman':
party.append('dem')
elif i=='Eisenhower':
party.append('rep')
elif i=='Kennedy':
party.append('dem')
elif i=='Johnson':
party.append('dem')
elif i=='Johnson-2':
party.append('dem')
elif i=='Johnson-1':
party.append('dem')
elif i=='Nixon':
party.append('rep')
elif i=='Ford':
party.append('rep')
elif i=='Carter':
party.append('dem')
elif i=='Reagan':
party.append('rep')
elif i=='Bush':
party.append('rep')
elif i=='Bush-1':
party.append('rep')
elif i=='Bush-2':
party.append('rep')
elif i=='Clinton':
party.append('dem')
elif i=='GWBush':
party.append('rep')
elif i=='GWBush-1':
party.append('rep')
elif i=='GWBush-2':
party.append('rep')
fileid=pd.Series(state_union.fileids()).str.slice(stop=-4)
SOUA=pd.DataFrame({'Address':StateofUnion,'Year':years,'President':presidents,'Party':party,'recid':fileid})
#A simple cleaning function,yes it's bad- its also good enough for Now
def scrub(pandascolumn):
#assumes we are dealing with pandas
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
stop = stopwords.words('english')
#Destroys Sentence Tokenization
badchars=['!','@','#','$','%','ą','ś','^','&','\.',','\'','\)','\(','\[','\]','\?','\:','\--','\;']
pattern = '|'.join(badchars)
return pandascolumn.str.lower().\
str.replace(pattern,'').\
apply(word_tokenize).\
apply(lambda x: [item for item in x if item not in stop]).\
apply(' '.join)
SOUA=SOUA.set_index('recid')
SOUA['ScrubbedAddress']=scrub(SOUA['Address'])
def get_skip_bigram(Series,n,k):
return Series.str.split().apply(lambda x: list(nltk.skipgrams(x,k)))
grams=get_skip_bigram(SOUA[SOUA['President']=='Clinton']['ScrubbedAddress'],2,1)
skiplist=[]
for i in range(0,len(grams)):
for j in grams[i]:
skiplist.append(list(j))
def get_vocab(doc):
vocab=set()
for i in range(0,len(doc)):
vocab.update(doc[i])
return vocab
vocab=get_vocab(skiplist)
import scipy.sparse as sp
voc2id = dict(zip(vocab,range(len(vocab))))
rows,cols,vals = [],[],[]
for r,d in enumerate(skiplist):
for e in d:
rows.append(r)
cols.append(voc2id[e])
vals.append(1)
X=sp.csc_matrix((vals,(rows,cols)))
Xc=X.T*X
Xc.setdiag(0)
print(Xc.toarray())
from scipy import sparse
def _association_matrix(matrix):
O=matrix.copy()
#N compute expected matrix
N=O.sum(1).sum()
R=O.copy()
R.data=np.ones(len(R.data))
R.data=R.data/N
Fx_old=np.array(O.sum(1).flatten())
Fy_old=np.array(O.sum(0).flatten())
Fx=spdiags(Fx_old,Fy_old.shape[0])
Fx=Fx.tocsc()
Fy=Fy.tocsc()
E=Fx*R*Fy
E.tocsc()
#compute poisson association measure
poi=E.copy()
poi.data=(np.sign(O.data-E.data)*
(O.data*np.log(O.data/E.data)-
(O.data-E.data)))
return poi
_association_matrix(Xc)
产生错误的部分是“ Fx.tocsc()”,我不明白为什么或如何解决该错误。
同样,我有两个紧迫的问题。 为什么我的示例中的功能“ A ”失败? 在我的示例中如何使函数“ A ”起作用?
除这3个以外,显然Thomas's work flow
的实现对于主题建模社区来说是非常好的。这就是我们正在努力的方向。如果您能解决这个问题,那就更好了。 topic model workflow
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)