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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP高性能输出UNICODE正则汉字列表 汉字转拼音多音字解决方案 搜索引擎分词细胞词库更新 搜狗词库提取TXT...

發布時間:2023/12/31 php 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP高性能输出UNICODE正则汉字列表 汉字转拼音多音字解决方案 搜索引擎分词细胞词库更新 搜狗词库提取TXT... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

目前現狀

漢字轉拼音

難度大就大在 多音字!行業上較準確的是基于詞語、成語的識別。搜狗有1萬多詞庫 每個詞庫又很大:
比如:

  • 我們讀 le?但是成語?一了百了?中 讀 liao
  • 解元?作為姓名 應該讀 xie yuan?我是解元的家人解決了1個問題 ?作為一句話 無法切割哪個是人名的讀法 哪個是普通讀法
  • 最終 無法達到100%精確 只能盡可能準確 加大正確率!

    防止采集

    HookPHP項目地址:https://github.com/letwang/HookPHP,如果大家喜歡的話,請給個Star,讓更多的人看到優秀的開源項目,為PHP發展貢獻一把力量!QQ架構探討群:679116380

    搜索引擎

    分詞同理:

  • 你無法預料明天的互聯網會出現哪些新詞而導致你必須重新分詞才能搜到新詞。
  • 每年高考漢語都有修正版 現在一次站在巨人肩膀上固定好詞庫?以后還是要根據高考方案來更新?所以 最終 無法達到100%精確 只能盡可能準確 加大正確率!

    解決方案

    1.運用采集工具批量采集搜狗詞庫到本地

    2.執行Python程序,把上述詞庫提取出到TXT文檔中

    #!/usr/bin/python # -*- coding: utf-8 -*- #https://my.oschina.net/cart #letwangimport struct,sys,binascii,pdb,osstartPy = 0x1540; startChinese = 0x2628;GPy_Table ={} GTable = []def byte2str(data):i = 0;length = len(data)ret = u''while i < length:x = data[i] + data[i+1]t = unichr(struct.unpack('H',x)[0])if t == u'\r':ret += u'\n'elif t != u' ':ret += ti += 2return retdef getPyTable(data):if data[0:4] != "\x9D\x01\x00\x00":return Nonedata = data[4:]pos = 0length = len(data)while pos < length:index = struct.unpack('H',data[pos]+data[pos+1])[0]pos += 2l = struct.unpack('H',data[pos]+data[pos+1])[0]pos += 2py = byte2str(data[pos:pos+l])GPy_Table[index]=pypos += ldef getWordPy(data):pos = 0length = len(data)ret = u''while pos < length:index = struct.unpack('H',data[pos]+data[pos+1])[0]ret += GPy_Table[index]pos += 2 return retdef getWord(data):pos = 0length = len(data)ret = u''while pos < length:index = struct.unpack('H',data[pos]+data[pos+1])[0]ret += GPy_Table[index]pos += 2 return retdef getChinese(data): pos = 0length = len(data)while pos < length:same = struct.unpack('H',data[pos]+data[pos+1])[0]pos += 2py_table_len = struct.unpack('H',data[pos]+data[pos+1])[0]pos += 2py = getWordPy(data[pos: pos+py_table_len])pos += py_table_lenfor i in xrange(same):c_len = struct.unpack('H',data[pos]+data[pos+1])[0]pos += 2 word = byte2str(data[pos: pos + c_len])pos += c_len ext_len = struct.unpack('H',data[pos]+data[pos+1])[0]pos += 2count = struct.unpack('H',data[pos]+data[pos+1])[0]GTable.append((count,py,word))pos += ext_lendef deal(file_name):print '-'*60f = open(file_name,'rb')data = f.read()f.close()if data[0:12] !="\x40\x15\x00\x00\x44\x43\x53\x01\x01\x00\x00\x00":print "確認你選擇的是搜狗(.scel)詞庫?"sys.exit(0)print "詞庫名:" ,byte2str(data[0x130:0x338])print "詞庫類型:" ,byte2str(data[0x338:0x540])print "描述信息:" ,byte2str(data[0x540:0xd40])print "詞庫示例:",byte2str(data[0xd40:startPy])getPyTable(data[startPy:startChinese])getChinese(data[startChinese:])if __name__ == '__main__':o = [fname for fname in os.listdir("./") if fname[-5:] == ".scel"]for f in o:deal(f)f = open('sougou.txt','w')for count,py,word in GTable:f.write( unicode('{%(count)s}' %{'count':count}+py+' '+ word).encode('utf-8') )f.write('\n')f.close()

    把上述保存為文件名sougou,且所有采集好的搜狗詞庫放置與其同級,執行 python sougou,會生成sougou.txt,里面就是成千上萬的 詞頻、拼音、分詞,再使用Cron定時任務采集、更新詞庫即可保持漢字轉拼音、搜索引擎分詞元數據常新。

    實際,除了搜狗還有其他輸入法詞庫可供類似操作,最終目的是詞庫夠新 夠全!

    另外,在unicode官網可以查到中文漢字通用的unicode編碼范圍。

    PHP高性能輸出UNICODE正則漢字列表

    網上,針對漢字、特殊字符的UNICODE 編碼、解碼實現,方法諸多,但是大多是復制粘貼,沒有新意!以下為原創:

    <?php for ($i = 0x4e00; $i <= 0x9fa5; $i ++) {echo json_decode('"\u' . dechex($i) . '"'); }

    上述會打印20902個漢字列表,這也解釋了上述正則是如何透明的工作匹配漢字的,其中有幾個知識點:

  • 16進制以0x開頭
  • 16進制范圍 0-9 a-f 不區分大小寫
  • 16進制可以巧妙的通過遞增進行十進制默認轉換
  • 10進制轉換為16進制方法是dechex
  • \u 加上 1個16進制字符 就是1個字符的UNICODE形式
  • json_decode 加上 帶雙引號的UNICODE字符 可以輕易轉換為常用識別字符
  • PHP UNICODE 漢字 編碼:

    var_dump(json_encode('2018 ABC 我是中國人!網站:http://my.oschina.net/cart/'));

    上述就實現了PHP中對漢字、特殊字符的 UNICODE 編碼,會輸出:

    string(96) ""2018 ABC \u6211\u662f\u4e2d\u56fd\u4eba\uff01\u7f51\u7ad9\uff1ahttp:\/\/my.oschina.net\/cart\/""

    PHP UNICODE 漢字 解碼:

    如果我們嘗試

    var_dump(json_decode('2018 ABC \u6211\u662f\u4e2d\u56fd\u4eba\uff01\u7f51\u7ad9\uff1ahttp:\/\/my.oschina.net\/cart\/'));

    或者

    var_dump(json_decode("2018 ABC \u6211\u662f\u4e2d\u56fd\u4eba\uff01\u7f51\u7ad9\uff1ahttp:\/\/my.oschina.net\/cart\/"));

    結果都是

    NULL

    是錯誤的,并沒有按照我們的意愿解碼!

    因為你并沒有傳入正確的json格式字符串!!!

    心細的同學肯定已經發現,上述json_encode輸出的是

    "2018 ABC \u6211\u662f\u4e2d\u56fd\u4eba\uff01\u7f51\u7ad9\uff1ahttp:\/\/my.oschina.net\/cart\/"

    注意輸出字符串兩段的 雙引號這也是輸出 json_encode 內容的一部分!很重要!

    所以我們如果想正確的用json_decode解碼,我們以下操作即可:

    var_dump(json_decode('"2018 ABC \u6211\u662f\u4e2d\u56fd\u4eba\uff01\u7f51\u7ad9\uff1ahttp:\/\/my.oschina.net\/cart\/"'));

    正確的解碼輸出了我們的結果:

    string(63) "2018 ABC 我是中國人!網站:http://my.oschina.net/cart/"

    看看,沒有什么技術含量,都是基本知識的掌握!

    PHP UNICODE 漢字 不規則形式 解碼:

    也許有的同學沒有那么幸運,得到的字符串形如:

    2018 ABC u6211u662fu4e2du56fdu4ebauff01u7f51u7ad9uff1ahttp:\/\/my.oschina.net\/cart\/

    怎么解碼?心細的同事已經發現,所有的u少了\,應該是\u,u后面跟隨的是【0-9a-f】4位字符串!

    瀟灑破之(preg_replace的e修飾符在PHP新版本已經棄用了,所以官方推薦使用preg_replace_callback代替之!):

    $str = '2018 ABC u6211u662fu4e2du56fdu4ebauff01u7f51u7ad9uff1ahttp:\/\/my.oschina.net\/cart\/'; var_dump(json_decode('"'.preg_replace_callback("/u([0-9a-f]{4})/", function($match){return '\u'.$match[1];}, $str).'"'));

    就1句話,完工,下班。

    轉載于:https://my.oschina.net/cart/blog/326787

    總結

    以上是生活随笔為你收集整理的PHP高性能输出UNICODE正则汉字列表 汉字转拼音多音字解决方案 搜索引擎分词细胞词库更新 搜狗词库提取TXT...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。