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

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

Lucene的印度尼西亚分析器

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

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

弹性搜索中的印尼分析器

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

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

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

Solr中的印度尼西亚分析器

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

<analyzer><tokenizer class="solr.StandardTokenizerFactory"/><filter class="solr.LowerCaseFilterFactory"/><filter class="solr.IndonesianStemFilterFactory" stemDerivational="true" />
</analyzer>

分析仪的功能

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

Saya mau makan mie ayam。

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

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

[makan, mie, ayam]

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

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

卡米(Kami),邦萨(Bangsa)印尼,印尼(Dengan ini menjatakan kemerdekaan Indonesia)。

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

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

[bangsa, indonesia, jata, merdeka, indonesia]

再次,像kamidenganini这样的词已被删除,就像停用词列表中的一样。 但是其他事情发生了。 Menjatakan变成了jatakemerdekaan变成了merdeka 。 印尼语没有动词词尾变化,但是有许多前缀和后缀可以改变单词的含义。 在这种情况下kemerdekaan(独立)是默迪卡 (独立)的变化。 有很多前缀和后缀。 makanmakanan食物minumminumanSAMA一样的 ,是bersama 一起 。 IndonesianAnalyzer将正确地阻止这些示例(即使samabersama是停用词)。

实作

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

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

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

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

计分

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

结论

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

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

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

Lucene,Solr和Elasticsearch中的印度尼西亚语言相关推荐

  1. solr和lucene_Lucene,Solr和Elasticsearch中的印度尼西亚语言

    solr和lucene 对于西方人来说,印尼语或印尼语是一种非常平易近人的语言. 它使用拉丁字符,结构清晰,没有时态,没有性别或复数形式,并且包含许多外来词(作为德国人,我特别喜欢荷兰语的影响词,例如 ...

  2. 搜索引擎solr和elasticsearch

    版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 目录(?)[+] 刚开始接触搜索引擎,网上收集了一些资料,在这里整理了一下分享给大家. 一.关 ...

  3. 什么是Lucene和Solr和Elasticsearch,它们的区别是什么?

    说道es我们往往会听到Solr和Lucene,那么Lucene和Solr和Elasticsearch的区别? Lucene Lucene是apache下的一个子项目,是一个开放源代码的全文检索引擎工具 ...

  4. 面试题:Lucene、Solr、ElasticSearch

    1.Lucene和Solr和Elasticsearch的区别 Lucene Lucene是apache下的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文 ...

  5. 科普向 | Lucene,Solr,Elasticsearch之间的区别和联系

    最近有幸研究到了这块领域的内容,而我本人也对于这块非常的感兴趣,所以打算写一篇文章记录一下- 简介 Lucene Lucene是 apache 软件基金会某个项目组的一个子项目,是一个开放源代码的全文 ...

  6. Lucene,Solr,Elasticsearch之间的区别和联系

    https://blog.csdn.net/weixin_44318830/article/details/109166004 简介 Lucene         Lucene是 apache 软件基 ...

  7. Solr vs Elasticsearch vs Lucene

    最近看到有一个客户他们用的是Elasticsearch, 说实话,本人对Elasticsearch之前了解的比较少,准确地说,对"搜索引擎"这块了解的比较少.今天就各种搜索,收集了 ...

  8. Elasticsearch:在 Elasticsearch 中使用语言识别进行多语言搜索

    我们很高兴地宣布,随着机器学习推理摄入处理器 (inference ingest processor)的发布,我们还将在 Elasticsearch 7.6 中发布语言识别. 在此发行版中,我们希望借 ...

  9. Solr vs ElasticSearch,搜索技术哪家强

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"获取公众号专属群聊入口 Solr和ElasticSearch到底有一些什么不同? ...

最新文章

  1. 北大数学天才毕业后坚持出家:理想现实间的挣扎
  2. mfc如何判断读到文件尾_C++ 判断读取文件尾
  3. 使用 collections 来创建类似元组对象
  4. 唤起微信/QQ返回不了当前页面解决方法
  5. 面试ASP.NET程序员的笔试题和机试题
  6. Eclipse公共许可证
  7. CROSS APPLY 和OUTER APPLY 的区别
  8. 网站安全之为Web项目添加验证码功能(二)
  9. antdesignpro 重定向到登录页面_爬虫技巧:使用Charles和requests模拟微博登录
  10. IOS开发笔记_5.线程,HTTP请求,定时器
  11. get 请求中文乱码问题
  12. ES集群单机(单节点/多节点)搭建
  13. 人睡眠时做恶梦以及梦魇或鬼压身的原因
  14. 使用回溯法求解N皇后问题
  15. 生成13位条形码Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。
  16. GitHub Android 最火开源项目Top20
  17. 【java生成批次号】
  18. 稻歌Google Map截获器的使用
  19. HuaWei(手机)瘦身
  20. 【技巧】解决向日葵安装完黑屏驱动无法调整屏幕亮度

热门文章

  1. 证明三角形全等的方法
  2. 京东app各渠道广告投放效果分析
  3. CRM系统实现闭环管理
  4. 第十届中国云计算大会·中国站:展望未来十年科技走向
  5. Python 视频添加音频(附代码) | Python工具
  6. 电商平台选择积分抵扣的两个原因
  7. 放宽心,坚持住,一切都是最好的安排!!!
  8. python3网络爬虫开发实战学习笔记(二)------python3 XPATH爬 猫眼电影排名
  9. 微信裂变引流玩法汇总
  10. 工程总承包(EPC)高级项目经理,未来可期!