Neo4j獲取自然語言文本圖特徵

最近參加了一個自然語言處理的比賽,賽羣中的大佬提到可以使用Neo4j發現文本中的Leak。遂決定嘗試一番。

Neo4j是神馬

一個nosql數據庫,可以顯示數據節點之間的圖關係。
詳細的解釋可以自己搜索下。

Windows 安裝 Neo4j

  1. 到Neo4j官網下載Community版本的Server的壓縮文件,150MB左右
  2. 解壓縮文件
  3. 以管理員模式打開CMD,進入文件中的bin目錄,我的是
    D:\軟件\neo4j-community-3.5.13-windows\neo4j-community-3.5.13\bin>
  4. 輸入neo4j install-service, 安裝服務
  5. 輸入 neo4j start,開啓數據庫

安裝流程
6. 在瀏覽器中輸入http://localhost:7474,就可以使用啦!初始密碼均爲neo4j,點擊後需重置密碼。
7. 然後就可以使用啦!

Neo4j導入csv文件

因爲比賽中使用到的文件本身是csv樣式的,可以處理一番再進行導入。
創建兩個文件,一個文件存儲節點,一個文件存儲關係。

snodes.csv 存儲節點的文件,每一行爲一個文本和其對應的id
question,id
生父母要求解除收養關係 養父母可主張經濟補償嗎?,0
行政機關強行解除行政協議造成損失,如何索取賠償?,1
律師查閱案卷材料如何處理?,2
出賣人一物多賣,買受人不能按照合同約定取得標的物所有權的,買受人是否可以追究出賣人違約責任,3
我和女朋友沒結婚就同居,犯法嗎,4
借錢給朋友到期不還的什麼時候可以起訴?怎麼起訴?,5
什麼情況下,機動車辦理變更登記?,6
勞動合同除必備條款外,可以約定哪些事項,7
食品經營者應當如何貯存食品,8

match_question.csv 存儲關係的文件
包含兩個文本的內容,其對應id,和它們之間的關係
q1id,q2id,relation,question1,question2
0,1794,match,生父母要求解除收養關係 養父母可主張經濟補償嗎?,養父母起訴解除收養關係,可以要回撫養費嗎
1,1795,match,行政機關強行解除行政協議造成損失,如何索取賠償?,行政機關使用或者損毀扣押的財物,應當承擔什麼法律責任
2,1796,match,律師查閱案卷材料如何處理?,律師如何去法院調取案卷材料
3,1797,match,出賣人一物多賣,買受人不能按照合同約定取得標的物所有權的,買受人是否可以追究出賣人違約責任,出賣人一物多賣,買受人不能按照合同約定取得標的物所有權的,買受人是否可以主張出賣人支付違約金
4,1798,match,我和女朋友沒結婚就同居,犯法嗎,在沒領證的情況下同居犯法嗎
5,1799,match,借錢給朋友到期不還的什麼時候可以起訴?怎麼起訴?,朋友借我的錢到期不還,我可以什麼時候起訴他?怎麼起訴?
6,1800,match,什麼情況下,機動車辦理變更登記?,什麼情況下,機動車不能辦理變更登記?
7,1801,match,勞動合同除必備條款外,可以約定哪些事項,除了《勞動合同法》可以在勞動合同中約定哪些事項?
8,1802,match,食品經營者應當如何貯存食品,關於貯存食品,食品經營者應該怎麼做?
9,1803,match,消費者協會能否因消費者權益受到侵害而提起訴訟?,消費者協會能否因消費者權益沒有受到侵害而提起訴訟?

創建好文件後,就可以使用CQL代碼進行導入了。

  1. 首先將snodes.csv和match_question.csv放入neo4j-community-3.5.13-windows\neo4j-community-3.5.13\import目錄下。
  2. 然後在7474的網頁中,執行導入csv文件的命令
LOAD CSV  WITH HEADERS FROM 'file:///snodes.csv' AS data CREATE (:ques{quesname:data.question, quesid:data.id});

LOAD CSV  WITH HEADERS FROM "file:///match_question.csv" AS rel
MATCH (entity1:ques{quesname:rel.question1}) , (entity2:ques{quesname:rel.question2})
CREATE (entity1)-[:rel{relation: rel.relation}]->(entity2)

選擇id爲1的文本可以得到如下關係圖
return (:ques{quesid:"1"})-->();
111執行如下命令可以得到所有節點及關係
return (:ques{})-->();

獲取有用的圖特徵

大概可以發現語義相似的文本之間可以構成一個環,本來想用neo4j把所有的環狀關係導出來,後來發現無法成功。最後還是用的Python代碼根據id關係找到了環關係。

這個leak還是非常有用的,我們的成績從93直接升到了95,現在穩定在top20

參考文獻

  • https://zhuanlan.zhihu.com/p/61096301
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章