当前位置: 首页 > 面试题库 >

在Lucene中使用WikipediaTokenizer的示例

姚星宇
2023-03-14
问题内容

我想在lucene项目中使用WikipediaTokenizer-
http://lucene.apache.org/java/3_0_2/api/contrib-
wikipedia/org/apache/lucene/wikipedia/analysis/WikipediaTokenizer.html
但我从未使用过Lucene。我只想将Wikipedia字符串转换为令牌列表。但是,我看到此类中只有四种方法可用,分别是end,incrementToken,reset,reset(reader)。有人可以给我指出一个使用它的例子。

谢谢。


问题答案:

在Lucene
3.0中,删除了next()方法。现在,您应该使用增量令牌遍历令牌,并且在到达输入流的末尾时将返回false。要获取每个令牌,应使用AttributeSource类的方法。根据要获取的属性(术语,类型,有效负载等),您需要使用addAttribute方法将相应属性的类类型添加到令牌生成器中。

以下部分代码示例来自WikipediaTokenizer的测试类,如果您下载了Lucene的源代码,则可以找到该类。

...
WikipediaTokenizer tf = new WikipediaTokenizer(new StringReader(test));
int count = 0;
int numItalics = 0;
int numBoldItalics = 0;
int numCategory = 0;
int numCitation = 0;
TermAttribute termAtt = tf.addAttribute(TermAttribute.class);
TypeAttribute typeAtt = tf.addAttribute(TypeAttribute.class);

while (tf.incrementToken()) {
  String tokText = termAtt.term();
  //System.out.println("Text: " + tokText + " Type: " + token.type());
  String expectedType = (String) tcm.get(tokText);
  assertTrue("expectedType is null and it shouldn't be for: " + tf.toString(), expectedType != null);
  assertTrue(typeAtt.type() + " is not equal to " + expectedType + " for " + tf.toString(), typeAtt.type().equals(expectedType) == true);
  count++;
  if (typeAtt.type().equals(WikipediaTokenizer.ITALICS)  == true){
    numItalics++;
  } else if (typeAtt.type().equals(WikipediaTokenizer.BOLD_ITALICS)  == true){
    numBoldItalics++;
  } else if (typeAtt.type().equals(WikipediaTokenizer.CATEGORY)  == true){
    numCategory++;
  }
  else if (typeAtt.type().equals(WikipediaTokenizer.CITATION)  == true){
    numCitation++;
  }
}
...


 类似资料:
  • 我是Lucene的新手,想在Maven环境中直接从我的Java代码中调用它。我已经尝试了一段时间来寻找我可以下载和运行的工作示例。官方网站上的最新教程是2013-Lucene 3。*https://cwiki.apache.org/confluence/display/lucene/LuceneFAQ#LuceneFAQ-HowdoIstartusingLucene?.Maven中当前的最新版本是

  • 我在使用Lucene.NET 3.0.3时遇到以下问题。 我的搜索查询如下所示: 手动生成的搜索查询:(+*test*+*und*+*produktivumgebung*) 解析的搜索查询:+(标题:*test*)+(标题:*und*)+(标题:*produktivumgebung*) 为什么我找不到搜索“test-und produktivumgebung”的文档?

  • 问题内容: 关于apache lucene所提供的热门荧光笔,我有两个问题: 请参阅此功能,您能否解释令牌流参数的使用。 我有几个包含多个字段的大型lucene文档,每个字段中都有一些字符串。现在,我找到了与特定查询最相关的文档。现在找到该文档,因为查询中的几个单词可能与文档中的单词匹配。我想找出查询中的哪些词造成了这种情况。因此,我计划使用Lucene Hit Highlighter。示例:如果

  • 问题内容: 我编写了一个简单的Java程序来创建lucene索引,但是语法出现错误。 我的代码: 我收到以下错误, 问题答案: 该调用接受一个参数,而不是参数(从Lucene 5.0版开始)。您可以查看有关路径类的Java教程,以获取有关其工作方式的信息。 因此,您的代码应如下所示:

  • 问题内容: 我正在尝试在多个进程和/或服务器上扩展一个简单的socket.io应用程序。 Socket.io支持RedisStore,但是我对如何使用它感到困惑。 我正在看这个例子, http://www.ranu.com.ar/post/50418940422/redisstore-and-rooms-with- socket-io 但是我不明白在该代码中使用RedisStore与使用Memor

  • 问题内容: 在建立的索引中,我有兴趣运行查询,然后(使用构面)返回该查询的带状疱疹。这是我在文字上使用的分析仪: 主要问题在于,对于Lucene 4.4,停止过滤器不再支持消除包含停止词的带状疱疹的参数。相反,我会得到类似的结果。 “红色和黄色” 自然,这极大地扭曲了返回的带状疱疹的数量。有没有一种方法可以在不进行结果后处理的情况下进行Lucene 4.4后的管理? 问题答案: 可能不是最理想的解