我想计算文本文件中所有单词的频率.
>>> countInFile('test.txt')
Run Code Online (Sandbox Code Playgroud)
{'aaa':1, 'bbb': 2, 'ccc':1}如果目标文本文件如下,则应返回:
# test.txt
aaa bbb ccc
bbb
Run Code Online (Sandbox Code Playgroud)
我在一些帖子之后用纯python实现了它.但是,由于文件大小(> 1GB),我发现纯python方式不足.
我认为借用sklearn的力量是一个候选人.
如果你让CountVectorizer计算每一行的频率,我猜你会通过总结每一列来获得字频率.但是,这听起来有点间接的方式.
使用python计算文件中单词的最有效和直接的方法是什么?
我的(非常慢)代码在这里:
from collections import Counter
def get_term_frequency_in_file(source_file_path):
wordcount = {}
with open(source_file_path) as f:
for line in f:
line = line.lower().translate(None, string.punctuation)
this_wordcount = Counter(line.split())
wordcount = add_merge_two_dict(wordcount, this_wordcount)
return wordcount
def add_merge_two_dict(x, y):
return { k: x.get(k, 0) + y.get(k, 0) for k in set(x) | set(y) }
Run Code Online (Sandbox Code Playgroud) 我有一个python代码,我必须将2D数组转换为2D矩阵,以便我可以使用它来计算逆.因为我使用numpy.matrix(数组),但它无法正常工作.任何人都可以告诉如何将2D数组转换为numpy矩阵?该数组由所有浮点数组成
在格式的矩阵的行row或列col中访问所有非零值的最快或最不可靠的方法是什么?scipy.sparseACSR
以另一种格式(比如说COO)更有效率吗?
现在,我使用以下内容:
A[row, A[row, :].nonzero()[1]]
Run Code Online (Sandbox Code Playgroud)
要么
A[A[:, col].nonzero()[0], col]
Run Code Online (Sandbox Code Playgroud) NumPy的flatten()可以返回一个2D数组吗?
我应用flatten()了一个形状的数组(12L, 54L),我得到了一个新的形状数组(1L, 648L).这应该不时发生吗?如果是这样,在哪些情况下会发生这种情况?
我使用NumPy 1.9.2.
我一直在尝试将python scipy稀疏矩阵除以其行的矢量和。这是我的代码
sparse_mat = bsr_matrix((l_data, (l_row, l_col)), dtype=float)
sparse_mat = sparse_mat / (sparse_mat.sum(axis = 1)[:,None])
Run Code Online (Sandbox Code Playgroud)
但是,无论我如何尝试,都会引发错误
sparse_mat = sparse_mat / (sparse_mat.sum(axis = 1)[:,None])
File "/usr/lib/python2.7/dist-packages/scipy/sparse/base.py", line 381, in __div__
return self.__truediv__(other)
File "/usr/lib/python2.7/dist-packages/scipy/sparse/compressed.py", line 427, in __truediv__
raise NotImplementedError
NotImplementedError
Run Code Online (Sandbox Code Playgroud)
有人知道我要去哪里哪里吗?