小编joe*_*eln的帖子

有没有办法让Solr/Lucene返回所选文件的排名而不是完整的结果?

我有兴趣查询Solr查询q并在返回{10,20,30,...}文档时绘制一组文档D的回忆.

目前,我正在获得完整的结果,即返回的docid列表(通过solrpy),并迭代它以查找D的排名,即从搜索结果中的D到其索引的映射.我不严格要求映射,只映射排名.

有没有办法让Solr/Lucene返回一组ID而不是完整结果的排名?

解决此问题的其他方法:

  • 对于查询,返回文档d的等级
  • 对于达到指定排名的查询,返回文档d是否存在
  • 从查询q1结果到指定数量的记录,返回由另一个查询q2匹配的记录数

lucene solr rank

8
推荐指数
2
解决办法
1711
查看次数

对 numpy 中的分区索引进行分组 argmax/argmin

Numpyufunc有一种reduceat方法可以在数组中的连续分区上运行它们。所以不要写:

import numpy as np
a = np.array([4, 0, 6, 8, 0, 9, 8, 5, 4, 9])
split_at = [4, 5]
maxima = [max(subarray for subarray in np.split(a, split_at)]
Run Code Online (Sandbox Code Playgroud)

我可以写:

maxima = np.maximum.reduceat(a, np.hstack([0, split_at]))
Run Code Online (Sandbox Code Playgroud)

a[0:4]两者都会返回 slices 、a[4:5]a[5:10]、being中的最大值[8, 0, 9]

我想要一个类似的函数来执行argmax,请注意,我只希望每个分区中有一个最大索引:[3, 4, 5]使用上面的asplit_at(尽管索引 5 和 9 都获得了最后一组中的最大值),如由

np.hstack([0, split_at]) + [np.argmax(subarray) for subarray in np.split(a, split_at)]
Run Code Online (Sandbox Code Playgroud)

我将在下面发布一种可能的解决方案,但希望看到一种无需在组上创建索引即可进行矢量化的解决方案。

python numpy

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

CountVectorizer(analyzer ='char_wb')未按预期工作

我正在尝试使用scikit-learn CountVectorizer来计算字符2克,忽略空格.在文档它提到的参数,analyzer其中规定

该功能是否应由单词或字符n-gram组成.选项'char_wb'仅从字边界内的文本创建字符n-gram.

但是,"char_wb"似乎不像我预期的那样工作.例如:

corpus = [
    "The blue dog Blue",
    "Green the green cat",
    "The green mouse",
]

# CountVectorizer character 2-grams with word boundaries
vectorizer = CountVectorizer(analyzer='char_wb', ngram_range=(2, 2), min_df=1) 
X = vectorizer.fit_transform(corpus)
vectorizer.get_feature_names()
[' b',
 ' c',
 ' d',
 ' g',
 ' m',
 ' t',
 'at',
 'bl',
 'ca', ....
Run Code Online (Sandbox Code Playgroud)

注意像'b'这样的例子,它们包含一个空格.是什么赋予了?

python scikit-learn

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

如何pickle sklearn Pipeline 中的各个步骤?

我正在使用Pipelinesklearn 对文本进行分类。

在此示例中Pipeline,我有一个和一些用分类器TfidfVectorizer包装的自定义功能作为步骤,然后我拟合训练数据并进行预测:FeatureUnionPipeline

from sklearn.pipeline import FeatureUnion, Pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import LinearSVC

X = ['I am a sentence', 'an example']
Y = [1, 2]
X_dev = ['another sentence']

# classifier
LinearSVC1 = LinearSVC(tol=1e-4,  C = 0.10000000000000001)

pipeline = Pipeline([
    ('features', FeatureUnion([
       ('tfidf', TfidfVectorizer(ngram_range=(1, 3), max_features= 4000)), 
       ('custom_features', CustomFeatures())])),
    ('clf', LinearSVC1),
    ])

pipeline.fit(X, Y)
y_pred = pipeline.predict(X_dev)

# etc.
Run Code Online (Sandbox Code Playgroud)

在这里我需要腌制TfidfVectorizer步骤并保留custom_features未腌制的,因为我仍然用它们做实验。这个想法是通过酸洗 tfidf 步骤来使管道更快。

Pipeline我知道我可以用来腌制整个过程joblib.dump …

python pipeline classification machine-learning scikit-learn

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