ES——中文分詞以及詞庫擴展

2021-02-19 一個溫柔的程式設計師

中文分詞插件的安裝:

     elasticserch默認情況下是不支持中文分詞的,所以在我們日常的開發中需要安裝下中文詞庫的插件analysis-ik。

    首先進入elasticsearch的根目錄下執行以下命令安裝插件,版本要和自己電腦安裝的elasticsearch版本對應上,如本人電腦安裝的是6.6.1版本:

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.1/elasticsearch-analysis-ik-6.6.1.zip

    檢查下中文分詞是否生效——

    標準分詞

GET _analyze?pretty{    "analyzer": "standard",     "text":"中華人民共和國國歌" }

    智能分詞

GET _analyze?pretty{    "analyzer": "ik_smart",     "text":"中華人民共和國國歌" }

    最大化分詞

GET _analyze?pretty{    "analyzer": "ik_max_smart",     "text":"中華人民共和國國歌" }

最佳實踐:索引建立時使用最大化分詞,查詢時使用智能分詞

詞庫擴展  

     接下來就是詞庫的擴展,詞庫擴展主要對應中文字典中不存在的詞彙進行添加,如網絡用語中的「騷年」,公司的名稱等等都是詞庫擴展的主要對象。除此之外,我們詞庫擴展還有同義詞的擴展,如我們平常用的iphone,當輸入「蘋果」的時候,我們也是期待能查出手機的。所以這裡說的詞庫擴展主要分兩項,其一是生詞擴展,二是同義詞擴展

一、中文詞庫擴展:

    1.新增詞庫

        cd /elasticsearch-6.6.1/config/analysis-ik

        新建文件new_word.dic  

        vim new_word.dic  

       2.配置詞庫,重啟elasticsearch

        cd elasticsearch-6.6.1/config/analysis-ik

        配置詞庫路徑,默認是配置文件的相對路徑,配置如下

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"><properties>  <comment>IK Analyzer 擴展配置</comment>    <entry key="ext_dict">new_word.dic</entry>     <entry key="ext_stopwords"></entry>        </properties>

    3.通過_update_by_query 更新索引,使詞庫生效(不建議暴力重新建索引)

#加了新詞庫更新

POST /shop/_update_by_query{  "query": {    "bool": {      "must": [        {"term": { "name":"騷" }},        {"term": { "name":"年" }}      ]    }  }}

二、中文同義詞擴展:

1.新增同義詞詞庫

    cd /elasticsearch-7.9.1/config/analysis-ik

    vim synonyms.txt

2.重新建立索引,設置自定義分詞analysis

PUT /shop{  "settings": {    "number_of_shards": 1,     "number_of_replicas": 0,    "analysis": {      "filter": {        "synonym_filter":{          "type": "synonym",          "synonyms_path":"analysis-ik/synonyms.txt"        }      },      "analyzer": {        "ik_syno":{          "type":"custom",          "tokenizer":"ik_smart",          "filter":["synonym_filter"]        },        "ik_syno_max":{          "type":"custom",          "tokenizer":"ik_max_word",          "filter":["synonym_filter"]        }      }    }  },   "mappings": {    "properties": {      "id":{"type":"integer"},      "name":{"type":"text","analyzer": "ik_syno_max","search_analyzer": "ik_syno"},      "tags":{"type":"text","analyzer": "whitespace","fielddata": true},      "location":{"type":"geo_point"},      "remark_score":{"type":"double"},      "price_per_man":{"type":"integer"},      "category_id":{"type":"integer"},      "category_name":{"type":"keyword"},      "seller_id":{"type":"integer"},      "seller_remark_score":{"type":"double"},      "seller_disabled_flag":{"type":"integer"}    }  }}

相關焦點

  • 中文分詞文章索引和分詞數據資源分享
    ,除了基於深度學習的分詞方法還沒有探討外,「古典」機器學習時代的中文分詞方法都有涉及,從基於詞典的中文分詞(最大匹配法),到基於統計的分詞方法(HMM、最大熵模型、條件隨機場模型CRF),再到Mecab、NLTK中文分詞,都有所涉及。
  • ElasticSearch 中的中文分詞器以及索引基本操作詳解
    內置分詞器:1.2 中文分詞器在 Es 中,使用較多的中文分詞器是 elasticsearch-analysis-ik,這個是 es 的一個第三方插件,代碼託管在 GitHub 上。1.2.1 安裝執行如下命令即可:1.2.2 測試es 重啟成功後,首先創建一個名為 test 的索引:接下來,在該索引中進行分詞測試:1.2.3 自定義擴展詞庫
  • 產品經理熬夜查看ES資料發現IK分詞訣竅
    一、ES的分詞方法網上都說了,ES有三種分詞方法:單字分詞,二分法分詞,詞庫分詞。舉個慄子,簡單方便的理解這三個看似十分高大上的分詞方法。一眼就能看出來,最契合我們的,應該是第三種詞庫分詞,而詞庫分詞最常用的就是IK分詞。
  • R語言怎麼給中文分詞?
    作者:王亨 ,R語言中文社區專欄作者,跟著菜鳥一起一步步學習R語言,爭做R語言高手。
  • Hive基於UDF進行文本分詞
    這個時候我們的解決方案主要有兩種,一種是使用第三方提供的一些詞庫,還有一種是自建詞庫,然後有專人去維護,這個也是比較常見的一種情況。最後一個就是我們使用的分詞工具,因為目前主流的分詞器很多,選擇不同的分詞工具可能對我們的分詞結果有很多影響。
  • jiebaR 0.1 發布,R語言中文分詞
    jiebaR是"結巴"中文分詞的R語言版本,支持最大概率法(Maximum Probability),隱式馬爾科夫模型(Hidden
  • 中文分詞工具測評
    引言分詞對於研究和應用中文自然語言處理的童鞋來說,都是一個非常非常基礎的部件,分詞的質量直接影響到後續詞性標註、命名實體識別、句法分析等部件的準確性
  • 中文分詞算法技術的原理和理論運用
    現在的計劃是等新站全部的展示樣式出來之後,便會進行整體大框架規劃,包括老站,而這裡想說的就是關於分詞技術理論的簡單介紹。分詞技術就是搜尋引擎針對用戶提交查詢的關鍵詞串進行的查詢處理後根據用戶的關鍵詞串用各種匹配方法進行分詞的一種技術。由於國內主要以中文搜尋引擎為主,這裡的分詞技術為中文分詞技術。
  • nodejs 中文分詞模塊 node-segment
    模塊以盤古分詞組件中的詞庫為基礎,算法設計也部分參考了盤古分詞組件中的算法。
  • 專欄 中文分詞工具測評
    分詞對於研究和應用中文自然語言處理的童鞋來說,都是一個非常非常基礎的部件,分詞的質量直接影響到後續詞性標註、命名實體識別、句法分析等部件的準確性
  • word v1.3.1 發布,Java 分布式中文分詞組件
    word 分詞是一個Java實現的分布式的中文分詞組件,提供了多種基於詞典的分詞算法,並利用ngram模型來消除歧義。
  • ML基礎——讓人腦殼疼的中文分詞算法
    今天我們就來講講關鍵詞提取當中最重要的一個部分——中文分詞。在世界上眾多的語言當中,中文算是比較特殊的一種。許多語言自帶分詞信息,比如英文,機器學習寫作machine learning。machine和learning之間自帶一個空格作為分隔。但是中文不是這樣,漢字之間沒有任何分隔符。
  • 搜尋引擎 Elasticsearch 中文擴展分詞器使用,更快更準確!
    Simple Analyzer - 按照非字母切分(符號被過濾), 小寫處理Stop Analyzer - 小寫處理,停用詞過濾(the,a,is)Whitespace Analyzer - 按照空格切分,不轉小寫Keyword Analyzer - 不分詞
  • 11款開放中文分詞引擎大比拼
    例如示例中的「胎噪」、「風燥」等,如果系統沒有足夠強大的訓練詞庫或領域優化,會使準確率有較大程度降低。比較有意思的是,對比其他數據源,有3家系統都在汽車論壇領域達到最高:騰訊文智、SCWS中文分詞、結巴分詞。
  • 11款開放中文分詞引擎大比拼 | 網際網路數據資訊網-199IT | 中文...
    例如示例中的「胎噪」、「風燥」等,如果系統沒有足夠強大的訓練詞庫或領域優化,會使準確率有較大程度降低。比較有意思的是,對比其他數據源,有3家系統都在汽車論壇領域達到最高:騰訊文智、SCWS中文分詞、結巴分詞。樣例:舒適性 胎噪 風噪 偏 大 避震 偏 硬 過 坎 彈跳 明顯【餐飲點評】餐飲點評數據為顧客評論數據,更偏重口語化。
  • 97.5%準確率的深度學習中文分詞(字嵌入+Bi-LSTM+CRF)
    本文給出基於深度學習的中文分詞實現,藉助大規模語料,不需要構造額外手工特徵,在2014年人民日報語料上取得97.5%的準確率。模型基本是參考論文:http://www.aclweb.org/anthology/N16-1030相關方法中文分詞是個比較經典的問題,各大網際網路公司都會有自己的分詞實現。
  • 搜尋引擎優化:搜尋引擎原理,分詞技術解析,中文搜索排名核心
    分詞技術是中文搜尋引擎中特有的技術,英文以一個單詞為單位,一個單詞有明確的意思,有空格可進行間隔,但是中文中通常一句話才能完整表達一個意思,計算機不能直接把中文拆解成單個字來分析,因此需要引入中文分詞技術講一句話切割成一個個有意義的詞語進行解釋。
  • 嚴選 | Elastic中文社區201903錯題本
    ngram分詞分的很細,會不會導致較多的內存佔用?當數據量較大時,是否有瓶頸??【回復】ngram分詞分的很細會產生較多的 term ,因此會比普通使用詞典分詞的佔用更多的存儲和內容; 數據量大的時候,可通過分索引和多分片來分散壓力。1.4 自定義id帶來的問題問題描述:我們目前業務使用了自定義id,md5(uid+someid), 目的是為了再次更新方便。
  • PHP 實現中文分詞搜索功能
    把中文的漢字序列切分成有意義的詞,就是中文分詞,有些人也稱為切詞。我是一個學生,分詞的結果是:我 是 一個 學生。應用場景打個比方,我們要搜索內容欄位有「中文分詞搜索功能」的文章,用 like 去查詢的話,可以匹配以下幾種:like '中文分%'like '%中文分詞搜索功能%'
  • 既然沒有崩壞3的搜狗詞庫,那就自己做!
    細胞詞庫的類別可以是某個專業領域(如醫學領域詞庫),也可以是某個地區(如北京地名詞庫),也可以是某個遊戲(如魔獸世界詞彙)。簡單來說,擴展了細胞詞庫就是能打出很多時候不是一個詞的語句。然後呢,八月初想給崩壞3安裝一個詞庫好方便打出各種常用詞句提高打字速度,然後搜索崩壞3的詞庫是這樣的:對比一下隔壁遊戲的詞庫: