NLP筆記(2) -- 基于搜索的模型

寫(xiě)在前面

  • 最近在學(xué)習(xí)NLP的課程,下面的代碼稻据,基本來(lái)自我的NLP課程作業(yè),當(dāng)然大部分都是模仿老師寫(xiě)的灶体,使用Python完成,感興趣的可以去我的github上面查看:https://github.com/LiuPineapple/Learning-NLP/tree/master/Assignments/lesson-02
  • 作者水平有限策泣,如果有文章中有錯(cuò)誤的地方器罐,歡迎指正犹褒!如有侵權(quán)抵窒,請(qǐng)聯(lián)系作者刪除。

Search Based Model(基于搜索的模型)

廣度優(yōu)先搜索(BFS)與深度優(yōu)先搜索(DFS)

??廣度優(yōu)先搜索(Breadth First Search)與深度優(yōu)先搜索(Depth First Search)是兩種常用的搜索方法叠骑。兩者之間的區(qū)別和算法網(wǎng)上有很多詳細(xì)介紹李皇,這里不再詳述。

北京地鐵路線(xiàn)搜索

??使用爬蟲(chóng)宙枷,我們可以得到北京地鐵的各個(gè)站點(diǎn)連接情況掉房,由于作者現(xiàn)在還不能熟練使用爬蟲(chóng),所以使用了班里同學(xué)的爬蟲(chóng)代碼——歐同學(xué)的代碼鏈接 在此表示感謝慰丛,這里不再展示卓囚,只展示爬蟲(chóng)的結(jié)果的一部分。我們可以看到璧帝,結(jié)果是一個(gè)字典捍岳,key是北京地鐵所有的站點(diǎn)富寿,value 是一個(gè)列表睬隶,列表中的元素是與key所代表的站點(diǎn)有一站距離的站點(diǎn),也就是可以從key所代表的站點(diǎn)直接通往list中的站點(diǎn)页徐。

圖片1

??接下來(lái)我們創(chuàng)建search()函數(shù)苏潜,希望輸入起點(diǎn)和終點(diǎn),就能輸出乘坐地鐵的路線(xiàn)变勇。

from collections import defaultdict
station_net = defaultdict(list)
station_net.update(station_connection)
def search(start,destination,graph):
    routes = [[start]]
    seen = set()
    while routes:
        route = routes.pop(0)
        frontier = route[-1]
        if frontier in seen: continue
        for station in graph[frontier]:
            if station in seen: continue
            new_route= route + [station]
            routes.append(new_route)
            if station == destination: return new_route
        seen.add(frontier)

上段代碼中需要注意的地方有:

  1. Python defaultdict 的使用恤左。http://www.reibang.com/p/bbd258f99fd3
  2. Python3 set(集合)的使用。 https://www.runoob.com/python3/python3-set.html
  3. Python List pop()方法搀绣。https://www.runoob.com/python/att-list-pop.html
  4. Python 字典(Dictionary) update()方法飞袋。https://www.runoob.com/python/att-dictionary-update.html
  5. 這里使用了廣度優(yōu)先搜索(BFS),如果要使用深度優(yōu)先搜索(DFS)的話(huà)有兩種方法链患,(1)route = routes.pop(0)換成route = routes.pop(0) (2)new_route= route + [station]換成 new_route= [station] + route巧鸭,結(jié)果也可能會(huì)有所不同。

search()函數(shù)最后輸出一個(gè)列表麻捻,里面的元素按順序包括起點(diǎn)纲仍、終點(diǎn)以及其中所有的經(jīng)過(guò)站。為了讓結(jié)果更加美觀贸毕,我們把列表合成一個(gè)字符串郑叠,站點(diǎn)之間用->連接。

def pretty_print(route):
    return '->'.join(route)
pretty_print(search('天安門(mén)西','奧體中心',station_net))
'天安門(mén)西->西單->復(fù)興門(mén)->阜成門(mén)->車(chē)公莊->西直門(mén)->積水潭->鼓樓大街->安德里北街->安華橋->北土城->奧體中心'

??注意到明棍,上端代碼其實(shí)是默認(rèn)了選取換乘最少的路線(xiàn)乡革,如果我們?cè)黾右粋€(gè)選項(xiàng),給routes排個(gè)序,就可能實(shí)現(xiàn)其他功能(比如選取換乘最少的路線(xiàn)署拟,選取距離最短的路線(xiàn)等)婉宰,這時(shí)候的搜索,既不是BFS也不是DFS推穷。如下所示選取換乘最少的路線(xiàn)心包,其實(shí)跟上一個(gè)代碼得到的結(jié)果相同。

def search(start,destination,graph,sort_candidate):
    routes = [[start]]
    seen = set()
    while routes:
        route = routes.pop(0)
        frontier = route[-1]
        if frontier in seen: continue
        for station in graph[frontier]:
            if station in seen: continue
            new_route= route + [station]
            routes.append(new_route)
            if station == destination: return new_route
        routes = sort_candidate(routes)
        seen.add(frontier)

def transfer_stations_first(pathes): 
    return sorted(pathes, key=len)

pretty_print(search('西單','南鑼鼓巷',station_net,transfer_stations_first))
'西單->靈境胡同->西四->平安里->北海北->南鑼鼓巷'

最后馒铃,歡迎大家訪(fǎng)問(wèn)我的GitHub查看更多代碼:https://github.com/LiuPineapple
歡迎大家訪(fǎng)問(wèn)我的簡(jiǎn)書(shū)主頁(yè)查看更多文章:http://www.reibang.com/u/31e8349bd083

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蟹腾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子区宇,更是在濱河造成了極大的恐慌娃殖,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件议谷,死亡現(xiàn)場(chǎng)離奇詭異炉爆,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)卧晓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)芬首,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人逼裆,你說(shuō)我怎么就攤上這事郁稍。” “怎么了胜宇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵耀怜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我桐愉,道長(zhǎng)财破,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任从诲,我火速辦了婚禮左痢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盏求。我一直安慰自己抖锥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布碎罚。 她就那樣靜靜地躺著磅废,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荆烈。 梳的紋絲不亂的頭發(fā)上拯勉,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天竟趾,我揣著相機(jī)與錄音,去河邊找鬼宫峦。 笑死岔帽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的导绷。 我是一名探鬼主播犀勒,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼妥曲!你這毒婦竟也來(lái)了贾费?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤檐盟,失蹤者是張志新(化名)和其女友劉穎褂萧,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體葵萎,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡导犹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了羡忘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谎痢。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖壳坪,靈堂內(nèi)的尸體忽然破棺而出舶得,到底是詐尸還是另有隱情掰烟,我是刑警寧澤爽蝴,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站纫骑,受9級(jí)特大地震影響蝎亚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜先馆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一发框、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧煤墙,春花似錦梅惯、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至脚作,卻和暖如春葫哗,著一層夾襖步出監(jiān)牢的瞬間缔刹,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工劣针, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留校镐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓捺典,卻偏偏與公主長(zhǎng)得像鸟廓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子襟己,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 2,961評(píng)論 1 3
  • Python語(yǔ)言特性 1 Python的函數(shù)參數(shù)傳遞 看兩個(gè)如下例子肝箱,分析運(yùn)行結(jié)果: 代碼一: a = 1 def...
    時(shí)光清淺03閱讀 471評(píng)論 0 0
  • Python語(yǔ)言特性 1 Python的函數(shù)參數(shù)傳遞 看兩個(gè)如下例子,分析運(yùn)行結(jié)果: 代碼一: a = 1 def...
    伊森H閱讀 3,048評(píng)論 0 15
  • 我,一個(gè)很平凡的上班族退客,天天懷揣著世界旅游和吃穿無(wú)憂(yōu)的夢(mèng)想骏融,然而還得早八晚五單休的工作,每個(gè)月的工資基本月...
    沙柳1989閱讀 208評(píng)論 0 2
  • 我就想問(wèn)你一句那是不是愛(ài)去 萌狂,沖動(dòng)不多的都不是愛(ài)档玻,對(duì)嗎?你沒(méi)有牽我的手茫藏,我就知道误趴,你喜歡的是曖昧,太孤單务傲,需要人陪...
    迷于情愛(ài)閱讀 157評(píng)論 0 1