最近参加了一个自然语言处理的比赛,赛群中的大佬提到可以使用Neo4j发现文本中的Leak。遂决定尝试一番。
Neo4j是神马
一个nosql数据库,可以显示数据节点之间的图关系。
详细的解释可以自己搜索下。
Windows 安装 Neo4j
- 到Neo4j官网下载Community版本的Server的压缩文件,150MB左右
- 解压缩文件
- 以管理员模式打开CMD,进入文件中的bin目录,我的是
D:\软件\neo4j-community-3.5.13-windows\neo4j-community-3.5.13\bin>
- 输入
neo4j install-service
, 安装服务 - 输入
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代码进行导入了。
- 首先将snodes.csv和match_question.csv放入
neo4j-community-3.5.13-windows\neo4j-community-3.5.13\import
目录下。 - 然后在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"})-->();
执行如下命令可以得到所有节点及关系
return (:ques{})-->();
获取有用的图特征
大概可以发现语义相似的文本之间可以构成一个环,本来想用neo4j把所有的环状关系导出来,后来发现无法成功。最后还是用的Python代码根据id关系找到了环关系。
这个leak还是非常有用的,我们的成绩从93直接升到了95,现在稳定在top20
参考文献
- https://zhuanlan.zhihu.com/p/61096301