当前位置: 首页 > 知识库问答 >
问题:

apache lucene引理

柳宾实
2023-03-14

我正在使用apache Lucene开发一个文本分析项目。我需要对一些文本进行词组化(将单词转换为它们的规范形式)。我已经编写了生成词干的代码。使用它,我可以转换以下句子

词干是单词的一部分,即使在形态学上发生变化也不会改变;引理是这个词的基本形式。例如,从“produced”中,引理是“produce”,但词干是“produc-”。这是因为有诸如生产这样的词

我负责词干的代码的简化版本:

//Using apache tika to identify the language
LanguageIdentifier identifier = new LanguageIdentifier(text);
//getting analyzer according to the language (eg, EnglishAnalyzer for 'en')
Analyzer analyzer = getAnalyzer(identifier.getLanguage());
TokenStream stream = analyzer.tokenStream("field", text);
stream.reset();
while (stream.incrementToken()) {
    String stem = stream.getAttribute(CharTermAttribute.class).toString();
    // doing something with the stem
    System.out.print(stem+ " ");
}
stream.end();
stream.close();

更新:我发现这个库几乎可以满足我的需求(对于英语和俄语),并且使用apache lucene(尽管有它自己的方式),它绝对值得探索。

共有1个答案

章建木
2023-03-14

如果有人还需要它,我决定回到这个问题,并说明如何使用我之前找到的RussianPlatformation库来为英语和俄语进行语系化。

首先,您将需要这些依赖关系(除了lucene-core):

<!-- if you need Russain -->
<dependency>
    <groupId>org.apache.lucene.morphology</groupId>
    <artifactId>russian</artifactId>
    <version>1.1</version>
</dependency>

<!-- if you need English-->
<dependency>
    <groupId>org.apache.lucene.morphology</groupId>
    <artifactId>english</artifactId>
    <version>1.1</version>
</dependency>

<dependency>
    <groupId>org.apache.lucene.morphology</groupId>
    <artifactId>morph</artifactId>
    <version>1.1</version>
</dependency>

请注意,这些工件位于CUBA存储库(https://dl.bintray.com/cuba-platform/main/)。

然后,确保导入正确的分析器:

import org.apache.lucene.morphology.english.EnglishAnalyzer;
import org.apache.lucene.morphology.russian.RussianAnalyzer;

与标准的lucene分析器不同,这些分析器使用MorphologyFilter将每个单词转换为一组规范形式。

因此,如果使用以下代码

String text = "The stem is the part of the word that never changes even when morphologically inflected; a lemma is the base form of the word. For example, from \"produced\", the lemma is \"produce\", but the stem is \"produc-\". This is because there are words such as production";
Analyzer analyzer = new EnglishAnalyzer();
TokenStream stream = analyzer.tokenStream("field", text);
stream.reset();
while (stream.incrementToken()) {
    String lemma = stream.getAttribute(CharTermAttribute.class).toString();
    System.out.print(lemma + " ");
}
stream.end();
stream.close();
String text = "Продолжаю цикл постов об астрологии и науке. Астрология не имеет научного обоснования, но является частью истории науки, частью культуры и общественного сознания. Поэтому астрологический взгляд на науку весьма интересен.";

不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的不锈钢板内的钢板内的钢板内内的↓↓↓↓↓

你可能会注意到有些单词有多个基本形式,例如finterfected被转换为[finterfected,interfect]。如果您不喜欢这种行为,就必须更改org.apache.lucene.morphology.analyzer.morhpologyfilter的实现(如果您对具体如何实现感兴趣,请告诉我,我将详细说明)。

希望对你有帮助,祝你好运!

 类似资料:
  • 索引管理操作可以让你管理集群中的索引,例如创建、删除和更新索引和索引的映射/配置。 创建一个索引 索引操作包含在一个特定的命名空间内,与其它直接从属于客户端对象的方法隔离开来。让我们创建一个索引作为示例: $client = ClientBuilder::create()->build(); $params = [ 'index' => 'my_index' ]; // Create t

  • 有人知道我在哪里可以找到如何在OpenNLP库中使用SimpleMematizer()类的示例,以及在哪里可以找到示例英语词典吗?文件中似乎没有。

  • LGV引理可以用于在DAG上求解不相交路径方案数问题,下面我们简单介绍一下。 一、简介 LGV引理英文全称是Lindström–Gessel–Viennot lemma,可以用来处理有向无环图上不相交路径计数等问题。在此之前,大家要先了解图论相关概念、矩阵、高斯消元求行列式等知识,能帮助大家更快理解和学习LGV引理。 LGV 引理仅适用于有向无环图。 二、定义 ω(P) 表示P这条路径上所有边的边

  • 学过之前的那些章节,你就能做出来一款好玩的小游戏了,可是当你试图做一款复杂的游戏,那游戏需要模拟现实世界的情境,比如模拟两个物体碰撞,模拟物体受到重力,你就不知道该怎么办了。别担心,本章就介绍物理引擎,让我们来探索一下如何合理的使用物理引擎! 是否需要使用物理引擎 当你的需求很简单时,就不要使用物理引擎。比如只需要确定两个对象是否有碰撞,结合使用节点对象的 update 函数和 Rect 对象的

  • Introduction 引言 Go is a new language. Although it borrows ideas from existing languages, it has unusual properties that make effective Go programs different in character from programs written in its r

  • _ | A | B | C | D | E | F | G | H | I | J | L | M | N | O | P | R | S | T | U | V | W | X _ __nonzero__() (scrapy.selector.Selector 方法) (scrapy.selector.SelectorList 方法) A adapt_response() (scrapy.con

  • A AC97,AC97接口 ATAPI(AT Attachment Packet Interface, (IBM PC)AT附属包接口),USB驱动程序的协议信息 atomic instructions(原子操作指令),原子操作指令和内存栅 atomic operations(原子操作),内核中的锁 atomically protected variables(原子保护变量),原子保护变量 B B

  • 符号 -CURRENT,追踪开发分支 -STABLE,追踪开发分支 .k5login,用户配置文件: .k5login 和 .k5users .k5users,用户配置文件: .k5login 和 .k5users .rhosts,Dump 和 Restore /boot/kernel.old,建立并安装一个定制的内核 /etc,分区规划 /etc/gettytab,/etc/gettytab /