conceptNet使用小结

参考文章
文章1
文章2

ConceptNet下载

中文部分
http://openkg.cn/dataset/conceptnet5-chinese
完整下载
https://github.com/commonsense/conceptnet5/wiki/Downloads

在这里插入图片描述
中文部分下载到以后是一个csv文件
在这里插入图片描述

读取内容

import pandas as pd

FILE = 'F:\conceptNet_chinese\chineseconceptnet.csv'
data = pd.read_csv(FILE, delimiter='\t')
data.columns = ['uri', 'relation', 'start', 'end', '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])
print(data)

在这里插入图片描述

# 从json列中提取权重信息
import json

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

在这里插入图片描述

中文繁简体转换

# 简体繁体转换
from zhtools.longconv import *

# 繁体转简体
def cht_to_chs(line):
    line = Converter('zh-hans').convert(line.decode('utf-8'))
    line.encode('utf-8')
    return line


# 简体转繁体
def chs_to_cht(line):
    line = Converter('zh-hant').convert(line.decode('utf-8'))
    line.encode('utf-8')
    return line

这里需要强调,langconv 这个包 在pycharm里 不会自动安装。需要下载
https://github.com/skydark/nstools/tree/master/zhtools
将下载的 langconv.py 和 zh_wiki.py,放在python代码所在目录即可使用
在这里插入图片描述

查询起始节点

# 查询起始节点
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

格式化输出结果

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:
        fanti = strip(i['start']) + template[i['relation']].format(strip(i['end']))
        jianti = cht_to_chs(fanti)
        print(jianti)

在这里插入图片描述

  • 11
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值