小编Ras*_*ngh的帖子

gensim LabeledSentence和TaggedDocument之间有什么区别?

请帮助我了解如何之差TaggedDocumentLabeledSentencegensim作品.我的最终目标是使用Doc2Vec模型和任何分类器进行文本分类.我关注这个博客!

class MyLabeledSentences(object):
    def __init__(self, dirname, dataDct={}, sentList=[]):
        self.dirname = dirname
        self.dataDct = {}
        self.sentList = []
    def ToArray(self):       
        for fname in os.listdir(self.dirname):            
            with open(os.path.join(self.dirname, fname)) as fin:
                for item_no, sentence in enumerate(fin):
                    self.sentList.append(LabeledSentence([w for w in sentence.lower().split() if w in stopwords.words('english')], [fname.split('.')[0].strip() + '_%s' % item_no]))
        return sentList


class MyTaggedDocument(object):
    def __init__(self, dirname, dataDct={}, sentList=[]):
        self.dirname = dirname
        self.dataDct = {}
        self.sentList = []
    def ToArray(self):       
        for fname in …
Run Code Online (Sandbox Code Playgroud)

gensim text-classification word2vec doc2vec

8
推荐指数
1
解决办法
3108
查看次数

如何从numpy多维数组中获取k个最大值的索引

我经历了几个问题,StackOverflow但找不到相关的答案.我想从a中获取k个最大值的索引numpy ndarray.此链接讨论相同但对于1D阵列.np.argsort对于2D数组导致逐行排序元素.即

Note: array elements are not unique.
Run Code Online (Sandbox Code Playgroud)

输入:

import numpy as np
n = np.arange(9).reshape(3,3)
>>> n
array([[0, 1, 2],
   [3, 4, 5],
   [6, 7, 8]])
s = n.argsort()
>>> s
array([[0, 1, 2],
   [0, 1, 2],
   [0, 1, 2]], dtype=int32)
Run Code Online (Sandbox Code Playgroud)

也,

import numpy as np
n = np.arange(9).reshape(3,3)
s = n.argsort(axis=None)
>>>s
array([0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=int32)
Run Code Online (Sandbox Code Playgroud)

但我在这里丢失了数组结构,无法兑换元素的原始索引.

任何帮助都是值得赞赏的.

python numpy

8
推荐指数
1
解决办法
1229
查看次数

Scikit Learn - 使用CountVectorizer从字符串分隔符中提取单词标记

我有字符串列表.如果任何字符串包含'#'字符,那么我想提取字符串的第一部分,并仅从字符串的这一部分获取字标记的频率计数.即如果字符串是"第一个问题#在stackoverflow上" 预期令牌是"第一个","问题"

如果字符串不包含'#',则返回整个字符串的标记.

计算我在CountVectorizerscikit中使用的术语文档矩阵.

在下面找到我的代码:

class MyTokenizer(object):
    def __call__(self,s):
        if(s.find('#')==-1):
            return s
        else:
            return s.split('#')[0]
    def FindKmeans():
        text = ["first ques # on stackoverflow", "please help"]
        vec = CountVectorizer(tokenizer=MyTokenizer(), analyzer = 'word')
        pos_vector = vec.fit_transform(text).toarray()
        print(vec.get_feature_names())`

output : [u' ', u'a', u'e', u'f', u'h', u'i', u'l', u'p', u'q', u'r', u's', u't', u'u']

Expected Output : [u'first', u'ques', u'please', u'help']
Run Code Online (Sandbox Code Playgroud)

python machine-learning scikit-learn

5
推荐指数
2
解决办法
3443
查看次数

有没有办法从doc2vec模型中获取词汇量?

我正在使用gensim doc2vec.我想知道是否有任何有效的方法来从doc2vec了解词汇量.一种粗略的方法是计算单词的总数,但如果数据很大(1GB或更多),那么这将不是一种有效的方法.

gensim word2vec doc2vec

5
推荐指数
1
解决办法
3376
查看次数

如何计算numpy数组的行对之间的欧氏距离

我有一个numpy像这样的数组:

import numpy as np
a = np.array([[1,0,1,0],
             [1,1,0,0],
             [1,0,1,0],
             [0,0,1,1]])
Run Code Online (Sandbox Code Playgroud)

我想euclidian distance在每对行之间进行计算.

from scipy.spatial import distance
for i in range(0,a.shape[0]):
    d = [np.sqrt(np.sum((a[i]-a[j])**2)) for j in range(i+1,a.shape[0])]
    print(d)
Run Code Online (Sandbox Code Playgroud)

[1.4142135623730951,0.0,1.4142135623730951]

[1.4142135623730951,2.0]

[1.4142135623730951]

[]

有没有更好的pythonic方法来做到这一点,因为我必须在一个巨大的numpy阵列上运行此代码?

python numpy euclidean-distance

4
推荐指数
2
解决办法
6854
查看次数