1. 程式人生 > >ElasticSearch:為中文分詞器增加對英文的支援(讓中文分詞器可以處理中英文混合文件)

ElasticSearch:為中文分詞器增加對英文的支援(讓中文分詞器可以處理中英文混合文件)

本文地址,需轉載請註明出處:

當我們使用中文分詞器的時候,其實也希望它能夠支援對於英文的分詞。試想,任何一個儲存文字的欄位都有可能是中英文夾雜的。

我們的專案中使用IKAnalyzer作為中文分詞器,它在處理文件過程中遇到英文時,利用空格和標點將英文單詞取出來,同時也會對其轉全小寫處理。其實這和真正的英文分詞已經很接近了,只有一牆之隔:詞幹提取。一個真正的英文分詞器除了分割提取單詞和全小寫處理以外,還會把單詞回溯成詞根。

比如說有一個句子:

I like cats!

它的正確分詞為:

[i, like, cat]

詞根化是一個英文分詞器需要具備的功能。IKAnalyzer正是缺少了這點,它對例句的處理結果會是:[i, like, cats

],這顯然不是我們想要的:我們希望用 “cat”“cats” 都能搜尋出這個句子,而不是非得用“cats” 才能搜到。

分析一下analyzer的內部邏輯:

Analyzer 的內部就是一條流水線

  • Step 1 字元過濾(Character filter)
  • Step 2 分詞 (Tokenization)
  • Step 3 Token 過濾(Token filtering)

Elasticsearch 已經預設構造了 8個 Analyzer。若無法滿足我們的需求,可以通過「Setting API」構造 Analyzer。

通過構造analyzer,我們可以對IK中文分詞器做一些修改,讓它實現回溯詞根。

{
  "settings": {
    "analysis": {
      "analyzer": {
        "optimizeIK": {
          "type": "custom",
          "tokenizer": "ik",
          "filter": [
            "stemmer"
          ]

        }
      }
    }
  }
}

我們新建了一個分析器,它使用ik作為分詞器,使用stemmer作為過濾器。stemmer是elasticsearch自帶的一個提取詞幹的演算法,類似的還有

snowball,都支援多種語言,有興趣可以作比較。它將在ik對文件完成分詞之後,將其中的英文單詞做提取詞幹處理。

測試一下:

-POST   {index_name}/_analyze?pretty&analyzer=optimizeIK

"I like cats"

返回結果:

{

  • "tokens": [
    • {
      • "token": "i",
      • "start_offset": 1,
      • "end_offset": 2,
      • "type": "ENGLISH",
      • "position": 1
      },
    • {
      • "token": "like",
      • "start_offset": 3,
      • "end_offset": 7,
      • "type": "ENGLISH",
      • "position": 2
      },
    • {
      • "token": "cat",
      • "start_offset": 8,
      • "end_offset": 12,
      • "type": "ENGLISH",
      • "position": 3
      }
    ]
}

至此,optimizeIK分析器同時擁有了中文+外文分詞的功能。

如果你想把這個分析器設成該index的預設分析器,給它的命名叫default即可。

歡迎交流。

相關推薦

ElasticSearch:中文增加英文支援中文可以處理中英文混合

本文地址,需轉載請註明出處: 當我們使用中文分詞器的時候,其實也希望它能夠支援對於英文的分詞。試想,任何一個儲存文字的欄位都有可能是中英文夾雜的。 我們的專案中使用IKAnalyzer作為中文分詞器,它在處理文件過程中遇到英文時,利用空格和標點將英文單詞取出來,同時也

學習總結 - swift介面卡 Hadoop 的儲存層增加 OpenStack Swift 的支援

雖然文件內所涉及的版本有點舊,但內容很精彩,值得推薦 背景 在 Hadoop 中有一個抽象檔案系統的概念,它有多個不同的子類實現,由 DistributedFileSystem 類代表的 HDFS 便是其中之一。在 Hadoop 的 1.x 版本中,HDFS 存在 NameNode 單點故障

關於js物件中兩個函式互相呼叫,其中一個定時宣告,定時迴圈報錯問題記錄一次嘗試新寫法的報錯經歷附帶無縫輪播圖程式碼

先上之前的錯誤程式碼吧,注意計時器這個方法(是想把之前寫的的輪播圖演示重構一下) var obj = { sleepTime: 2000,//輪播延時 cont: 0,//第幾張 origin: document.getElementsByClassName('main-

關於js物件中兩個函式互相呼叫,其中一個定時宣告,定時迴圈報錯問題記錄一次嘗試新寫法的報錯經歷

先上之前的錯誤程式碼吧(是想把之前寫的的輪播圖demo重構一下) var obj = { sleepTime: 2000,//輪播延時 cont: 0,//第幾張 origin: document.getElementsByClassName('ma

批量讀一個String一個夾下的大量xml

net family lin port title enc window blank bst String folder = "/nasapp/datamerger/xmls/ " ; File file = new File(folder);

CentOS 安裝rz和sz命令 lrzsz通過Xshell向Linux服務上傳

到你 dem zmodem .cn ftp linux install 自動 all lrzsz在liunx裏面可代替ftp上傳可下載。 lrzsz是一個unix通信套件提供的X,Y和ZModem文件傳輸協議。 winddows需要向centos服務器上傳文件,可直接

移動端通過ajax上傳圖片並在前臺展示——通過H5的FormData

com 地址 ces 文件 只需要 capture val data als 前些時候遇到移動端需要上傳圖片和視頻的問題,之前一直通過ajax異步的提交數據,所以在尋找通過ajax上傳文件的方法。發現了H5裏新增了一個FormData對象,通過這個對象可以直接綁定html中

編輯拓展七——不實例化的情況下修改Assets下面的

如果 ica 文件 () pan 通過 個數 material spec 描述 1.今天接了個任務,因為公司的項目展示界面的人物與武器都用了standard與standard(specular steup),這個兩個自帶的材質球是帶霧效的,然後收到場景的影響 在ui界面

OpenSUSE Leap 42.3下通過Firefox Opera Chromium瀏覽器直接執行java應用程序打開java jnlp實現在服務遠程虛擬控制臺完成遠程管理的方法

build 自定義 1.8 jnl use 信息 server run java應用 遠程虛擬控制臺依賴於java運行環境(jre),在通過瀏覽器打開鏈接前,系統必須安裝jre環境,遠程管理控制臺其實就是一個java程序,打開相應的網站會下載一個jnlp(java網絡加

eclipse創建web項目webapp目錄沒有web.xml、修改web版本號

ati script config dynamic ets pro dev web.xml develop eclipse創建web項目webapp目錄為空(沒有web.xml文件)、修改web版本號 前路坑太多,

python—— 的打開模式和文象方法 & os、os.path 模塊中關於、目錄常用的函數使用方法

fis fish forum mod 工作 tps 使用方法 tid 常用   引用自“魚c工作室” 文件的打開模式和文件對象方法 :   https://fishc.com.cn/forum.php?mod=viewthread&tid=45279&am

Python3基礎 os.path.dirname 路徑字符串進行處理 返回所在夾的路徑

charm finish 進行 art rate set rules dem 操作 ? python : 3.7.0 OS : Ubuntu 18.04.1 LTS

Java學習不走彎路教程4.用SQL查詢遠程服務

通過 abc buffer [] pri tar red 思路 pen 用SQL查詢遠程服務器的文件 一. 前言 在前上一章教程中,介紹了用SQL查詢本地文件。本章將在上一章的基礎上,進一步擴展程序。 實際的生產環境中,一般查詢的文件都放在遠程的文件或數據服務器上,下面我將

在linux服務下日誌提取的python腳本實現輸入開始時間和結束時間打包該時間段內的

number init temp mktime tar -zcvf .py uri 指令 cal 1.需求:近期在提取linux服務器下的日誌文件時總是需要人工去找某個時間段內的日誌文件,很是枯燥乏味,於是乎,我就想著用python結合linux指令來寫一個日誌提取的腳本,

LGame效能改進,並增加TMX地圖支援0 2 96版

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Phoenix綜述史上最全Phoenix中文

1. Phoenix定義 Phoenix最早是saleforce的一個開源專案,後來成為Apache基金的頂級專案。 Phoenix是構建在HBase上的一個SQL層,能讓我們用標準的JDBC APIs而不是HBase客戶端APIs來建立表,插入資料和對HBase資料進行查詢。 put

ElasticSearch從入門到精通,史上最全持續更新,未完待續,每天一點點

1.ElasticSearch的簡介 ElasticSearch:智慧搜尋,分散式的搜尋引擎 是ELK的一個組成,是一個產品,而且是非常完善的產品,ELK代表的是:E就是ElasticSearch,L就是Logstach,K就是kibana E:EalsticSea

晶片級別商品民用/商用、軍工、工業、汽車工業級的一些理解:

軍工級:由於戰爭環境複雜,其使用的電子器件要足夠的耐操,像導彈、衛星、坦克、航母裡面的電子元器件,任何一個部分拿出來都是最先進的,領先工業級10年,領先商業級20年左右,最貴最精密度的都在軍工級中體現

android selector 背景選擇的使用, button 未點選,點選,選中保持狀態效果實現

 <ImageButton                 android:layout_marginRight="15dp"                 android:background="@null"                 android:id="@+id/stop"      

樹鏈剖例題老師

我們的主角是來自魔界,英俊的人類王子阿拉貢。有一天,阿拉貢發現許多想侵入他王國的敵人。正如阿拉貢所知道的那樣,敵人有N個營地離開他的王國,M條邊連線他們。這是保證,對於任何兩個陣營,有一條,只有一條路徑連線它們。起初,阿拉貢人知道每個陣營的敵人數量。但敵人是狡猾的,他們會增加