版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第十一章審計(jì)知識(shí)圖譜自動(dòng)構(gòu)建
知識(shí)圖譜官方定義:知識(shí)圖譜是一種基于圖的數(shù)據(jù)結(jié)構(gòu),由節(jié)點(diǎn)(Node)和邊(Edge)組成,每個(gè)節(jié)點(diǎn)表示一個(gè)“實(shí)體”,每條邊為實(shí)體與實(shí)體之間的“關(guān)系”,知識(shí)圖譜本質(zhì)上是語義網(wǎng)絡(luò)。在百度上搜索“周杰倫的妻子”,搜索結(jié)果不是周杰倫,而是直接返回了昆凌的信息卡片,為什么呢?因?yàn)榈讓又R(shí)圖譜已經(jīng)有了周杰倫和昆凌是夫妻關(guān)系,所以可以理解到你要找的是昆凌,而不是周杰倫,最后便將昆凌的數(shù)據(jù)可視化在我們面前,這也說明了知識(shí)圖譜有理解用戶意圖的能力。那么簡單來看,知識(shí)圖譜就是把所有不同種類的信息連接在一起而得到的一個(gè)關(guān)系網(wǎng)絡(luò),因此知識(shí)圖譜提供了從“關(guān)系”的角度去分析問題的能力。如何實(shí)現(xiàn)知識(shí)圖譜Neo4j是一個(gè)高性能的NOSQL圖形數(shù)據(jù)庫。它是一個(gè)嵌入式的,基于磁盤的,具備完全的事務(wù)特性的Java持久化引擎,但是他將結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)在網(wǎng)絡(luò)上而不是表中。圖形數(shù)據(jù)庫除了能像普通的數(shù)據(jù)庫一樣存儲(chǔ)一行一行的數(shù)據(jù)之外,還可以很方便的存儲(chǔ)數(shù)據(jù)之間的關(guān)系信息,我們常用的數(shù)據(jù)庫例如,mysql,sqlserver,這些都是常用的關(guān)系數(shù)據(jù)庫。官網(wǎng)下載鏈接:/java/technologies/javase-downloads.html下載好之后直接安裝到合適的路徑右鍵單擊此電腦—點(diǎn)擊屬性—點(diǎn)擊高級(jí)系統(tǒng)設(shè)置—點(diǎn)擊環(huán)境變量在下方的系統(tǒng)變量區(qū)域,新建環(huán)境變量,命名為JAVA_HOME,變量值設(shè)置為剛才JAVA的安裝路徑,D:\software\Java\java-15。編輯系統(tǒng)變量區(qū)的Path,點(diǎn)擊新建,然后輸入%JAVA_HOME%\bin打開命令提示符CMD(WIN+R,輸入cmd),輸入java-version,若提示Java的版本信息,則證明環(huán)境變量配置成功。官方下載鏈接:/download-center/#community下載好之后,直接解壓到合適的路徑就可以了,無需安裝。在系統(tǒng)變量區(qū)域,新建環(huán)境變量,命名為NEO4J_HOME,變量值設(shè)置為剛才neo4j的安裝路徑編輯系統(tǒng)變量區(qū)的Path,點(diǎn)擊新建,然后輸入%NEO4J_HOME%\bin,最后,點(diǎn)擊確定進(jìn)行保存說明JDK版本不合適說明neo4j下載成功,可以登錄該網(wǎng)頁初始賬戶密碼都是neo4j在指令框($符號(hào)后)輸入指令:serverchange-password,即可修改密碼。
數(shù)據(jù)庫連接先從py2neo包中導(dǎo)入所需要用到的模塊。Graph就是幫助我們連接數(shù)據(jù)庫。數(shù)據(jù)庫連接的標(biāo)準(zhǔn)語法是graph=Graph(url='',username='',password='')但在pycharm中這種方式可能會(huì)連接不上,有兩種解決方法。一是不加username參數(shù),二是使用圖中第三行的代碼返回的鏈接graph,可以幫助我們刪除或創(chuàng)建圖譜
節(jié)點(diǎn)建立Node建立節(jié)點(diǎn),存放標(biāo)簽和屬性值create()完成圖的建立標(biāo)準(zhǔn)語法為:node=Node(label=,property='')graph.create(node)可以使用graph.delete(node)對指定節(jié)點(diǎn)進(jìn)行刪除以及graph.delete_all()刪除所有節(jié)點(diǎn)
關(guān)系建立
Relationship幫助我們完成關(guān)系的建立標(biāo)準(zhǔn)語法為:relationship=Relationship(起始節(jié)點(diǎn),'關(guān)系',結(jié)束節(jié)點(diǎn))graph.create(relationship)屬性值更新
我們可以像字典那樣通過屬性名訪問節(jié)點(diǎn)或關(guān)系的屬性值。最后通過push函數(shù)來更新。這里我們將節(jié)點(diǎn)a的名稱從alice改為了bob,并新增了一個(gè)age屬性,屬性值為10
節(jié)點(diǎn)查詢NodeMatcher節(jié)點(diǎn)匹配器可以通過標(biāo)簽名和屬性值查詢所需的節(jié)點(diǎn)標(biāo)準(zhǔn)語法為:matcher=NodeMatcher(graph)Node=matcher.match('label','其他屬性')也可以在尾部加上first(),表示返回所匹配到的節(jié)點(diǎn)中的第一個(gè)節(jié)點(diǎn)不過注意的是不加first()返回的是一個(gè)NodeMatch對象,加了之后返回的是一個(gè)Node對象此外,可以添加where子句來通過屬性值進(jìn)行查詢,效果和matcher.match(‘person’,name=‘bob’)一樣,不加first()返回的是NodeMatch對象不過需要注意的where子句中的屬性值條件需要這樣的格式:_.屬性名=屬性值
關(guān)系查詢RelationshipMatch可以幫助我們查詢關(guān)系,輸入一個(gè)節(jié)點(diǎn),和一個(gè)關(guān)系名,可以返回與此節(jié)點(diǎn)有此關(guān)系的所有關(guān)系鏈標(biāo)準(zhǔn)語法為:matcher=RelationshipMatcher(graph)result=matcher.match({node},'relationship')RelationshipMatcher返回的是一個(gè)關(guān)系對象RelationshipMatch,這個(gè)關(guān)系對象包含頭結(jié)點(diǎn),關(guān)系,尾節(jié)點(diǎn)而walk()函數(shù)的作用就是根據(jù)關(guān)系對象分離出頭結(jié)點(diǎn),關(guān)系,尾節(jié)點(diǎn)可以看到下圖的結(jié)果中就是節(jié)點(diǎn)關(guān)系節(jié)點(diǎn)的順序輸出
批量建立節(jié)點(diǎn)或關(guān)系Subgraph可以批量建立關(guān)系和節(jié)點(diǎn),將節(jié)點(diǎn)或關(guān)系放在列表中作為參數(shù)輸入標(biāo)準(zhǔn)語法為:A=Subgraph(nodes=[node1,node2,node3])B=Subgraph(relationships=[relation1,relation2])graph.create(A)graph.create(B)可以看到Subgraph使我們的操作簡便,可以傳入關(guān)系列表或節(jié)點(diǎn)列表,統(tǒng)一建立減少了create()語句的使用次數(shù)
實(shí)踐分析我們現(xiàn)在想將上一講的基本操作封裝起來,只需要輸入節(jié)點(diǎn)的標(biāo)簽和屬性,以及節(jié)點(diǎn)之間關(guān)系便可以自動(dòng)創(chuàng)建圖譜,內(nèi)部實(shí)現(xiàn)細(xì)節(jié)對用戶透明化同時(shí)為了增加程序的健壯性,我們希望對通過查詢節(jié)點(diǎn)的方式判斷節(jié)點(diǎn)是否存在,并以此來判斷是否該創(chuàng)建此關(guān)系1.導(dǎo)入py2neo包及所需模塊2.這里使用where子句進(jìn)行查詢,那么就需要格式化的條件(_.atrrs=value)3.再判斷是否存在,以防重復(fù)創(chuàng)建節(jié)點(diǎn),導(dǎo)致圖譜混亂根據(jù)上一講內(nèi)容,思考一下,如果不使用first(),則返回的是什么對象?如果使用的是matcher.match(label,”property”)這句語句如何讓它返回Node對象?如果匹配節(jié)點(diǎn)的方法未使用first()返回一個(gè)NodeMatch對象,則建立關(guān)系時(shí)就會(huì)報(bào)錯(cuò)第46行代碼,便是上一講所提到連接數(shù)據(jù)庫時(shí)的注意事項(xiàng),不加username參數(shù)。學(xué)到一招:可以使用字典的形式作為Node的節(jié)點(diǎn)的屬性Node(label,{“屬性1”:a,})
案例一將保存在csv文件中的工商管理信息先存入MySQL數(shù)據(jù)庫,然后從數(shù)據(jù)庫中讀出數(shù)據(jù),建立圖譜,使其可視化導(dǎo)入pymysql包,實(shí)現(xiàn)對MySQL數(shù)據(jù)庫的操作然后就是連接MySQL數(shù)據(jù)庫,并創(chuàng)建游標(biāo)用來存取數(shù)據(jù)第11,12行代碼就是一行一行讀取CSV文件內(nèi)容。我們看一下結(jié)果,列表第0個(gè)元素是高管信息(姓名,性別,生日,學(xué)歷,職務(wù)),之后就是一條條的高管記錄之后,我們需要先創(chuàng)建一張數(shù)據(jù)表,創(chuàng)建前判斷該表是否已存在,這就是第18行代碼所做的事第21行代碼表示id從1自增,第28行表示該數(shù)據(jù)表默認(rèn)使用utf-8字符集。打印先前的data變量時(shí),可以看到每條記錄以換行符結(jié)束,所以需要整理以下數(shù)據(jù),方便讀入數(shù)據(jù)庫
案例二
讀取存在Excel表中的關(guān)于阿里巴巴公司的工商信息,并生成知識(shí)圖譜可以觀察一下內(nèi)容的分部格式:左邊都是工商信息名稱,右邊是工商信息init()方法用來初始化Excel表格的基礎(chǔ)信息第15行代碼:一個(gè)Excel表中可能由多個(gè)工作表sheet組成,所以需要確定sheet的名稱,才能找到我們想要的數(shù)據(jù)第17行代碼,我們獲取第一行數(shù)據(jù)內(nèi)容,目的是為了建立一個(gè)以名稱為阿里巴巴的節(jié)點(diǎn)作為核心節(jié)點(diǎn),形成由中心一點(diǎn)向四周散發(fā)的形狀readExcel()方法幫助我們讀取表中的內(nèi)容使用雙重循環(huán),訪問表中每一個(gè)單元格先建立以阿里巴巴為名稱的核心節(jié)點(diǎn)在讀取datas變量數(shù)據(jù)時(shí),需要注意它是一個(gè)工商信息名稱,一個(gè)工商信息內(nèi)容這樣交錯(cuò)排列的,所以為了各自分離,是以步長為2遍歷的工商信息名稱做為關(guān)系存放到關(guān)系列表中,工商信息內(nèi)容作為屬性值存放到節(jié)點(diǎn)屬性列表中,最后循環(huán)創(chuàng)建節(jié)點(diǎn)和關(guān)系這里因?yàn)槲覀兊腅xcel表中只有一個(gè)工作表sheet,所以就是循環(huán)讀取sheet的名稱后便能找到唯一的工作表,這就是75-82行代碼所做的事
案例三讀取存在Excel表中的內(nèi)容生成知識(shí)圖譜。但需要注意其中主語和賓語,會(huì)有重復(fù),若不進(jìn)行去重工作,那么重復(fù)創(chuàng)建節(jié)點(diǎn),造成圖譜混亂init()對Excel表的基礎(chǔ)信息進(jìn)行初始化,和上一個(gè)案例的初始化工作一樣。雙重循環(huán)訪問每一個(gè)單元格的數(shù)據(jù)和數(shù)據(jù)類型,整數(shù)和日期類型做不同的處理整體步驟同樣和上一個(gè)案例一樣。但不同的是多了一個(gè)字典。是因?yàn)樾枰獙⒅髡Z,謂語,賓語分開存放,如第42行代碼datas列表打印出來的結(jié)果,如圖所示,就是一個(gè)一個(gè)的字典,每個(gè)字典本質(zhì)上是表中的一行數(shù)據(jù)此方法就是將datas中的數(shù)據(jù),按主語,謂語,賓語分別存放,但需要主要的是,此時(shí)每個(gè)列表中的元素,都是有重復(fù)的,接下來的工作就是給主語和賓語去重這是個(gè)典型的去重思路用一個(gè)新的列表來放不重復(fù)的元素。先判斷先前舊列表中的元素在不在新列表中,不在則放入,達(dá)到去重效果最后,以不重復(fù)的元素創(chuàng)建節(jié)點(diǎn)我們已經(jīng)將不重復(fù)的主語節(jié)點(diǎn)和賓語節(jié)點(diǎn)創(chuàng)建了圖,所以不用擔(dān)心圖譜會(huì)有重復(fù)混亂的節(jié)點(diǎn)現(xiàn)象。接下來就是要建立節(jié)點(diǎn)間關(guān)系。1.1中小企業(yè)所遇問題主語2主語3主語4主語列表關(guān)于謂語2謂語3謂語41.1.1生產(chǎn)成本上漲賓語2賓語3賓語4謂語列表賓語列表Node(name=1.1中小企業(yè)所遇問題)Node(name=1.1.1生產(chǎn)成本上漲)賓語n的節(jié)點(diǎn)主語n的節(jié)點(diǎn)selected_node主語,謂語,賓語節(jié)點(diǎn)列表中每個(gè)元素都一一對應(yīng),比如三個(gè)列表的第一個(gè)元素構(gòu)成的關(guān)系鏈就是Excel表中的第一行數(shù)據(jù)。但是,其元素內(nèi)容還是字符串,需要節(jié)點(diǎn)才能構(gòu)成關(guān)系。這里用到了tkinter模塊,可以在運(yùn)行時(shí)幫我們打開文件窗口,然后手動(dòng)選擇文件,并返回文件的路徑,這就是107-110行代碼所做的事,其余和上一個(gè)案例的步驟一樣公司表:證券代碼,公司全稱,公司中文簡稱,注冊資本,成立日期,上市日期。
案例四分別讀取三張Excel表的內(nèi)容,并建立知識(shí)圖譜,并實(shí)現(xiàn)一個(gè)可供我們查詢的“小系統(tǒng)”子公司表:所屬母公司證券代碼,子公司全稱高管表:所屬公司證券代碼,姓名,性別,年齡,職稱,個(gè)人簡介三張表中共同的字段就是公司證券代碼,所以這是連接三張表的關(guān)鍵相信看到這里大家對初始化Excel表格的步驟很熟悉了。和前幾個(gè)案例一樣初始化文件路徑,同workbook對象找到Excel中的sheet的名稱,用它來操作工作表中的內(nèi)容,獲取行數(shù)列數(shù)的信息這個(gè)方法是用來讀取子公司表中的數(shù)據(jù),需要注意一下dict.fromkeys()這個(gè)函數(shù),以傳入的參數(shù)作為字典的鍵,形成一個(gè)值是空,但是有鍵的字典結(jié)果就是一個(gè)字典中的鍵是母公司證券代碼,值是該母公司所擁有的所有子公司名稱,如第40行代碼所示該方法用來讀取公司高管表中的數(shù)據(jù),和上一個(gè)方法一樣用到fromkeys()函數(shù),一條高管信息記錄中可能存在空值,所以需要有判斷語句做處理。最終的結(jié)果是一個(gè)字典,字典的鍵是公司代碼,值是一個(gè)二維列表,里面含有該公司中每一位的高管信息
該方法讀取公司表中的數(shù)據(jù),步驟和上兩個(gè)方法一樣。最終結(jié)果是一個(gè)字典,字典的鍵是公司代碼,值是一個(gè)存放公司各種信息的列表,如106行代碼所示。該方法初始化接下來要用到的各種數(shù)據(jù)。獲取dealExcel類中三個(gè)讀取表中內(nèi)容返回的三個(gè)字典,每個(gè)字典并拆分成鍵和值兩個(gè)列表。創(chuàng)建公司節(jié)點(diǎn),標(biāo)簽為總公司,屬性值:name公司名稱,self_code公司證券代碼,brief_name公司簡稱,primitiv_capital注冊資本,open_time成立日期,market上市日期創(chuàng)建公司高管節(jié)點(diǎn),標(biāo)簽為公司高管,屬性:com_code所屬公司的證券代碼,name姓名,sex性別,age年齡,duty職務(wù),intro個(gè)人簡介創(chuàng)建子公司節(jié)點(diǎn),標(biāo)簽為子公司,屬性:name子公司名稱,mother_code所屬母公司證券代碼此方法前三行代碼用于創(chuàng)建公司,子公司,公司高管節(jié)點(diǎn)。接下來就是通過判斷公司節(jié)點(diǎn)的證券代碼屬性
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年公交車身廣告發(fā)布合同
- 2026年天體引力能技術(shù)預(yù)研合同
- 2026年醫(yī)療行業(yè)聯(lián)盟合作合同
- 2026年游樂設(shè)施維護(hù)合同
- 2025年氣候變化適應(yīng)性建設(shè)項(xiàng)目可行性研究報(bào)告
- 2025年智能互聯(lián)網(wǎng)醫(yī)療系統(tǒng)建設(shè)項(xiàng)目可行性研究報(bào)告
- 2025年升降機(jī)安全監(jiān)控系統(tǒng)可行性研究報(bào)告
- 保稅倉合同范本
- 湖羊采購合同范本
- 2025年高??萍汲晒D(zhuǎn)化基地可行性研究報(bào)告
- 2025年天津大學(xué)管理崗位集中招聘15人備考題庫完整答案詳解
- 三方協(xié)議模板合同
- 玉米質(zhì)押合同范本
- 2025西部機(jī)場集團(tuán)航空物流有限公司招聘筆試考試參考題庫及答案解析
- 2025年紀(jì)檢部個(gè)人工作總結(jié)(2篇)
- 2025四川成都東部新區(qū)招聘編外工作人員29人筆試考試參考試題及答案解析
- 《11845丨中國法律史(統(tǒng)設(shè)課)》機(jī)考題庫
- 2025年消防設(shè)施操作員中級(jí)理論考試1000題(附答案)
- 廣東省領(lǐng)航高中聯(lián)盟2025-2026學(xué)年高三上學(xué)期12月聯(lián)考地理試卷(含答案)
- 人工挖孔樁安全防護(hù)課件
-
評(píng)論
0/150
提交評(píng)論