最近在做建築行業相關的專案,遇到的乙個應用場景是解析材料名稱。由於輸入的資料中材料名稱非常不規範,而且數量量又非常大,所以處理起來比較困難。
名稱不規範的意思是,比如標準材料叫:「圓鋼」,材料中出現的名稱有:「鋼筋圓鋼」,「圓鋼hpb300」,「鋼筋 圓鋼(≤φ10)」等等,也就是說材料名稱前面或者後面很多修飾語(一般情況是前面是材料分類,後面是型號資訊)。
一般的思路就是關鍵字匹配,但是由於資料量比較大,一般上千條,而標準材料數量也上千條左右。所以用這種方法的話,就是兩個for迴圈,迴圈次數非常多:
for _, v := range materiallist
}}
新的思路是使用中文分詞,將標準材料放在字典裡面,如下:
// 鍵為標準材料名稱,值為材料資訊
「圓鋼」: ******x,
"螺紋鋼": ******x,
在解析材料資料的時候,先對材料進行分詞,比如「鋼筋圓鋼」就會分為「鋼筋」,「圓鋼」,「圓鋼hpb300」會分為"圓鋼",「hpb300」等等。
分詞之後,在詞的陣列中從後往前(針對我的應用場景)在字典中查詢,直到鍵匹配成功。一般分詞之後詞的數量不會太多,基本都在5條以內,所以效率比較高。
這樣將以前的內部迴圈匹配查詢轉換為分詞操作和字典查詢,只要分詞操作效能高的話,整體查詢效率會比第一種方法高很多。
其他類似場景也可以使用這種思路來提公升程式的效能。
postgres中的中文分詞zhparser
基本查了下網路,postgres的中文分詞大概有兩種方法 其中的bamboo安裝和使用都比較複雜,所以我選擇的是zhparser scws是簡易中文分詞系統的縮寫,它的原理其實很簡單,基於詞典,將文字中的內容按照詞典進行分詞,提取關鍵字等。github上的位址在這裡。它是xunsearch的核心分詞...
postgres中的中文分詞zhparser
基本查了下網路,postgres的中文分詞大概有兩種方法 其中的bamboo安裝和使用都比較複雜,所以我選擇的是zhparser scws是簡易中文分詞系統的縮寫,它的原理其實很簡單,基於詞典,將文字中的內容按照詞典進行分詞,提取關鍵字等。github上的位址在這裡。它是xunsearch的核心分詞...
postgres中的中文分詞zhparser
基本查了下網路,postgres的中文分詞大概有兩種方法 其中的bamboo安裝和使用都比較複雜,所以我選擇的是zhparser scws是簡易中文分詞系統的縮寫,它的原理其實很簡單,基於詞典,將文字中的內容按照詞典進行分詞,提取關鍵字等。github上的位址在這裡。它是xunsearch的核心分詞...