请帮助我了解如何之差TaggedDocument和LabeledSentence的gensim作品.我的最终目标是使用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) 我经历了几个问题,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)
但我在这里丢失了数组结构,无法兑换元素的原始索引.
任何帮助都是值得赞赏的.
我有字符串列表.如果任何字符串包含'#'字符,那么我想提取字符串的第一部分,并仅从字符串的这一部分获取字标记的频率计数.即如果字符串是"第一个问题#在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) 我正在使用gensim doc2vec.我想知道是否有任何有效的方法来从doc2vec了解词汇量.一种粗略的方法是计算单词的总数,但如果数据很大(1GB或更多),那么这将不是一种有效的方法.
我有一个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阵列上运行此代码?