在Python中如何访问嵌套的defaultdict创建的矩阵行?
我正在用Python创建一个单词共现矩阵,并使用嵌套的DefaultDict创建矩阵。我已经成功地创建了矩阵并存储了字数,但是现在在尝试从嵌套的defaultdict中获取向量(矩阵行)时遇到了问题 下面是我用来初始化矩阵的代码行:在Python中如何访问嵌套的defaultdict创建的矩阵行?,python,matrix,defaultdict,Python,Matrix,Defaultdict,我正在用Python创建一个单词共现矩阵,并使用嵌套的DefaultDict创建矩阵。我已经成功地创建了矩阵并存储了字数,但是现在在尝试从嵌套的defaultdict中获取向量(矩阵行)时遇到了问题 下面是我用来初始化矩阵的代码行: matrix[target_word_id][collocated_word_id] += 1 matrix[collocated_word_id][target_word_id] += 1 matrix=collections.defaultdict(lamb
matrix[target_word_id][collocated_word_id] += 1
matrix[collocated_word_id][target_word_id] += 1
matrix=collections.defaultdict(lambda:collections.defaultdict(int))
以下是我用来将字数输入矩阵的行:
matrix[target_word_id][collocated_word_id] += 1
matrix[collocated_word_id][target_word_id] += 1
这就是我试图访问矩阵中与给定单词id对应的行的方式:
vector1 = matrix[word1_id]
当我打印vector1来测试我的工作时,我得到的输出是:
defaultdict(<class 'int'>, {})
主要课程如下:
import nltk
import sys
from nltk.corpus import stopwords
import create_vector
import pprint
import string
def main():
brown_words = list(nltk.corpus.brown.words())
window = int(sys.argv[1])
weight = sys.argv[2]
brown_words_lower = [word.lower() for word in brown_words]
brown_words_only = [w for w in brown_words_lower if w not in string.punctuation]
stops = set(stopwords.words('english'))
brown_words_filtered = [w for w in brown_words_only if w not in stops]
vector = create_vector.Create_vector()
vocab = vector.build_vocab(brown_words_filtered)
cooccurrence = vector.build_cooccurrence(brown_words_filtered, vocab, window)
for line in text:
words = line.split(',')
word1 = words[0]
word2 = words[1]
vector1, vector2 = vector.get_vector(cooccurrence, vocab, weight, word1, word2)
运行它的命令是:
python3.4 main.py 2 FREQ无法复制:
>>> import collections
>>> matrix = collections.defaultdict(lambda: collections.defaultdict(int))
>>> matrix[2][3] += 1
>>> matrix[3][2] += 1
>>> vector1 = matrix[2]
>>> vector1
defaultdict(<type 'int'>, {3: 1})
导入集合
>>>矩阵=collections.defaultdict(lambda:collections.defaultdict(int))
>>>矩阵[2][3]+=1
>>>矩阵[3][2]+=1
>>>向量1=矩阵[2]
>>>矢量1
defaultdict(,{3:1})
您确定word1\u id
中的值等于已插入矩阵的值吗?
您能否发布完整的代码,而不仅仅是零碎的代码?如果您添加一个示例输入及其输出,您的问题将更加清楚
tokens=line.strip()
token\u id=[vocab[token]表示令牌中的令牌]
您确定不打算使用str.split
?我认为strip()是正确的。在使用strip()的过程中,我一直在打印一些东西,我觉得歌手和合作矩阵是正确的。此外,由于我只是从Brown语料库中提取单词,因此它们已经在列表中配置。列表没有strip
属性,因此您的tokens
变量此时必须是字符串。如果遍历它,则遍历字符串中的各个字符。如果您认为我不正确,只需打印出标记
,然后查看。当我打印出标记时,我会得到一个单词列表,例如:能够测量眼睛,我确信id等于已经插入到矩阵中的值。我只在单词在词汇表中生成值,词汇表是从我构建矩阵的语料库中生成的。此外,我的单词列表的所有向量都返回该输出