问题:
《神雕侠侣》是金庸先生在武侠小说创作上的一个里程碑,叙述杨过与小龙女之间的故事。这里给出《神雕侠侣》的网络版本,文件名为“神雕侠侣-网络版.txt”。
《神雕侠侣》中出现了很多人物,这里给出6个人物名字:杨过、小龙女、李莫愁、裘千尺、郭靖、黄蓉。统计人物之间的关联关系,这里定义一种“亲和度”关系如下:如果某名字A后的100个中文词语中出现上述6个名字中任何一个B,则名字A的亲和度加1。(注意,如果到文本末尾部分,名字A后没有100个中文词语,则有多少算多少)
杨过-小龙女:1185,杨过-李莫愁:337,杨过-裘千尺:124,…
分析:
本题考查列表,字典,jieba的综合应用能力。
基本思路,首先构造人物关系字典,用jieba进行分词,以jieba结果为蓝本检索名字,并进一步检索关联名字,更新字典,构造列表,最后以字符串形式写入结果
代码:
#extend 8
#神雕侠侣-网络版.txt
#杨过、小龙女、李莫愁、裘千尺、郭靖、黄蓉
#神雕侠侣-人物亲密度.txt
import jieba
fi = open('神雕侠侣-网络版.txt','r',encoding='utf-8')
fo = open('神雕侠侣-人物亲密度.txt','w')
d = {}
names = ['杨过','小龙女','李莫愁','裘千尺','郭靖','黄蓉']
for name1 in names:
for name2 in names:
if name1 != name2:
d[name1 + '-' + name2] = 0
ls = jieba.lcut(fi.read())
for i in range(0,len(ls)-100):
if ls[i] in names:
for j in range(1,101):
if ls[i+j] != ls[i] and ls[i+j] in names:
d[ls[i] + '-' + ls[i+j]] += 1
break
ols = []
##ols = list(d.items())
##for k,v in ols:
## print('{:}:{:}'.format(k,v),end=',')
for k in d:
ols.append('{:}:{:}'.format(k,d[k]))
#print(','.join(ols))
fo.write(','.join(ols))
fi.close()
fo.close()
资源:
神雕侠侣-网络版及人物亲密度