人物关系提取

这段代码展示了如何利用jieba库和自定义字典进行人物关系提取。首先,加载自定义字典,然后逐行读取文件,对每行进行分词,筛选出人名并记录出现次数。接着,分析每段内的人物关系,建立人物关系字典,并将超过一定阈值的关系写入文件。最后,将人物和它们的出现次数以及关系权重分别写入两个文件。
import os,sys

import jieba, codecs, math

import jieba.posseg as pseg



names = {} #姓名字典

relationships = {} #关系字典

lineNames = [] #每段内人物关系



jieba.load_userdict("dict.txt") #加载字典

with codecs.open("busan.txt","r","utf8") as f:

    for line in f.readlines():#读取文件所有东西,每行作为列表的一个元素

        poss = pseg.cut(line)#分词并返回该词词性

        lineNames.append([])#为新读入的一段添加人物名称列表


        for w in poss:

            if w.flag != "nr" or len(w.word)<2:

                continue

            #当分词长度小于2或该词词性不为nr时认为该词不为人名

            lineNames[-1].append(w.word)

            #为当段的环境增加一个人物

            if names.get(w.word) is None:

                names[w.word] = 0

                relationships[w.word] = {}


            names[w.word]+=1

            #该人物出现次数加1


for name, times in names.items():

    print(name, times)


print(relationships)

print(lineNames)

for line in lineNames:

    for name1 in line:

        for name2 in line:

            if name1 == name2:

                continue

            if relationships[name1].get(name2) is None:

                relationships[name1][name2]= 1

            else:

                relationships[name1][name2] = relationships[name1][name2]+1



print(relationships)

with codecs.open("busan_node.txt", "w", "gbk") as f:

    f.write("Id Label Weight\r\n")

    for name, times in names.items():

        f.write(name + " " +name+" "+str(times)+"\r\n")



with codecs.open("busan_edge.txt","w","gbk") as f:

    f.write("Source Target Weight\r\n")

    for name, edges in relationships.items():

        for v, w in edges.items():

            if w>3:

                f.write(name+" "+v+" "+str(w)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值