日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

准备考试?python也能帮你划重点,上考场

發(fā)布時間:2024/3/13 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 准备考试?python也能帮你划重点,上考场 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者介紹:blmoistawinde, 西南某高校學(xué)森一枚,喜歡有意思的數(shù)據(jù)挖掘分析。希望給世界帶來些清新空氣~

個人博客地址:https://blog.csdn.net/blmoistawinde。

本文首發(fā)于:https://blog.csdn.net/blmoistawinde

打開查分界面,我看到我的“中國近現(xiàn)代史綱要”一欄露出了難看的臉色。

這時,一個程序突然自告奮勇:“不就是這種簡單的考試嗎?讓我學(xué)一下你們的課本,我也能夠上考場! (  ̄ー ̄)”

我把我的課本文本輸入給它。不到一分鐘以后,它對我說:“我學(xué)完了,來考我吧。”

雖然也只是在考前突擊了兩天,但我對它如此之快的速度還是深感嫉妒。我問:“你知道孫中山先生都干了哪些事情嗎?”

“發(fā)動護(hù)法運動、就任臨時大總統(tǒng)、讓位于袁世凱”

“不錯嗎,你是怎么做到的?”

“讓我給你細(xì)細(xì)講來吧……”

準(zhǔn)備工作

程序:“首先引入一些必要的庫,然后我加載doc為1840—1919年中國大事的那一段段文本做個簡單的示例,這部分代碼就不用我列出來了吧?!?/p>

旁白:這里使用harvesttext庫進(jìn)行文本挖掘,它的許多功能能夠使得文本分析的流程變得更加輕松。前面的一文也使用了這一工具。

ht = HarvestText() sentences = ht.cut_sentences(doc)

有哪些重要對象

“重要對象,一般都是一些專有名詞。我可以利用自然語言處理中的命名實體識別技術(shù)就能夠識別出這樣的一些對象,比如:人名、地名、機(jī)構(gòu)名還有其他專有名詞等。”

HarvestText中包裝精簡了pyhanlp中的命名實體識別接口,讓我們來使用它找到近代史中的重要對象吧。

entity_type_dict = {} for i, sent in enumerate(sentences):entity_type_dict0 = ht.named_entity_recognition(sent)for entity0, type0 in entity_type_dict0.items():entity_type_dict[entity0] = type0 for entity in list(entity_type_dict.keys())[:10]:print(entity, entity_type_dict[entity])中國 地名 鴉片戰(zhàn)爭 其他專名 五四運動 其他專名 英國 地名 南京 地名 望廈 其他專名 黃埔 地名 不平等條約 其他專名 洪秀全 人名 金田 地名

把找到的實體登錄,我們就可以統(tǒng)計他們出現(xiàn)的次數(shù),通過詞頻來判斷它們的重要性。

ht.add_entities(entity_type_dict = entity_type_dict) inv_index = ht.build_index(sentences) counts = ht.get_entity_counts(sentences,inv_index) print(pd.Series(counts).sort_values(ascending=False).head())中國 ? ? 21 清政府 ? ? 6 日本 ? ? ?5 孫中山 ? ? 4 英國 ? ? ?3 dtype: int64

我:“這個分析確實有用,看著這些詞我就聯(lián)想到了,在1840—1919年的中國,清政府面對外敵的屈辱,以及孫中山先生為代表的有識之士的努力。但是考試不是單考這些對象,關(guān)鍵要考和它們有關(guān)的知識點啊?!?/p>

程序:“別著急,對于知識點,我也有辦法找到?!?/p> 有哪些重要知識點

程序:“你們說的重要知識點,可以認(rèn)為是包含了那些重要對象的事件或者事實吧。對于你們?nèi)祟?#xff0c;事實可能就是自然語言描述的一句話。不過對于我們程序,我們要用一種標(biāo)準(zhǔn)清晰的結(jié)構(gòu)來表示它。三元組組成的知識圖譜就是一種解決方案?!?/p>

三元組就是類似(主語,謂詞,賓語)的結(jié)構(gòu),比如:

[‘清政府’, ‘簽訂’, ‘天津條約’]

[‘袁世凱’, ‘復(fù)辟’, ‘帝制’]

[‘孫中山’, ‘就任’, ‘臨時大總統(tǒng)’]

我:“有點意思,三個詞基本就能凝練地表達(dá)一句話中的主要事實了。但是你只有文本作為輸入,你要怎么從中提取出這樣的三元組呢?”

程序:“上面已經(jīng)提到三元組有(主語,謂詞,賓語)的結(jié)構(gòu)。你要是英語/語文課學(xué)得好的話,應(yīng)該會聯(lián)想到主語、謂語、賓語這些語法概念吧?而我就可以使用依存句法分析技術(shù)從文本中獲得這些句法信息?!?/p>

分析大致是這樣的:

可以看到,從主謂關(guān)系和動賓關(guān)系,我們就能夠自然地得到我們需要的三元組[‘袁世凱’, ‘復(fù)辟’, ‘帝制’]。

保留更多的信息,比如修飾主語的形容詞,能夠讓三元組的意思更加完整。我們可以利用別的關(guān)系來擴(kuò)充事實:

原來我們只會得到[‘孫中山’, ‘就任’, ‘大總統(tǒng)’]?,F(xiàn)在利用定中關(guān)系,我們就知道“臨時”一詞修飾“大總統(tǒng)”,我們就能夠得到[‘孫中山’, ‘就任’, ‘臨時大總統(tǒng)’]這個更完整的事實了。

我:“emmm…我的英語學(xué)得不好,這些語法看得有點頭暈?!?/p>

程序:“好吧 (¬_¬),不過把它包裝成接口以后,我們就可以很簡單地使用這個技術(shù)了?,F(xiàn)在讓我們用它來找到課本里的重要知識點:”

ht2 = HarvestText() SVOs = [] for i, sent in enumerate(sentences):SVOs += ht2.triple_extraction(sent.strip()) print("\n".join(" ".join(tri) for tri in SVOs[5:10]))英法聯(lián)軍 發(fā)動 侵略中國 清政府 簽訂 天津條約 清政府 簽訂 北京條約 慈禧太后 掌握 清王朝政權(quán) 這是中國半殖民地半封建社會 形成 中國資本主義產(chǎn)生時期

程序:“怎么樣?要不考慮下次考試讓我?guī)湍銊澲攸c?”

我:“有的三元組看起來還挺不錯的,但是有的感覺有點奇怪啊?!?/p>

程序:“不要在意這些細(xì)節(jié)……那是因為你們給我寫的算法還有很多提升空間嗎,但總體質(zhì)量還是不錯的?!?/p>

“有了這些結(jié)構(gòu)化的知識,我就可以接著建立知識圖譜,‘掌握’這些知識之間的聯(lián)系。”

知識圖譜長什么樣呢?它可以理解為實體之間的網(wǎng)絡(luò),網(wǎng)絡(luò)之間的連邊就是實體之間的聯(lián)系,做出一張圖來直觀地感受下:

fig = plt.figure(figsize=(12,8),dpi=100) g_nx = nx.DiGraph() labels = {} for subj, pred, obj in SVOs:g_nx.add_edge(subj,obj)labels[(subj,obj)] = pred pos=nx.spring_layout(g_nx) nx.draw_networkx_nodes(g_nx, pos, node_size=300) nx.draw_networkx_edges(g_nx,pos,width=4) nx.draw_networkx_labels(g_nx,pos,font_size=10,font_family='sans-serif') nx.draw_networkx_edge_labels(g_nx, pos, labels , font_size=10, font_family='sans-serif') plt.axis("off") plt.show()

現(xiàn)在,上考場吧

“現(xiàn)在我學(xué)會了這些知識,就可以建立起問答系統(tǒng),回答一些問題。出幾個問題來考考我吧?”

問答系統(tǒng)的具體實現(xiàn)思路可以見我的另一篇博客:https://blog.csdn.net/blmoistawinde/article/details/86556844

QA = NaiveKGQA(SVOs, entity_type_dict=entity_type_dict) questions = ["孫中山干了什么事?","清政府簽訂了哪些條約?","誰復(fù)辟了帝制?"] for question0 in questions:print("問:"+question0)print("答:"+QA.answer(question0))問:孫中山干了什么事? 答:讓位于袁世凱、發(fā)動護(hù)法運動、就任臨時大總統(tǒng) 問:清政府簽訂了哪些條約? 答:天津條約、北京條約 問:誰復(fù)辟了帝制? 答:袁世凱

回答得相當(dāng)不錯。盡管當(dāng)下這些問題是我特地挑選出來的,確定知識庫里有正確的答案。不過當(dāng)技術(shù)發(fā)展完善,或許有一天,它真的能夠走上考場,取得不錯的成績呢。

本文故事純屬虛構(gòu),近綱考砸卻是真事。不過我會感謝這門課教給我的歷史教訓(xùn),還有帶給我的本文寫作靈感 ?

公眾號后臺回復(fù)“考試”可以獲取本文代碼地址

千山萬水總是情,點個「好看」行不行。

◆?◆?◆ ?◆?◆

長按二維碼關(guān)注我們


數(shù)據(jù)森麟公眾號的交流群已經(jīng)建立,許多小伙伴已經(jīng)加入其中,感謝大家的支持。大家可以在群里交流關(guān)于數(shù)據(jù)分析&數(shù)據(jù)挖掘的相關(guān)內(nèi)容,還沒有加入的小伙伴可以通過掃描下方管理員二維碼,讓管理員幫忙拉進(jìn)群,期待大家的加入。

管理員二維碼:

猜你喜歡

●?

●?

●?

●?

總結(jié)

以上是生活随笔為你收集整理的准备考试?python也能帮你划重点,上考场的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。