问题标签 [pylucene]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
973 浏览

python - pylucene安装makefile错误

当我构建pylucene环境时,我遇到了这个问题。我不知道如何在 Windows 平台上配置它的 makefile。有人帮助我,如果有任何关于在 Windows 上构建 pylucene 的例子。

表明cmd

这是生成文件:

0 投票
2 回答
906 浏览

pylucene - 只有部分 pylucene 可用?

我正在尝试将一些 Java Lucene 代码移植到 pylucene (v 2.3.1) 中。我正在使用 http://svn.apache.org/viewcvs.cgi/lucene/pylucene/trunk/samples/中的示例,并且大部分 pylucene 似乎都进入了我的 python (ubuntu 12.04、pydev 2.6.0、eclipse 3.7.2)环境就好了。例如,我可以执行 lucene.initVM() (显示 JCC 已就位)并按照从 .../samples/PorterStemmerAnalyzer.py 中获取的示例定义一个 Porter 词干分析器:

但是当我尝试创建一个新的 IndexWriter 时,它偶然发现了它的构造函数的最后一个参数:

我收到此错误:

这是目前让我难过的错误,但我也做过其他几个黑客(来自他们的版本.../samples)(但也担心):

  • 用 lucene.LucenePackage 替换 lucene.Version.LUCENE_CURRENT

  • lucene.SimpleFSDirectory 和 lucene.MMapDirectory

为了能走到这一步。

http://lucene.apache.org/pylucene/features.html说“PyLucene API 在 PyLucene 模块的平面命名空间中公开所有 Java Lucene 类。” 这似乎并不完全正确, lucene.StopAnalyzer.ENGLISH_STOP_WORDS_SET 是 pydev 已知的,而 lucene.ENGLISH_STOP_WORDS_SET 不是。

所以看来我正在成为/的一部分/旧版本/...?pylucene 正确接合,但不是全部!?为什么会这样?

0 投票
0 回答
156 浏览

java - 使用带有 pylucene 2.9.4 的自定义收集器

我正在尝试计算 pylucene 中特定令牌的高 PMI 项。一位同事给了我一些有效的 Java 代码,但我无法将其转换为 Python。特别是,代码依赖于自定义收集器。这是初始查询代码:

这是术语计数收集器类:http ://snipt.org/vgGi8

self.searcher.search此代码因错误而中断:

我做了一些谷歌搜索,但无济于事 - 我是 lucene 的新手,无法判断这是否只是 2.9.4 不支持的功能,或者它是否是 pylucene 问题,或者我的代码是否错误。请帮忙!

0 投票
1 回答
145 浏览

java - 使用 JCC 从 Python 覆盖 Java 类。那可能吗?

我正在使用 JCC 为 Java 库创建 Python 包装器,并且我需要覆盖 Python 脚本中 Java 类的方法。可能吗?如果可能的话,你怎么能做到这一点?

0 投票
1 回答
255 浏览

analyzer - PyLucene中的DelimitedPayloadFilter?

我正在尝试使用 pylucene从http://searchhub.org/2010/04/18/refresh-getting-started-with-payloads/实现 java 的 python 版本。我的分析器在对 DelimitedTokenFilter 的 init 调用中产生 lucene.InvalidArgsError

课程如下,非常感谢任何帮助。使用 pylucene 3.6 构建中的 JAR 文件编译的 java 版本工作正常。

0 投票
1 回答
61 浏览

lucene - 指定字段时Lucene不给出结果

我有一个数据库,我使用 lucene 的字段按部分(由文档中的标记指定)在 Lucene(使用 Pylucene)中建立了索引。这个索引似乎工作正常。我可以使用简单的整个文档的默认字段搜索它并获得合理的结果。

问题是,当我使用特定部分(不是默认部分)搜索它时,我希望得到一定数量的结果(由 指定IndexSearcher.search(query, results)),但它可能只是什么都不返回。所以我的问题是:我怎样才能让它返回一个包含我指定的结果数量的排名列表?

我指定该字段的唯一位置是在 QueryParser 中,通过调用:

0 投票
2 回答
3498 浏览

macos - 在 Mac 上安装 PyLucene

我希望能够在我的 Mac 上使用 pyLucene。这些说明让我绝望地迷失了方向,因为每个设置或制作说明都要求我在它之前做一些事情,而且很难知道从哪里开始以及从哪个窗口开始做什么。

我已经下载了 PyLucene。我想知道的第一件事是我把文件夹放在哪里,因为这对我来说似乎不是不言而喻的。

要使用它,我被告知我需要构建 JCC,它包含在 pylucene 下载中。

说明:

在命令行中,输入:

但要做到这一点,我认为,我需要在正确的位置或将文件夹放在正确的位置,否则我会得到"setup.py" not found.

您可以在此环境中提供任何帮助(shell 窗口?IDE?)。非常感谢通过第一部分的任何帮助:构建 JCC,然后设置 pylucene。

0 投票
1 回答
420 浏览

python - PyLucene 的自定义停用词

在 PyLucene 中,有一个称为过滤器的过滤器StopFilter,它根据给定的停用词过滤令牌。示例调用如下:

替换停用词集的参数似乎应该很容易,但这实际上有点挑战性:

这是一个Set,无法实现:

有人建议在别处使用PythonSetPyLucene 附带的 a ,但事实证明这不是 a 的实例,Set不能与 a 一起使用StopFilter

如何给出一StopFilter组新的停用词?

0 投票
1 回答
675 浏览

python - pylucene 的自定义标记器,仅基于下划线标记文本(保留空格)

我是 pylucene 的新手,我正在尝试构建一个自定义分析器,它仅基于下划线标记文本,即它应该保留空格。示例:"Hi_this is_awesome" 应该被标记为 ["hi", "this is", "awesome"] 标记。

从各种代码示例中,我了解到我需要重写 CustomTokenizer 的 incrementToken 方法并编写一个 CustomAnalyzer,TokenStream 需要使用 CustomTokenizer 后跟一个 LowerCaseFilter 来实现相同的目的。

我在实现 incrementToken 方法和连接点时遇到了问题(通常如何使用标记器,分析器依赖于 TokenFilter,而 TokenFilter 依赖于 TokenStreams),因为 pylucene 上可用的文档很少。

0 投票
1 回答
101 浏览

java - 找不到抽象函数的定义

我必须对 Lucene 代码进行一些修改。我必须修改将查询词与索引实际匹配的代码,以添加新的匹配方案。
最初,我编写了一个代码来使用 PyLucene 进行搜索。你可以在这里找到它。从中可以清楚地看出,我在 IndexSearcher 类中进行了修改,因为这是实现实际搜索功能的类。

然后我开始按照代码更深入地找到要修改的实际代码。以下是我遵循的调用层次结构:

  • 在我的代码中,我searcher.search(query, None, 100)在第 57 行调用。然后我在IndexSearcher代码中跟踪它
  • 首先它public TopDocs search(Query query, Filter filter, int n)在第 271 行调用,它protected TopDocs search(Weight weight, ScoreDoc after, int nDocs)在第 428 行调用。
  • 现在在这个函数中,我假设我的代码是单线程的(就像在 SearchFiles.py 中我没有提到进行多线程搜索一样)。所以它在第 472 行调用protected TopDocs search(List<AtomicReaderContext> leaves, Weight weight, ScoreDoc after, int nDocs)
  • 该函数正在创建一个收集器对象并protected void search(List<AtomicReaderContext> leaves, Weight weight, Collector collector)在第 599 行调用。
  • 现在在这个函数中有两个更相关的函数调用:Scorer scorer = weight.scorer(ctx, !collector.acceptsDocsOutOfOrder(), true, ctx.reader().getLiveDocs());在第 613 行和scorer.score(collector);第 616 行。这个函数之一是选择与查询匹配的文档,这意味着其中一个是我关心的。
  • 然后我遵循了这两个功能,但找不到任何东西,如下所述。

weight.scorer:最初在第 273 行调用
的函数中创建 Weight 对象时,它是从类本身的构造函数创建的,而不是从任何子类创建的。Weight.java类的函数是一个抽象函数(第 113 行)。这个函数是在哪里定义的 IndexSearcher 正在使用哪个?createNormalizedWeight(FilteredQuery)Weightscorer()

scorer.score()
Scorer.java继承DocsEnum.java继承DocIdSetIterator.java
Scorer 正在使用一个函数nextDoc(),我认为这是决定相关文档的函数(即,将文档与查询匹配)。但同样,这个函数是在DocIdSetIterator(第 92 行)中声明的抽象函数。再说一次,这个函数是在哪里定义的,IndexSearcher 正在使用哪个?

由于 Lucene 支持多种搜索模型(向量空间、语言、Okapi BM25)并支持多种类型的查询。因此,选择模型类型和查询可能会根据所做的选择定义这些功能。但是在我的 SearchFiles.py 代码中,我没有选择任何我使用的查询类型和模型。所以 Lucene 应该做出一些默认选择。但我无法理解的是这些默认模式是在哪里制作的,以及它们是如何包含在 IndexSearcher 代码中的,以便 IndexSearcher 使用这些功能?