概念 - 如何建立在Python 2D字频率矩阵?

我想练习回归技术进行分类的文字,我想建立戏剧和n列独特的词语apxn矩阵形式的数据集,p行。 我已经有一个文本,从工作,我只需要它来算的话。

重要的是要跟踪哪些词出现在其中发挥,所以对于一个给定的戏,我已经能够创建一个独特的相吻合的话Python字典是很重要的。 我不知道该怎么做的,是这些类型的字典结合起来,这样一来,例如:

romeo = {[alas,2],[julliet,35]} caesar = {[et,1],[tu,3],[cassius,12]}

可以合并,以产生一个矩阵

alas julliet et tu cassius romeo 2 35 0 0 0 caesar 0 0 1 3 12

为了清楚起见,我创建每个戏只有独特的单词组成一个例子 - 自然是实际上这是一点都没错。

有人可能会如何去从这些字典建设这个矩阵? 难道是从别的地方更容易下手?

--------------解决方案-------------

这工作,经测试:

from itertools import chain
from collections import defaultdict

romeo = {'alas':2, 'juliet':35, 'hello':1}
caesar = {'et':1, 'tu':3, 'cassius':12, 'hello':1}

dicts = defaultdict(dict)
dicts['romeo'] = romeo
dicts['caesar'] = caesar

columns = list(set(list(chain(romeo.keys(), caesar.keys()))))

matrix = defaultdict(dict)

for coll in ('romeo', 'caesar'):
matrix[coll] = {}
for key in columns:
if dicts[coll].has_key(key):
matrix[coll][key] = dicts[coll][key]
else:
matrix[coll][key] = 0

print columns

for coll in matrix.keys():
for key in columns:
print matrix[coll][key],
print '\n'

说明:从两个字典合并所有的键在一起,然后运行循环和填充类型的字典的一个全新的字典:)

我会用嵌套的字典,或2维的字典。 对于嵌套,首先,您需要在dicitonary的格式更改为一个适当的形式:

romeo = {[alas,2],[julliet,35]}
caesar = {[et,1],[tu,3],[cassius,12]}

应该:

romeo = {'alas':2,'julliet': 35}
caesar = {'et':1,'tu':3,'cassius':12}

从那里,你可以通过所有的字典和巢字典所以不是一个矩阵你拥有它,你可以有类似的“价值”的循环:

#declare first:
Ds = {{}}

然后使用循环来填充:

Ds = {
'romeo' : {'et': 0, 'alas':2,'julliet': 35, tu':0,'cassius':0},
'caesar' : {'et':1, 'alas':0, 'julliet': 0, 'tu':3,'cassius':12}
}

希望这可以帮助。

最终,我落得这样做实施defaultdict,因为我喜欢它是如何创建词典或辞典条目(取决于位置)时的参考不曾存在。

我建立了一个完整的defaultdict与我想要的东西,然后ploddingly输出到CSV。

我使用opensourceshakespeare.com全文转储,这是我写的:

playNames = {}

for line in listOfLines:
try:
playNames[line.rsplit('~')[0]] += 1
if line.rsplit('~')[0] == '':
print line
except:
playNames[line.rsplit('~')[0]] = 1

#print playNames.keys()

#
# Now let's build a dictionary for each play
#

for line in listOfLines:

try:
playNames[line.rsplit('~')[0]] += line.rsplit('~,~')[2]
playNames[line.rsplit('~')[0]] += " "
except:
playNames[line.rsplit('~')[0]] = line.rsplit('~,~')[2]
playNames[line.rsplit('~')[0]]+= " "

#
# for each play, tokenize text into list of words
#

for key in playNames.iterkeys():
playNames[key] = playNames[key].split(' ')

plays = collections.defaultdict(dict)

for key in playNames.iterkeys():
for val in playNames[key]:
try:
plays[key][val] += 1
except:
plays[key][val] = 1

#
# build a set of words
#

words = set()

for eachplay in plays.itervalues():
words.update(eachplay.keys())

outfile = open("wordlist.csv",'w')

i=0
outfile.write(",")
for word in words:

outfile.write(word)
outfile.write(",")
i+=1
print "words ",i

outfile.write("\n")
for eachplay in plays.iterkeys():
i = 0
outfile.write(eachplay)

outfile.write(",")
for word in words:
try:
outfile.write(str(plays[eachplay].get(word,"0")))
#print word,plays[eachplay][word]
except:
outfile.write("")
i+=1
outfile.write(",")
outfile.write("\n")
print eachplay," ",i
outfile.close()

分类:蟒蛇 时间:2015-03-15 人气:4
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.576 (s). 10 q(s)