摘要:寫(xiě)在前面最近在優(yōu)化網(wǎng)站的搜索部分,網(wǎng)站是用實(shí)現(xiàn)的,主要業(yè)務(wù)是在線視頻教育網(wǎng)站,之前搜索只是一段模型中的模糊匹配,所以只能搜索關(guān)鍵字,但是突然又想在網(wǎng)站做個(gè)類似于百度問(wèn)答的功能。篩選出大于概率的詞至此實(shí)現(xiàn)簡(jiǎn)單分詞就寫(xiě)完了。
寫(xiě)在前面
最近在優(yōu)化網(wǎng)站的搜索部分,網(wǎng)站是用Django實(shí)現(xiàn)的,主要業(yè)務(wù)是在線視頻教育網(wǎng)站,之前搜索只是一段Django ORM模型中的icontains模糊匹配,所以只能搜索關(guān)鍵字,但是CEO(SB)突然又想在網(wǎng)站做個(gè)類似于百度問(wèn)答的功能。但是搜索問(wèn)題就成了一個(gè)棘手的事情,原有搜索不能滿足需求,但是調(diào)研相關(guān)的elasticsearch之類的全文檢索又有點(diǎn)重(除了有點(diǎn)重,主要是CEO不給時(shí)間??!),所以就把精力放在了分詞上,能短平快的實(shí)現(xiàn)該功能,而且比較輕。
因?yàn)殛P(guān)注的梁博,自然而然想到了他博士期間寫(xiě)的在線分詞pullword(寫(xiě)這篇文章時(shí)他個(gè)人網(wǎng)站又掛掉了,哈哈哈,這里貼出了他的微博供大家膜拜),在此對(duì)梁博表示感謝??!
下面是我寫(xiě)的分詞的utils,不過(guò)梁博的分詞現(xiàn)在只能支持中文,輸入英文跟數(shù)字會(huì)返回error,之前是想調(diào)用梁博的原有的pullword,他的API地址,但是我測(cè)了一下需要6-7秒,對(duì)于網(wǎng)站搜索功能顯然沒(méi)辦法使用,后來(lái)又找到他掛在百度的免費(fèi)API,測(cè)試了一下數(shù)據(jù)返回在0.1秒左右,還不錯(cuò),就使用了百度api。
要注意,他原生的api中有個(gè)param1的參數(shù),表示選詞概率,param1=0.8表示只出概率在0.8以上的詞,但是我調(diào)用傳參的時(shí)候不好用,所以就通過(guò)返回的數(shù)據(jù)自己寫(xiě)了篩選。
get_pullword需要兩個(gè)參數(shù),第一個(gè)是一段需要分詞的話,第二個(gè)是篩選分詞后選詞概率,[0,1]區(qū)間,等同于他的param1的參數(shù)。
# coding: utf-8 __author__ = "flyingpang" import requests import datetime def get_pullword(s, probability): """ :param s: 一段需要分詞的中文. :param probability: 選詞概率. :return: 按照概率從大到小排序返回一個(gè)list. """ headers = {"apikey": "你自己的百度apikey"} url = "http://apis.baidu.com/apistore/pullword/words" params = {"source": s, "param1": "0", "param2": "1"} r = requests.get(url=url, headers=headers, params=params) if r.status_code != 200 or r.content.strip().split(" ")[0].startswith("error"): result = list() result.append(s) return result else: data = r.content.strip().split(" ") return split_word(data, probability) def split_word(words, probability=0): """ :param words: 分詞結(jié)果的字典, 其中key為分詞,value為概率. :param probability: 最小分詞概率 :return: 概率從大到小的分詞列表. """ # 分詞跟相關(guān)概率保存到字典中. d = dict() for i in words: m = i.split(":") d[m[0].decode("utf-8")] = float(m[1]) m = sorted(d.iteritems(), key=lambda k: k[1], reverse=True) words_list = [] for i in range(len(m)): if m[i][1] >= probability: words_list.append(m[i][0]) return words_list if __name__ == "__main__": source = u"清華大學(xué)是好學(xué)校" t1 = datetime.datetime.now() test = get_pullword(source, 0.8) t2 = datetime.datetime.now() print "total time", t2 - t1 print test
因?yàn)槲液蠖耸褂肈iango的icontains來(lái)匹配,所以返回一個(gè)list的話沒(méi)辦法匹配,所以這里給出一個(gè)Django處理的方法。
query = self.request.GET.get("q", None) pull_words = get_pullword(query, 0.8) # 篩選出大于0.8概率的詞 query_list = reduce(operator.or_, (Q(title__icontains=item) for item in pull_words)) question_list = Question.objects.filter(query_list).order_by("-id")
至此python實(shí)現(xiàn)簡(jiǎn)單分詞就寫(xiě)完了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44290.html
摘要:項(xiàng)目代碼下載地址基于共現(xiàn)提取釜山行人物關(guān)系更多經(jīng)典項(xiàng)目全部項(xiàng)目 項(xiàng)目簡(jiǎn)介:本項(xiàng)目將帶大家使用 Python 提取《釜山行》人物關(guān)系,對(duì)于給定的劇本文本,通過(guò)分析文本中人物的共現(xiàn)關(guān)系,提取整個(gè)文本表示的人物關(guān)系,并將人物關(guān)系可視化表示。本項(xiàng)目教程由Forec發(fā)布在實(shí)驗(yàn)樓。 一、項(xiàng)目介紹 1. 內(nèi)容簡(jiǎn)介 《釜山行》是一部喪尸災(zāi)難片,其人物少、關(guān)系簡(jiǎn)單,非常適合我們學(xué)習(xí)文本處理。這個(gè)項(xiàng)目將介...
摘要:利用我們集成的目前世界上規(guī)模最大的人工分詞和詞性標(biāo)注中文語(yǔ)料庫(kù)約含萬(wàn)字訓(xùn)練而成,模型標(biāo)注能力強(qiáng)大。據(jù)說(shuō)是最好的中文分詞組件,支持等多種語(yǔ)言。 總是看到別人用Python搞各種統(tǒng)計(jì),前端菜鳥(niǎo)的我也來(lái)嘗試了一把。有各種語(yǔ)義分析庫(kù)在,一切好像并不是很復(fù)雜。不過(guò)Python剛開(kāi)始看,估計(jì)代碼有點(diǎn)丑。 一、兩種中文分詞開(kāi)發(fā)包 thulac (http://thulac.thunlp.org/)...
摘要:分詞的算法中文分詞有難度,不過(guò)也有成熟的解決方案。例如通過(guò)人民日?qǐng)?bào)訓(xùn)練的分詞系統(tǒng),在網(wǎng)絡(luò)玄幻小說(shuō)上,分詞的效果就不會(huì)好。三的優(yōu)點(diǎn)是開(kāi)源的,號(hào)稱是中,最好的中文分詞組件。 showImg(https://segmentfault.com/img/remote/1460000016359704?w=1350&h=900); 題圖:by Lucas Davies 一、前言 分詞,我想是大多數(shù)...
摘要:的重連機(jī)制會(huì)嘗試重連至其他伺服器并重新建立起對(duì)應(yīng)關(guān)系。使用進(jìn)行中文分詞曹操在操場(chǎng)操美女對(duì)分詞后的名詞和動(dòng)詞轉(zhuǎn)換為簡(jiǎn)體中文并查詢命中則替換。返回替換后的字符串得到曹操在操場(chǎng)美女打包部署本身是單線程的雖然本身提供模塊但需要修改代碼。 本篇是一個(gè)Node新手做完實(shí)際項(xiàng)目后的心得總結(jié)。Node高手完全可以略過(guò)本文。 摘要 如果BOSS要求你在短期內(nèi)快速實(shí)現(xiàn)一套聊天云服務(wù)平臺(tái), 你的第一反應(yīng)是什...
閱讀 2524·2021-11-18 10:02
閱讀 2000·2021-11-09 09:45
閱讀 2454·2021-09-26 09:47
閱讀 1039·2021-07-23 10:26
閱讀 1082·2019-08-30 15:47
閱讀 3374·2019-08-30 15:44
閱讀 988·2019-08-30 15:43
閱讀 895·2019-08-29 13:50