openstax响应验证器服务器

response-validator的Python项目详细描述


响应验证应用程序

实现了一种简单的无监督方法,用于将学生对问题的中短回答分类。

安装

这是在Python3.6中开发的。

可以使用pip

pip install response-validator

开发

克隆存储库后,可以在可编辑模式下安装repo,如下所示:

pip install -e .

请注意,此步骤将以静默方式下载几个nltk语料库,并将它们添加到部署的树中。

运行算法测试等的附加功能可以通过安装附加库来启用:

pip install -r requirements.txt

用法

一旦安装,python -m validator.app将运行flask dev web服务器。

推荐的部署生产方法是使用符合wsgi的 服务器,如Gunicorn:

pip install gunicorn
gunicorn validator.app:app

API

应用程序的主要路径是/validate,它接受将被检查的纯文本响应(response)。它还可以接受许多可选参数:

  • uid(例如,“1000@1”,默认为none):这是与响应相关的问题的uid。uid用于计算特定于域和特定于模块的词汇表,以帮助分类过程。 如果指定问题的版本不可用,则将使用同一个qid的任何版本(没有版本的问题id,例如1000)。

  • remove_stopwords(真或假,默认为真):是否将停止字(例如,“and”等)从响应中删除。这是普遍的建议,因为这些词很少有预测价值。

  • tag_numeric(true,false或auto,default auto):是否标记数值(例如,123.7用特殊的“numeric_type_float”标识符标记)。虽然肯定会有一些响应,这会有所帮助,但大量的学生垃圾由随机数字组成,这限制了此选项的效用。自动启用一种模式,该模式仅在此响应所涉及的问题(如上面的uid所示)需要数字答案时才进行数字标记处理。

  • spelling_correction(true、false或auto、default auto):应用程序是否将尝试更正拼写错误。这是通过识别响应中的未知单词并查看是否可以替换密切相关的已知单词来完成的。目前,该应用程序只尝试对长度至少为5个字符的单词进行拼写更正,并且只考虑距拼写错误单词2个编辑距离内的候选单词。在auto模式下运行时,应用程序将尝试在不更正拼写的情况下确定有效性。只有在这无效的情况下,它才会尝试通过拼写更正来重新评估有效性。

  • spell_correction_max(整数,默认为10):限制应用于此数字的拼写更正。

  • remove_nonwords(真或假,默认为真):不可识别的单词(在可能尝试拼写更正之后)用特殊的“无意义单词”标记进行标记。这样做主要是为了对抗键盘混搭(例如“asdfljasdfk”),这些键盘混搭会产生很大比例的无效学生响应。

应用程序运行后,可以使用curl、requests等发送请求。下面是一个使用python的请求库的示例:

下面是一个如何使用python请求库调用东西的示例(假设应用程序在默认的本地开发端口上运行):

importjsonimportrequestsparams={'response':'this is my answer to the question alkjsdfl','uid':'100@2','remove_stopwords':True,'tag_numeric=True':False,'spelling_correction':True,'remove_nonwords':True}r=requests.get('http://127.0.0.1:5000/validate',params=params)print(json.dumps(r.json(),indent=2)){"bad_word_count":1,"common_word_count":2,"computation_time":0.001367330551147461,"domain_word_count":0,"inner_product":-1.6,"innovation_word_count":0,"num_spelling_correction":1,"processed_response":"answer question nonsense_word","remove_nonwords":true,"remove_stopwords":true,"response":"this is my answer to the question alkjsdfl","spelling_correction":true,"spelling_correction_used":true,"tag_numeric":"auto","tag_numeric_input":"auto","uid_found":false,"uid_used":null,"valid":false}

待办事项:

虽然应用程序功能齐全,但还有一些问题需要解决:

  • 目前这个应用程序没有安全性(任何东西都可以调用它)。我不确定在tutor中通常是如何处理的,但是添加api密钥或类似的安全措施应该不会太困难。
  • procfile需要根据我们希望部署的方式和位置进行一些更改
  • 迄今为止最大的响应的处理时间元素用于拼写更正。虽然这确实为短响应提供了非常强的性能改进,但我们可能希望在响应太长(大于一段)的情况下自动禁用此功能。
  • 根据用户体验,我们可能希望返回有关响应的更细粒度信息,而不是简单的有效/无效标签。我们可以根据需要很容易地修改它。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在导入到Google工作表时使用ApachePOI显示系列标签   java在Swing表上修改数据生成SQL   java TCP数据包在网络级别合并   java自动连线bean在线程位置为空   javasocket。禁用无线连接时getOutputStream()阻塞   JSON上的javascript字符串数组。stringify输出unicode字符   java在Oracle数据库中存储不同类型数据的最佳体验   Spring MVC中模板引擎后的java进程输出   不知从哪里来的java空字符串。   如何加载java。使用Adobe Flex的客户端的属性文件?   java如何替换多层括号之间的所有内容?   {JSONObject必须以java'开头   java使用commandButton或commandLink返回并管理HTML控件值   java Android大文本视图动态   java JMock需要自定义类   java Android应用程序在emulator中工作,但在设备中失败   java连接到derby数据库时使用什么文件路径格式?   java在一个函数调用中返回两个结果?