我正在使用python3.8.5和jupyter笔记本电脑
spacy = 3.0.5
神经元库因子= 4.0
下面是我运行的用于测试的代码
import datetime
import re
import time
import pandas as pd
from formative_assessment.dataset_extractor import ConvertDataType
from formative_assessment.feature_extractor import FeatureExtractor
class AEGrading:
"""
Automatically evaluates, grades and provides feedback to students' answers of the datasets.
Provides feedback as dict including total data of the student answer.
"""
def __init__(self, qid, stu_answer, dataset, dataset_path, score=5):
self.qid = qid
self.stu_answer = stu_answer
self.dataset = dataset
self.length_ratio = len(stu_answer) / len(dataset[qid]["desired_answer"])
self.score = score
self.fe = FeatureExtractor(qid, stu_answer, dataset, dataset_path)
self.wrong_terms = {}
self.feedback = {"id": self.qid, "question": self.dataset[self.qid]["question"],
"desired_answer": self.dataset[self.qid]["desired_answer"], "student_answer": stu_answer,
"length_ratio": self.length_ratio, "is_answered": "-", "is_wrong_answer": "not wrong answer",
"interchanged": "-", "missed_topics": "-", "missed_terms": "-", "irrelevant_terms": "-",
"score_avg": 0, "our_score": 0}
def is_answered(self, default="not answered"):
"""
Checks if the student answered or not given the default evaluator's string. Assigns score to 'zero' if not
answered.
:param default: str
String to be checked if student not answered
:return: bool
True if student answered, else False
"""
re_string = " *" + default + " *"
if re.match(re_string, self.stu_answer.lower()):
self.feedback["is_answered"] = "not answered"
self.score = 0
return False
else:
self.feedback["is_answered"] = "answered"
return True
def iot_score(self):
"""
Checks if there are any interchange of topics or missed topics and deduce the score accordingly. Deduce
nothing from the score if there are no interchange of topics or missed topics
:return: None
"""
iot = self.fe.get_interchanged_topics()
interchanged = iot["interchanged"]
missed_topics = iot["missed_topics"]
total_relations = iot["total_relations"]
topics_num = iot["total_topics"]
self.feedback["interchanged"] = interchanged
self.feedback["missed_topics"] = missed_topics
if interchanged:
iot_deduce = len(interchanged) / total_relations
self.score = self.score - (iot_deduce * self.score)
if missed_topics:
missed_deduce = len(missed_topics) / topics_num
self.score = self.score - (missed_deduce * self.score)
def missed_terms_score(self):
"""
Checks if there are any missed terms in the student answer and deduce score accordingly
:return: None
"""
missed_terms = self.fe.get_missed_terms()
self.feedback["missed_terms"] = missed_terms.keys()
total = round(sum(missed_terms.values()), 3)
self.score = self.score - (total * self.score) # self.score/2
def irrelevant_terms_score(self):
"""
Checks if there are any irrelevant terms in the student answer. We do not deduce score for this feature, as
we consider any irrelevant term as noise.
:return: None
"""
self.feedback["irrelevant_terms"] = self.fe.get_irrelevant_terms()
if __name__ == '__main__':
PATH = "dataset/mohler/cleaned/"
max_score = 5
# Convert the data into dictionary with ids, their corresponding questions, desired answers and student answers
convert_data = ConvertDataType(PATH)
dataset_dict = convert_data.to_dict()
id_list = list(dataset_dict.keys())
data = []
# random.seed(20)
for s_no in id_list[:7]:
# s_no = random.choice(id_list)
question = dataset_dict[s_no]["question"]
desired_answer = dataset_dict[s_no]["desired_answer"]
student_answers = dataset_dict[s_no]["student_answers"]
scores = dataset_dict[s_no]["scores"]
# score_me = dataset_dict[s_no]["score_me"]
# score_other = dataset_dict[s_no]["score_other"]
for index, _ in enumerate(student_answers):
# index = random.randint(0, 12)
start = time.time()
student_answer = str(student_answers[index])
print(s_no, student_answer)
aeg = AEGrading(s_no, student_answer, dataset_dict, PATH, max_score)
if aeg.is_answered():
aeg.iot_score()
aeg.missed_terms_score()
aeg.irrelevant_terms_score()
if aeg.score == 0:
aeg.feedback["is_wrong_answer"] = "wrong_answer"
# aeg.feedback["score_me"] = score_me[index] # Only for mohler data
# aeg.feedback["score_other"] = score_other[index]
aeg.feedback["score_avg"] = scores[index]
aeg.feedback["our_score"] = round((aeg.score * 4)) / 4 # Score in multiples of 0.25
data.append(aeg.feedback)
print(aeg.feedback)
print("It took ", time.time() - start, " secs")
print("----------------------------------------------------------")
if len(data) % 50 == 0:
df = pd.DataFrame(data)
SAVE_PATH = "outputs/automatic_evaluation/II_NN/" + str(datetime.datetime.now()) + ".csv"
df.to_csv(SAVE_PATH, sep=",")
df = pd.DataFrame(data)
SAVE_PATH = "outputs/automatic_evaluation/II_NN/" + str(datetime.datetime.now()) + ".csv"
df.to_csv(SAVE_PATH, sep=",")在我运行以上代码之后,我得到了如下所示的错误
9只进口熊猫的ValueError追踪(最近一次呼叫)为pd 10 -> 11从formative_assessment.dataset_extractor进口ConvertDataType 12从formative_assessment.feature_extractor进口FeatureExtractor 13
~\Desktop\FYP\Automatic-Formative-Assessment-main\formative_assessment\dataset_extractor.py在8个进口熊猫中作为pd 9-> 10从formative_assessment.utilities.utils进口实用程序11
从输入清单12 -> 13进口神经醇14进口numpy为np 15进口pytextrank
~\anaconda3\lib\site-packages\neuralcoref_init_.py in 12 warnings.filterwarnings(“忽略”,message="spacy.strings.StringStore size更改") 13 -> 14从.neuralcoref导入NeuralCoref 15从.file_utils导入NEURALCOREF_MODEL_URL,NEURALCOREF_MODEL_PATH,NEURALCOREF_CACHE,cached_path 16
strings.pxd in init neuralcoref.neuralcoref()
ValueError: spacy.strings.StringStore大小更改,可能表示二进制不兼容。预期80来自C头,64来自PyObject
**我试着安装follwing方法
pip卸载神经凉亭
pip安装神经库-非二元神经库
但的问题还是一样,希望有人能帮我,非常感谢.**
发布于 2021-08-18 13:13:01
发布于 2021-04-27 13:25:29
在我的例子中,我必须将其降级为Python3.7.4,并且它可以工作。在这里查看一下:https://pypi.org/project/neuralcoref/#files,您可以看到"neuralcoref“只支持Python3.5、3.6和3.7。
发布于 2021-08-15 12:54:11
请看一下这个答案https://stackoverflow.com/a/62844213/1264899
为了运行,您需要使用spaCy版本2.1.0和pythonVersion3.7。这是在Ubuntu16.04和Mac上唯一的组合。
https://stackoverflow.com/questions/67041981
复制相似问题