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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值