热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Lucene,Solr和Elasticsearch中的印度尼西亚语言

对于西方人来说,印尼语(或印尼语)是一种非常平易近人的语言。它使用拉丁字符,结构清晰,没有时态,

对于西方人来说,印尼语(或印尼语)是一种非常平易近人的语言。 它使用拉丁字符,结构清晰,没有时态,没有性别或复数形式,并且包含许多外来词(作为德国人,我特别喜欢荷兰语的影响词,例如排气管 knalpot )。 如果您在亚洲以外的地方长大,对于您来说印尼可能是一个遥远的国家,您可能不会听说很多。 但是由于这个国家很大,实际上有很多人在讲这种语言,并与它的兄弟姐妹Bahasa Melayu一起使用, 这是地球上最常见的语言之一 。 如果这还不够的话,那么一旦您访问印度尼西亚,您就会发现他们的人民非常积极和快乐。 可能是对该语言感兴趣的另一个原因。

由于我已经学习了一些印尼语,并且不得不花很多时间在印尼工作和休闲,所以我认为研究一下Lucene印尼分析器并查看其如何处理文本可能是个好主意。 如果您不知道分析器是什么,我可以指出您关于索引数据绝对基础的一篇较早的文章。

Lucene的印度尼西亚分析器

如果您想使用IndonesianAnalyzer,它可以与lucene-analyzers-common一起使用,您很可能已经将其包括在内。 您可以只创建一个实例并以自己喜欢的任何方式使用它。 此代码片段将显示字符串中文本的术语。

private List analyze(String text) throws IOException {List terms &#61; new ArrayList<>();try(Analyzer analyzer &#61; new IndonesianAnalyzer();TokenStream tokenStream &#61; analyzer.tokenStream(null, text)) {tokenStream.reset();while (tokenStream.incrementToken()) {terms.add(tokenStream.getAttribute(CharTermAttribute.class).toString());}}return terms;
}

弹性搜索中的印尼分析器

IndonesianAnalyzer也可以与elasticsearch一起使用。 在映射中&#xff0c;您可以通过分析器名称indonesian来引用它。

{ "mappings": {"doc": {"properties": {"content": {"type": "text", "analyzer": "indonesian"} }}}
}

elasticsearch文档在分析器上也有一节&#xff0c;说明如何使用不同的过滤器重建它。

Solr中的印度尼西亚分析器

大多数时候&#xff0c;您将在Solr中创建自己的分析器链。 这来自参考指南。


分析仪的功能

首先让我们看一个非常简单的例句。

Saya mau makan mie ayam。

我想吃鸡肉面条。 您不仅了解了我喜欢印尼美食&#xff0c;而且还看到印尼语使用拉丁字符并用空格分隔单词。 让我们看看IndonesianAnalyzer对这段文本的处理方式。

如果您查看上面的Lucene示例产生的术语&#xff0c;您将获得以下列表。

[makan, mie, ayam]

因此&#xff0c;仅剩五个词中的三个。 Saya &#xff08;I&#xff09;和mau &#xff08;想要&#xff09;被删除。 这是由默认的停用词列表引起的&#xff0c;停用词在搜索时被认为并不重要。 这些单词将保留在分析仪随附的文本文件中。 如果你想为你的内容使用不同的列表&#xff0c;你可以使用一个接受一个构造函数CharArraySet &#xff0c;为elasticsearch和Solr你可以使用自定义的StopFilter。

现在&#xff0c;其余单词保持不变&#xff0c;没有词干涉及&#xff0c;这是通过将术语简化为基本形式来处理自然语言的一种常用方法。 让我们看另一个例子。

卡米&#xff08;Kami&#xff09;&#xff0c;邦萨&#xff08;Bangsa&#xff09;印尼&#xff0c;印尼&#xff08;Dengan ini menjatakan kemerdekaan Indonesia&#xff09;。

这是1945年宣布的印度尼西亚独立宣言的第一句话。我们印度尼西亚人民在这里宣布印度尼西亚独立。

如果使用分析器处理此文本&#xff0c;则将获得以下术语列表。

[bangsa, indonesia, jata, merdeka, indonesia]

再次&#xff0c;像kami &#xff0c; dengan &#xff0c; ini这样的词已被删除&#xff0c;就像停用词列表中的一样。 但是其他事情发生了。 Menjatakan变成了jata &#xff0c; kemerdekaan变成了merdeka 。 印尼语没有动词词尾变化&#xff0c;但是有许多前缀和后缀可以改变单词的含义。 在这种情况下kemerdekaan&#xff08;独立&#xff09;是默迪卡 &#xff08;独立&#xff09;的变化。 有很多前缀和后缀。 makan &#xff0c; makanan食物minum &#xff0c; minumanSAMA一样的 &#xff0c;是bersama 一起 。 IndonesianAnalyzer将正确地阻止这些示例&#xff08;即使samabersama是停用词&#xff09;。

实作

像大多数分析器一样&#xff0c;IndonesianAnalyzer仅合并了一些其他组件&#xff0c;即令牌生成器和服务器令牌过滤器。

  • StandardTokenizer
  • 标准过滤器
  • 小写过滤器
  • 停止过滤器
  • SetKeywordMarkerFilter
  • 印尼语干式过滤器

IndonesianStemFilter是引起词干的有趣组件。 它使用了基于本文的IndonesianStemmer&#xff0c;该论文基于印度尼西亚语的词干对信息检索的影响研究 。

与大多数其他基于规则的词干一样&#xff0c;某些单词可能无法正确词干。 例如&#xff1a; menunggu表示等待 &#xff0c;它源于unggu &#xff0c;但是正确的基本形式是tunggu 。 如果要消除此类情况&#xff0c;可以将单词添加到stemExclusionSet &#xff0c;然后可以将其传递到分析器中以防止它们被阻止。 或者&#xff0c;您可以构建自己的使用StemmerOverrideFilter的分析器-也许这是另一篇博客文章的材料。

计分

评分搜索结果时&#xff0c;印度尼西亚语&#xff08;Bahasa Indonesia&#xff09;提出了一个有趣的挑战。 诸如TF / IDF和BM25之类的评分算法依赖于词频。 但是在印尼语中&#xff0c;通常只需重复一个单词就可以形成复数形式。 美孚意思是汽车 - 美孚意思是汽车 。 但是&#xff0c;如果一篇文字谈到一辆或多辆汽车&#xff0c;在计分方面没有什么不同。 根据要搜索的文本&#xff0c;可能有必要忽略频率–或编写自定义过滤器来跳过立即重复的单词。

结论

词根并不是在每个搜索应用程序中都占有一席之地。 但这是可以帮助使自然语言更易于访问而又不太复杂的技术之一。 它可以使您的搜索看起来像魔术。

当使用搜索引擎时&#xff0c;使用自然语言是我非常喜欢的一件事。 而且&#xff0c;如果像在这种情况下那样&#xff0c;我正在学习一些更好的语言知识。

翻译自: https://www.javacodegeeks.com/2018/03/indonesian-language-in-lucene-solr-and-elasticsearch.html




推荐阅读
  • es的分布式原理?es是如何实现分布式的?
    Elasticsearch设计的理念是分布式搜索引擎,底层其实是基于lucene。核心思 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • 一:什么是solrSolr是apache下的一个开源项目,使用Java基于lucene开发的全文搜索服务器;Lucene是一个开放源代 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了使用数据库管理员用户执行onstat -l命令来监控GBase8s数据库的物理日志和逻辑日志的使用情况,并强调了对已使用的逻辑日志是否及时备份的重要性。同时提供了监控方法和注意事项。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • 本文主要介绍了gym102222KVertex Covers(高维前缀和,meet in the middle)相关的知识,包括题意、思路和解题代码。题目给定一张n点m边的图,点带点权,定义点覆盖的权值为点权之积,要求所有点覆盖的权值之和膜qn小于等于36。文章详细介绍了解题思路,通过将图分成两个点数接近的点集L和R,并分别枚举子集S和T,判断S和T能否覆盖所有内部的边。文章还提到了使用位运算加速判断覆盖和推导T'的方法。最后给出了解题的代码。 ... [详细]
  • PatchODAX8: ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • 前言:关于跨域CORS1.没有跨域时,ajax默认是带cookie的2.跨域时,两种解决方案:1)服务器端在filter中配置详情:http:blog.csdn.netwzl002 ... [详细]
  • 转自:http:www.phpweblog.netfuyongjiearchive200903116374.html一直对字符的各种编码方式懵懵懂懂,什 ... [详细]
  • 使用gitolite搭建一个私有的git服务器,来管理git仓库。有了它,就可以跟小伙伴们愉快地进行远程协作啦。今天又折腾了一遍,在这里把几个关键的步骤记下来,方便以后查阅。准备工 ... [详细]
  • 使用场景使用es聚合时,有时还需要获取query(或filter)的相关文档结果(数据)。比如统计各个地区编码的营业额,得到了聚合的统 ... [详细]
  • java包含,java包含哪些技术
    本文目录一览:1、java有哪几个重要的类包? ... [详细]
author-avatar
海淀区小张_703
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有