Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?)

ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 1 is different from 368)
在这里插入图片描述
在网上搜说是版本高了,不可以,试了好久,就差把所有的版本都下下来试试了,然后偶然想到,是不是类型错了。于是就断点调试一步步网上调试。他不是直接和你说这句话有问题,而是拐弯抹角的和你说,就是很烦。最后在**input_ques = [input_ques.toarray()][0]**发现了错误,你见过toarray()外面的括号是列表形式的???
恍然大悟,括号(可以理解为元组)写成列表([])了。

我的代码如下:

# TODO                鸟欲高飞,必先展翅
# TODO                 向前的人 :Jhon


import re
import jieba
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer


# todo   格式化代码快捷键     Alt+Ctrl+L
# todo  读取文件
def read_corpus(file):
    list = []
    with open(file, "r", encoding="UTF-8") as f:
        lines = f.readlines()
        for i in lines:
            list.append(i)
    return list


# todo  对问题进行分词、正则化处理
def get_questions(questions):
    if len(questions) == 1:
        # todo  正则化处理 ,过滤标点符号和无效字符
        new_sent = re.sub(r'[^\w]', '', questions[0])
        # todo  isalnum()用来判断一个字符是否为数字或者字母
        new_sent = " ".join(i for i in new_sent if i.isalnum())
        new_sent = " ".join(jieba.lcut(new_sent))
        return new_sent
    else:
        question_list = []
        for setence in questions:
            # todo  正则化处理 ,过滤标点符号和无效字符
            new_sent = re.sub(r'^\w', "", setence)
            # todo  isalnum()用来判断一个字符是否为数字或者字母
            new_sent = " ".join(i for i in setence if i.isalnum())
            seg_list = " ".join(jieba.lcut(new_sent))
            question_list.append(seg_list)
        return question_list


# todo 定义函数输入处理输入的问题
def solove_questions(questions_list, input_ques):
    #  todo  输入问题正则化、jieba分词后加入到问题列表中
    questions_list_use = questions_list.copy()  # 备份
    input_quession = [input_ques]
    input_quessions = get_questions(input_quession)
    questions_list_use.append(input_quessions)
    # todo  用TF-IDF 向量化新的问题列表
    vectorizer = TfidfVectorizer(analyzer="char")
    vectorizer_relate_question = vectorizer.fit_transform(questions_list_use)
    return vectorizer_relate_question


# todo  计算输入问题和列表之间的相似度并选出最大相似度的索引
def get_similar_index(input_ques, questions):
    score = []
    input_ques = (input_ques.toarray())[0]
    for qustion in questions:
        qustion = qustion.toarray()
        num = float(np.matmul(qustion, input_ques))
        # print(num)
        demo = np.linalg.norm(qustion) * np.linalg.norm(input_ques)
        cos = num / (demo + 1e-3)
        score.append(cos)
    if max(score) < 0.1:
        print("亲,对不起,本FAQ中暂时还没有收录你所提到的问题,我们将会继续改进!")
    else:
        best_index = score.index(max(score))
        return best_index


if __name__ == '__main__':
    # todo 获取问题列表和答案列表冰进行预处理
    # todo 获取问题和列表   这里建议问题和答案放在一行,不然会一个答案出现问题(缺失),后面的答案会乱序
    questions = read_corpus("./data/questions.txt")
    answers = read_corpus("./data/answers.txt")
    # todo 对问题列表进行预处理
    questions_list = get_questions(questions)

    print("亲,欢迎使用FAQ智能问答系统")
    while True:
        print("")
        input_ques = input("请输入你所需要询问的问题:\n")
        if input_ques.upper() == "Q":
            print("觉得有帮助可以来个三连!")
            break
        else:
            # todo  处理输入的问题
            question_process = solove_questions(questions_list, input_ques)
            # todo  获取最大问题相似度的索引并给出相应的答案
            print("亲,正在寻找答案,请耐心等待")
            answer_index = get_similar_index(question_process[-1], question_process[0:-1])
            if answer_index is not None:
                print("亲,我们为你找到的答案如下:\n", answers[answer_index])
                print("亲,你可能还想了解这些问题", questions[answer_index])

结果:
在这里插入图片描述

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不良使

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值