使用 Elasticsearch 轻松进行中文文本分类

news2024/9/23 3:14:32

本文记录下使用 Elasticsearch 进行文本分类,当我第一次偶然发现 Elasticsearch 时,就被它的易用性、速度和配置选项所吸引。每次使用 Elasticsearch,我都能找到一种更为简单的方法来解决我一贯通过传统的自然语言处理 (NLP) 工具和技术来解决的问题。

在某个时刻,我意识到,它可以直接用来解决很多问题,而如果采用我以前学到的方法,则需要从头开始构建解决方案。

环境:

服务器:elasticsearch7.9.3

前端:elasticsearch-head

一、下载ICU和IK中文分词插件

 进入elasticsearch/bin,查看是否如下2个插件,如果没有就需要下载。

[elasticsearch@ bin]$ ./elasticsearch-plugin list
analysis-icu
analysis-ik

有两种方式,一种是在线下载,一种是离线下载。由于我的网络环境需要代理设置,第一种提示下载超时

root@:/elasticsearch-7.9.3/bin# ./elasticsearch-plugin install analysis-icu
-> Installing analysis-icu
-> Failed installing analysis-icu
-> Rolling back analysis-icu
-> Rolled back analysis-icu
Exception in thread "main" java.net.ConnectException: 连接超时 (Connection timed out)
        at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)

下载对应版本的ik和icu插件

Gitee 极速下载/elasticsearch-analysis-ik

https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-7.9.3.zip 

将2个压缩文件,上传至服务器的elasticsearch/plugin,解压并重启elasticsearch,重启的方式见linux上安装部署elasticsearch7.9_elasticsearch linux部署_一个高效工作的家伙的博客-CSDN博客

 二、使用分词器测试用例

1)普通分词
POST _analyze
{
  "text": ["他是一个前端开发工程师"],
  "analyzer": "standard"
}
 
POST _analyze
{
  "text": ["他是一个前端开发工程师"],
  "analyzer": "keyword"
}
 
2)IK 分词
POST _analyze
{
  "text": ["他是一个前端开发工程师"],
  "analyzer": "ik_max_word"
}
{
  "text": ["他是一个前端开发工程师"],
  "analyzer": "ik_smart"
}
3) ICU 分词
POST _analyze
{
  "text": ["他是一个前端开发工程师"],
  "analyzer": "icu_analyzer"
}

使用elasticsearch-head的复合查询,写法如下:

 三、分词器的实际应用

1、创建索引

使用ik_smart作为分词器,注:需要新建索引时添加分词器,如果添加数据后,就无法添加分词器了。

put /sample
{
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "ik_smart"
      },
      "category": {
        "type": "text",
        "analyzer": "ik_smart",
        "fields": {
          "raw": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

2、 添加文档

//添加文档
POST /sample/_doc/1
{
  "content":"我是小鸟",
  "category":"动物"
}
 
POST /sample/_doc/2
{
  "content":"我是苹果",
  "category":"植物"
}

 3、使用more_like_this查询:

GET sample/_search
{
  "query": {
    "more_like_this": {
      "fields": [
        "content",
        "category"
      ],
      "like": "小鸟",
      "min_term_freq": 1,
      "max_query_terms": 20
    }
  }
}

四、结语: 

大多数的 NLP 任务都是从一个标准的预处理管道开始的:

  1. 采集数据
  2. 提取原始文本
  3. 句子拆分
  4. 词汇切分
  5. 标准化(词干分解、词形还原)
  6. 停用词删除
  7. 词性标注

第 1 步和第 2 步可通过 Elasticsearch 中的采集附件处理器插件(5.0 之前版本为映射工具附件插件)来完成。

这些插件的原始文本提取基于 Apache Tika,这个工具包可处理最常见的数据格式(HTML/PDF/Word 等)。

第 4 步到第 6 步可通过开箱即用的语言分析器来完成。比如icu和ik分词器完成。

 

有几个现实的原因:训练一个 SVM 模型需要花费大量时间。特别是当您在一家初创公司工作,或需要快速适应各种客户或用例时,这可能会是一个棘手的问题。另外,您可能无法在每次数据变更时都对模型进行重新培训。我在一家德国大银行的项目中曾亲身经历过这个难题。这种情况下,您用过时的模型肯定不会带来好的结果。

而使用 Elasticsearch 方法,不仅可在索引时进行训练,还可在任何时间点动态更新模型,而且应用程序的停机时间为零。如果您的数据存储在 Elasticsearch 中,则不需要任何额外的基础设施。通常,在第一页您就可以获得 10% 以上的高精度结果。这在很多应用程序中足以给人留下良好的第一印象。

既然有其他工具,为什么还要使用 Elasticsearch 呢?

因为您的数据已经存在,它会预先计算底层的统计数据。就像是免费得到一些 NLP 一样!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/901414.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode 198. 打家劫舍

2023.8.19 打劫问题是经典的动态规划问题。先设一个dp数组,dp[i]的含义为:前 i 个房屋能盗取的最高金额。 每间房屋无非就是偷,或者不偷这两种情况,于是可以写出递推公式: …

使用nrm快速切换npm源以及解决Method Not Implemented

文章目录 什么是nrm如何使用nrm查看本机目前使用的npm 源安装nrm查看可选源查看当前使用源切换源添加源删除源测试源的响应时间 如果你遇到这个报错,就可以采用这种方案解决哦解决方案:1. 切换为官方源2. 查看漏洞3. 修复漏洞4. 下面命令慎重使用&#x…

【Linux】进程信号篇Ⅰ:信号的产生(signal、kill、raise、abort、alarm)、信号的保存(core dump)

文章目录 一、 signal 函数:用户自定义捕捉信号二、信号的产生1. 通过中断按键产生信号2. 调用系统函数向进程发信号2.1 kill 函数:给任意进程发送任意信号2.2 raise 函数:给调用进程发送任意信号2.3 abort 函数:给调用进程发送 6…

域名解析和代理

购买域名 这里使用腾讯云进行购买。 对域名进行解析 通过添加记录接口对域名进行解析。 此时我们的服务器地址就被解析到域名上了。 我们可以通过以下格式进行访问: [域名]:[对应的项目端口] 效果为下: 通过nginx进行代理 如果我们使用上述的方式进行访问还是…

轻松搭建书店小程序

在现今数字化时代,拥有一个自己的小程序成为了许多企业和个人的追求。而对于书店经营者来说,拥有一个能够提供在线购书服务的小程序将有助于吸引更多的读者,并提升销售额。本文将为您介绍如何轻松搭建书店小程序,并将其成功上线。…

Spring事件监听源码解析

spring事件监听机制离不开容器IOC特性提供的支持,比如容器会自动创建事件发布器,自动识别用户注册的监听器并进行管理,在特定的事件发布后会找到对应的事件监听器并对其监听方法进行回调。Spring帮助用户屏蔽了关于事件监听机制背后的很多细节…

Spring事务和事务传播机制(1)

前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 在Spring框架中,事务管理是一种用于维护数据库操作的一致性和…

HLK-LD105/2410B/2420模块测试

HLK105/2410B/2420模块测试 📌模块资料地址:https://h.hlktech.com/Mobile/download 🌿HLK-LD105模块: 10G微波雷达 🌿HLK-LD2420-24G:24G毫米波雷达 🌿HLK-LD2410B-24G:24…

网络安全--wazuh环境配置及漏洞复现

目录 一、wazuh配置 二、wazuh案例复现 一、wazuh配置 1.1进入官网下载OVA启动软件 Virtual Machine (OVA) - Installation alternatives (wazuh.com) 1.2点击启动部署,傻瓜式操作 1.3通过账号:wazuh-user,密码:wazuh进入wazuh…

【NOIP】XR-4模拟赛,Oler教练的上班策略

author:&Carlton tag:模拟 topic:【NOIP】XR-4模拟赛,Oler教练的上班策略 language:C website:洛谷 date:2023年8月19日 目录 题目 我的题解 思路 源代码 改进 题目 我的题解 思路…

iptables防火墙(SNAT与DNAT)

目录 1 SNAT 1.1 SNAT原理与应用 1.2 SNAT工作原理 1.3 SNAT转换前提条件 2 SNAT示例 ​编辑 2.1 网关服务器配置 2.1.1 网关服务器配置网卡 2.1.2 开启SNAT命令 2.2 内网服务器端配置 2.3 外网服务器端配置 2.4 网卡服务器端添加规则 2.5 SNAT 测试 3 DNAT 3.1 网卡…

Windows 11 下使用 VMWare Workstation 17 Pro 新建 CentOS Stream 9 64位 虚拟机 并配置网络

文章目录 为什么选择 CentOS Stream 9下载安装访问连接快照克隆网络配置 为什么选择 CentOS Stream 9 CentOS Linux 8: 已经过了 End-of-life (EOL)CentOS Linux 7: EOL Jun 30th, 2024CentOS Stream 8: EOL May 31st, 2024CentOS Stream 9: End of RHEL9 full support phase …

DTC 19服务学习1

在UDS(统一诊断服务)协议中,0x19是用于DTC(诊断故障代码)信息的服务。以下是你提到的子服务的功能和作用: 0x01 - 报告DTC按状态掩码。这个子服务用于获取当前存储在ECU中的DTC列表。状态掩码用于过滤DTC&a…

redis闪退的三大解决办法(windows版本)

目录 一、遇到问题 二、出现问题的原因 三、三大启动方法 (一)启动服务端的命令一 (二)启动服务端命令二 (三)必解决redis服务端 一、遇到问题 下载完成redis的5的版本,要进行启动redis的…

UML基础模型

目录 1.抽象类2.接口3.继承4.实现接口5.关联关系6.聚合关系7.合成(组合)关系8.依赖关系 1.抽象类 矩形框代表一个类(Class)。 类图分为三层: 第一层显示类的名称,如果是抽象类,就用斜体显示&am…

kafka--kafka基础概念-ISR详解

kafka基础概念-ISR详解 主要是讲 主 往 从同步中的问题 当绿色P1接收到写入的数据,要同步到紫色的P1S1和P1S2 如何保证一致性呢? 使用In Sync Replicas 也就是ISR概念 为什么不一致的? 因为P1S1同步数据 可能花费 50ms P1S2可能花费60ms…

G0第26章:微服务概述与gRPCprotocol buffers

Go微服务与云原生 1、微服务架构介绍 单体架构(电商) SOA架构(电商) 微服务架构(电商) 优势 挑战 拆分 发展史 第一代:基于RPC的传统服务架构 第二代:Service Mesh(istio) 微服务架构分层 核心组件 Summar…

云安全与多云环境管理:讨论在云计算和多云环境下如何保护数据、应用程序和基础设施的安全

随着云计算和多云环境的广泛应用,企业正面临着数据、应用程序和基础设施安全的新挑战。在这个数字化时代,保护敏感信息和业务运作的连续性变得尤为重要。本文将深入探讨在云计算和多云环境下如何有效地保护数据、应用程序和基础设施的安全。 章节一&…

【Teamcity 安装及入门使用】

Teamcity 安装及入门使用 前言安装无Mysql版本有Mysql版本 启动创建超管用户账户和密码忘记密码结尾语 前言 前不久,teamcity更新了2023.05.2版本,我对teamcity也有一段时间的学习了,所以想写一篇博客来记录一下这段时间的学习过程。 teamc…

这是我的纪念日

我的1460天 写这篇文章,是为了纪念自己这一千多个日日夜夜,我的热爱总算有了回报。 每次看到有小伙伴点赞,评论的时候,我都很开心,我知道自己的选择是正确的,我喜欢分享自己的所见所学,我也很…