Background:由于针对的场景是小学数学,学生做完试题,拍照,上传,OCR做试题的图片识别,再传到NLP这块做快速题目切分。小学数学题内容相对简单,基本都是加减乘除的计算,内容长度相对较短,所以属于短文本相似度比较。
相似度比对流程对输入OCR试题列表,进行正则过滤,去掉哪些明显不是文章题目,例如题目内容或者是试卷头部和尾部的内容;
与原题进行比对,这里涉及相似度比较
筛选可确定的题目
这里主要做的是同试卷的比较,所以文本信息比较短。
最好的办法其实还是做语义分析,通过理解语义做相似度计算;由于我们的OCR识别结果一般,对试题做分词的时候有许多问题,所以没有选择分词的算法。
选取的相似度比对算法
def cosine_similarity(s1='', s2=''):
return float(np.dot(s1, s2) / (np.linalg.norm(s1) * np.linalg.norm(s2)))
def convert_to_vector(self, s1, s2):
l = len(s1)
s2 = s2[: l + 2] if l < 10 else s2[: l + 4]
word = list(set([o for o in s1] + [o for o in s2]))
total = len(word)
word_vector1 = np.zeros(total)
word_vector2 = np.zeros(t