1

我希望你能帮助我,这是我的问题:

编辑:现在我重新考虑,如果有办法从索引中删除一个术语,它无论如何都会起作用。有没有办法做到这一点?如果有,则无需阅读问题的其余部分。谢谢!

这是我打算做的: 1 - 我必须在删除标准停用词的同时索引一些文件。2 - 之后,我必须计算每个术语的文档频率,并删除那些 df < 2 的术语

我是怎么做的:

1 - 我使用 indexwriter 索引文件,同时删除 std 停用词。2 - 我计算每个术语的 df,并添加到停用词列表中。3 - 然后,我使用 indexwriter 再次索引文本,但使用新的停用词列表

真正发生了什么:

我第一次索引它按计划进行。问题是当我尝试第二次索引时。结果变得非常不可预测:

1)如果我运行一次程序,即使停用词有新词,也只会删除 std 停用词。

2)如果我再次运行该程序,则删除 df < 2 的条款。

我在索引中打印了两次,一次是在第一次索引之后,一次是在第二次索引之后。

当我第二次运行时,第一次打印中删除了 df < 2 的术语(请注意,我在第二次索引时添加了 df < 2 的术语,它不应该)出现在第一次打印中删除。

也许我解释的方式有点混乱,如果有什么不能理解的,我请你告诉我。

我希望你们能帮助我。非常感谢!

4

1 回答 1

1

第二次索引文档时,请确保删除文档的第一个实例,否则您将夸大所有术语的 dfs。您可以通过外部id字段删除文档:创建一个Termfield=idfield & value=externalId,然后使用deleteDocument(Term)IndexWriter删除旧实例;然后添加新的。我认为没有办法明确删除术语;它们来自文档。

作为优化,您可能会考虑以下事项: 1. 索引所有文档 2. 查找 df = 1 的所有术语 3. 删除每个此类术语的所有文档,跟踪它们的外部文档 ID 4. 将术语添加到您的停止列表5. 仅重新索引以前删除的文档。

当然,首先您必须仔细考虑删除这些术语的用例。1. 为什么它们出现在索引中很重要?2. 如果您稍后更新索引,并添加一个新文档,导致以前具有 df=1 的某些术语现在具有 df=2,会发生什么情况。您将无法对该术语进行索引,因为它已经在停止列表中。

于 2011-06-01T22:07:36.590 回答