使用Python将字数统计的文件转换为稀疏矩阵

时间:2015-04-14 17:09:52

标签: python nlp sparse-matrix

我有一系列文件,每个文件都包含单词数。 每个文件可以有不同的单词。这是一个例子:

FILEA

word1,20
word2,10
word3,2

FILEB:

word1,10
word4,50
word3,5

大约有20k个文件,每个文件最多可以包含数万个单词。

我最终想要构建一个稀疏矩阵,其中每一行代表一个文件的字分布,就像你从scikit's CountVectorizer得到的那样。

如果word1,word2,word3,word4是列,那么anf FileA和FileB是行,那么我希望得到:

[[20,10,2,0],[10,0,5,50]]

我怎么能这样做? 如果可能的话,我还希望能够只包含出现在至少N个文件中的单词。

1 个答案:

答案 0 :(得分:1)

你可以使用一些字典来映射单词的出现频率,将文件名映射到这些文件中的单词计数。

files = ["file1", "file2"]
all_words = collections.defaultdict(int)
all_files = collections.defaultdict(dict)

for filename in files:
    with open(filename) as f:
        for line in f:
            word, count = line.split(",")
            all_files[filename][word] = int(count)
            all_words[word] += 1

然后,您可以使用嵌套列表推导中的那些来创建稀疏矩阵:

>>> [[all_files[f].get(w, 0) for w in sorted(all_words)] for f in files]
[[20, 10, 2, 0], [10, 0, 5, 50]]

或按最小字数过滤:

>>> [[all_files[f].get(w, 0) for w in sorted(all_words) if all_words[w] > 1] for f in files]
[[20, 2], [10, 5]]