在 PyLucene 中实现自定义相似度
Implementing custom Similarity in PyLucene
我想在 PyLucene 中写一个自定义的 Similarity class 来实现我自己的检索模型。
通常,使用 java 版本的 Lucene,您必须扩展相似性 class 并覆盖方法。例如:
public class IDFSimilarity extends TFIDFSimilarity {
/** Sole constructor: parameter-free */
public IDFSimilarity() {
}
/** Implemented as <code>overlap / maxOverlap</code>. */
@Override
public float coord(int overlap, int maxOverlap) {
return overlap / (float) maxOverlap;
}
/** Implemented as <code>1/sqrt(sumOfSquaredWeights)</code>. */
@Override
public float queryNorm(float sumOfSquaredWeights) {
return (float) (1/Math.sqrt(sumOfSquaredWeights));
}
.
.
etc
但是,PyLucene 使用 JCC,我不清楚如何在 python 脚本中扩展 class。它会是这样的:
import lucene
from org.apache.lucene.search.similarities import TFIDFSimilarity
class IDFSimilarity (TFIDFSimilarity):
def __init__(self):
TFIDFSimilarity.__init__()
?
?
但我不知道如何进行。我在网上找不到任何示例或文档。
有什么想法吗?
来自@JanŠpaček原问题的评论,谢谢!
在 PyLucene 源代码中的 Python 中有一个定义相似度的示例。
from org.apache.pylucene.search.similarities import PythonClassicSimilarity
class SimpleSimilarity(PythonClassicSimilarity):
def lengthNorm(self, numTerms):
return 1.0
def tf(self, freq):
return freq
def sloppyFreq(self, distance):
return 2.0
def idf(self, docFreq, numDocs):
return 1.0
def idfExplain(self, collectionStats, termStats):
return Explanation.match(1.0, "inexplicable", [])
点击here查看示例。
我想在 PyLucene 中写一个自定义的 Similarity class 来实现我自己的检索模型。
通常,使用 java 版本的 Lucene,您必须扩展相似性 class 并覆盖方法。例如:
public class IDFSimilarity extends TFIDFSimilarity {
/** Sole constructor: parameter-free */
public IDFSimilarity() {
}
/** Implemented as <code>overlap / maxOverlap</code>. */
@Override
public float coord(int overlap, int maxOverlap) {
return overlap / (float) maxOverlap;
}
/** Implemented as <code>1/sqrt(sumOfSquaredWeights)</code>. */
@Override
public float queryNorm(float sumOfSquaredWeights) {
return (float) (1/Math.sqrt(sumOfSquaredWeights));
}
.
.
etc
但是,PyLucene 使用 JCC,我不清楚如何在 python 脚本中扩展 class。它会是这样的:
import lucene
from org.apache.lucene.search.similarities import TFIDFSimilarity
class IDFSimilarity (TFIDFSimilarity):
def __init__(self):
TFIDFSimilarity.__init__()
?
?
但我不知道如何进行。我在网上找不到任何示例或文档。
有什么想法吗?
来自@JanŠpaček原问题的评论,谢谢!
在 PyLucene 源代码中的 Python 中有一个定义相似度的示例。
from org.apache.pylucene.search.similarities import PythonClassicSimilarity
class SimpleSimilarity(PythonClassicSimilarity):
def lengthNorm(self, numTerms):
return 1.0
def tf(self, freq):
return freq
def sloppyFreq(self, distance):
return 2.0
def idf(self, docFreq, numDocs):
return 1.0
def idfExplain(self, collectionStats, termStats):
return Explanation.match(1.0, "inexplicable", [])
点击here查看示例。