在经过一个五一小长假,我们得到了极大的休整。我们在一起商量的时候,碰撞出一些火花,对第二种思路产生了极大的影响。按照项目实训第五周的设想,我们要得到具体的问题,然后在对问题进行回答。这中间给人一种感觉,问什么我要先生成问题成文本,但是在对生成的文本进行回答时还需要把文本转变成变量呢?其实道理很简单,可以认为这样操作具有极高的可解释性。但是鉴于学长给我们指出可以不用管什么方式,甚至说根本不需要生成问题,就可以完成分类的操作,就是我们真正想要的东西。就好比我们去隔间洗澡,衣服也脱了,发现淋浴头坏了,我们要换个隔间。这时候,我们不在乎面子问题,就完全没必要穿好脱的所有衣服再出去,这就非常麻烦了。所以我们打算我们不生成文本问题,而是生成向量问题,这样不就能更好的避免先解码再编码的复杂过程,当然,方便的同时,我们损失了可解释性,毕竟,有得就有失嘛。
我个人又对数据进行进一步的处理,主要完成基于关键词的文本数据处理。我发现,在考生答案里,有许多考生答案长篇大论,但是都不在点上,所以需要对一些“废话”进行剔除。这里我想到,借用关键词对文本进行筛选,将会大大降低废话的概率。现在第一步,如何得到关键词。这里,我经过搜索,发现jieba库里有jieba.analyse.textrank(sentence, topK=20),这将提供给我最为基础的关键词,topK参数是选取排名的数量。但是对于问答题,还需要考虑实例,比如我们的选题中有张某与李某,所以这也得算作关键词的一员,需要人为添加。思路解释清楚了,直接放代码。
import jieba.analyse
import pandas as pd
import csv
def keywords(sentence):
'''
取前句子中二十个关键词
:param sentence: 句子
:return: 关键词列表
'''
keywords = jieba.analyse.textrank(sentence, topK=20)
return keywords
def select(sentence,keywords):
'''
筛选句子中含有关键词的部分,并做符号清洗
:param sentence: 句子
:param keywords:关键词列表
:return:筛选后的句子
'''
result = []
new_sentence = []
sentence = sentence.replace('<p>', ',').replace('</p>', ',')\
.replace('<P>', ',').replace('</P>', ',')\
.replace(' ', ',').replace('、',',')\
.replace('</>',',').replace('<br>',',').replace('<BR>',',')\
.replace(' ','').replace('\n','').replace('。',',').replace(':',',').replace('"','')\
.replace('.',',').replace('(',',').replace(')',',').replace('《','').replace('》','')
splited = sentence.split(',')
for s in splited:
for keyword in keywords:
if keyword in s:
result.append(s)
else:
pass
for juzi in result:
if juzi not in new_sentence:
new_sentence.append(juzi)
list = [str(i) for i in new_sentence]
new_sentence = ','.join(list)
print(new_sentence)
return new_sentence