日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IK分词器实战

發(fā)布時(shí)間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IK分词器实战 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ES中分詞器Analyzer的組成

分詞器是專門處理分詞的組件,由三部分組成。

  • Character filter:針對原始文本處理,例如去除html
  • Tokenizer:按照規(guī)則切分為單詞
  • Token Filter:將切分的單詞進(jìn)行加工,小寫,刪除stopwords,增加同義詞

以上三部分是串行處理的關(guān)系,除Tokenizer只能一個(gè)外,其他兩個(gè)都可以多個(gè)。IK分詞器僅實(shí)現(xiàn)了Tokenizer

IK分詞器原理

IK分詞器在是一款基于詞典和規(guī)則的中文分詞器。具有以下特性:

  • 采用了特有的“正向迭代最細(xì)粒度切分算法“
  • 支持細(xì)粒度和智能分詞兩種切分模式
  • 智能分詞模式支持簡單的分詞排歧義處理和數(shù)量詞合并輸出
  • 采用了多子處理器分析模式,支持:英文字母、數(shù)字、中文詞匯等分詞處理,兼容韓文、日文字符
  • IK內(nèi)部有3個(gè)子分詞器(Segmenter),CJKSegmenter(中日韓文分詞器),CN_QuantifierSegmenter(中文數(shù)量詞分詞器),LetterSegmenter(英文分詞器)。

    LetterSegmenter:從遇到第一個(gè)英文字符往后,直到碰到第一個(gè)非英文字符,這中間的所有字符則切分為一個(gè)英文單詞。

    CN_QuantifierSegmenter:從遇到每一個(gè)中文數(shù)量詞,然后檢查該數(shù)量詞后一個(gè)字符是否為中文量詞(根據(jù)是否包含在中文量詞詞典中為判斷依據(jù)),如是,則分成一個(gè)詞,如否,則不是一個(gè)詞。

    CJKSegmenter:處理邏輯較為復(fù)雜,整體思路是從字典樹中尋找匹配的詞

    分詞裁決器IKArbitrator:只有在Smart模式才會生效,僅根據(jù)幾條可能是最佳的分詞實(shí)踐規(guī)則,并沒有用到任何概率模型,也不具有新詞發(fā)現(xiàn)的功能。

    兩種分詞模式

    智能模式

    對應(yīng)es的IK插件的ik_smart,會做最粗粒度的拆分。比如會將“中華人民共和國國歌”拆分為“中華人民共和國,國歌”,適合 Phrase 查詢。

    細(xì)粒度模式

    對用es的插件ik_max_word: 會將文本做最細(xì)粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,中華人民,中華,華人,華,人民共和國,人民,人,民,共和國,共和,和,國國,國歌”,會窮盡各種可能的組合,適合 Term Query。

    IK分詞實(shí)踐

    IK分詞的效果主要取決于詞庫,目前自帶主詞典擁有27萬左右的漢語單詞量。對于應(yīng)用領(lǐng)域的不同,需要各類專業(yè)詞庫的支持。

    分詞規(guī)律

    es檢索的核心數(shù)據(jù)結(jié)構(gòu)為倒排索引,分詞是否合理正確,直接影響數(shù)據(jù)的檢索結(jié)果,在自定義詞典及分詞器時(shí),可以采取以下方式來驗(yàn)證分詞的結(jié)果:

    GET /_analyze {"analyzer": "ik_max_word","text": ["甲三"] }

    ik_max_word

  • 當(dāng)查詢詞在詞典中不存在時(shí),會按字拆分
    例如:在北–>在,北
  • 當(dāng)查詢詞在詞典中存在,且長度為兩個(gè)字時(shí),有時(shí)拆分有時(shí)不拆分
    例如:甲乙–>甲乙
    聯(lián)通–>聯(lián)通,聯(lián),通
  • 當(dāng)查詢詞在詞典中存在,且查詢詞的一部分也在詞典在中存在,則分別拆分
    例如:甲乙丙丁–>甲乙丙丁,甲乙,丙丁
    中國聯(lián)通–>中國聯(lián)通,中國,國聯(lián),聯(lián)通,通(沒弄明白為啥這里聯(lián)通不拆成聯(lián)、通)
  • 當(dāng)查詢詞任意部分都不在詞典中存儲,則按字拆分
  • ik_smart

  • 當(dāng)查詢詞在詞典中不存在時(shí),會按字拆分
    例如:在北–>在,北
  • 當(dāng)查詢詞在詞典中存在,不做拆分
    例如:甲乙–>甲乙
    甲乙丙丁–>甲乙丙丁
  • 當(dāng)查詢詞任意部分都不在詞典中存儲,則按字拆分
  • 依據(jù)上述規(guī)律,我們可以在寫入數(shù)據(jù)時(shí)使用ik_max_word,增加分詞數(shù)量,提高被命中幾率,在查詢數(shù)據(jù)時(shí)使用ik_smart,減少分詞數(shù)量,提升結(jié)果準(zhǔn)確率,減少無關(guān)結(jié)果

    去掉分詞結(jié)果中的單個(gè)字

    使用es內(nèi)置的token filter:length

    POST _analyze {"text": "一中華人民共和國國歌","filter": [{"type": "length","min": "2"}],"tokenizer": "ik_smart" }

    分詞結(jié)果中“一”被過濾掉,但對于某些查詢詞,例如“父與子”,該設(shè)置會導(dǎo)致無分詞結(jié)果

    總結(jié)

    以上是生活随笔為你收集整理的IK分词器实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。