ConceptNet

conceptNet 下载

http://openkg.cn/dataset/conceptnet5-chinese
https://github.com/commonsense/conceptnet5/wiki/Downloads

conceptNet 读取

下载到的数据是 csv 格式的,用 utf8 格式读取

data = pd.read_csv(FILE, delimiter='\t')
data.columns = ['uri', 'relation', 'start', 'end', 'json']

表中内容看起来一团乱麻,实际含义很明确:

符号含义
/r关系,relation,边
/c概念,concept,节点
/zh中文
/fr法语
uri把(关系,起点,终点)三元组拼接成字符串,可作为索引
json附加信息

在这里插入图片描述

删除不只含中文节点的关系(边)

data = data[data['start'].apply(lambda row: row.find('zh')>0) & data['end'].apply(lambda row: row.find('zh')>0)]
data.index = range(data.shape[0])

在这里插入图片描述
从 json 列中提取边的权重信息

import json
weights = data['json'].apply(lambda row: json.loads(row)['weight'])
data.pop('json')
data.insert(4,'weights',weights)

在这里插入图片描述

中文繁简体转换

from langconv import *

转换繁体到简体

def cht_to_chs(line):
   line = Converter('zh-hans').convert(line)
   line.encode('utf-8')
   return line

转换简体到繁体

def chs_to_cht(line):
	line = Converter('zh-hant').convert(line)
	line.encode('utf-8')
  	return line 

查询

只查询起始节点

def search(words, n=20):
    result = data[data['start'].str.contains(chs_to_cht(words))]
    topK_result = result.sort_values("weights", ascending=False).head(n)
    return topK_result

search("柯南")

在这里插入图片描述

格式化输出结果

template = {
'/r/RelatedTo':'和{}相关',
'/r/FormOf':'的形式为{}',
'/r/IsA':'是{}',
'/r/PartOf':'是{}的一部分',
'/r/HasA':'具有{}',
'/r/UsedFor':'用来{}',
'/r/CapableOf':'可以{}',
'/r/AtLocation':'在{}',
'/r/Causes':'导致{}',
'/r/HasSubevent':',接下来,{}',
'/r/HasFirstSubevent':',紧接着,{}',
'/r/HasLastSubevent':'的最后一步是{}',
'/r/HasPrerequisite':'的前提为{}',
'/r/HasProperty':'具有{}的属性',
'/r/MotivatedByGoal':'受到{}的驱动',
'/r/ObstructedBy':'受到{}的影响',
'/r/Desires':'想要{}',
'/r/CreatedBy':'被{}创造',
'/r/Synonym':'和{}同义',
'/r/Antonym':'和{}反义',
'/r/DistinctFrom':'和{}相区别',
'/r/DerivedFrom':'由{}导致',
'/r/SymbolOf':'象征着{}',
'/r/DefinedAs':'定义为{}',
'/r/MannerOf':'',
'/r/LocatedNear':'和{}相邻',
'/r/HasContext':'的背景是{}',
'/r/SimilarTo':'和{}相似',
'/r/EtymologicallyRelatedTo':'',
'/r/EtymologicallyDerivedFrom':'',
'/r/CausesDesire':'',
'/r/MadeOf':'由{}制成',
'/r/ReceivesAction':'',
'/r/ExternalURL':''
}

def strip(str):
    return str.split('/')[3]

案例:柯南

topK_result = search("柯南",20)
for i in topK_result.index:
    i = topK_result.loc[i]
    if len(template[i['relation']]) > 0:
        print(strip(i['start'])+template[i['relation']].format(strip(i['end'])))
'''
柯南想要小蘭
柯南想要推理
柯南可以推理
柯南想要破案
柯南可以辦案
柯南在卡通
名偵探柯南在漫畫店
柯南想要小蘭姊姊
柯南想要探險
柯南想要玩
柯南想要琴酒
柯南想要當小孩子
柯南想要看書
柯南想要真相
柯南想要睡
柯南想要福爾摩斯
柯南想要壞人
柯南想要線索
柯南想要縮小
'''

在这里插入图片描述
柯南真刺激

  • 12
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值