好的,所以我有一个使用 Django 框架设计的简单界面,它从用户那里获取自然语言输入并将其存储在表中。
此外,我有一个使用 Java 构建的管道,使用 cTAKES 库进行命名实体识别,即它将获取用户提交的文本输入并使用相关的 UMLS 标记对其进行注释。
我想要做的是从用户那里获取输入,然后提交一次,将其引导到我的 java-cTAKES 管道中,然后将带注释的输出反馈回数据库。
我对这方面的 Web 开发方面还很陌生,并且在这个意义上找不到关于集成脚本的任何内容。因此,如果有人可以向我指出有用的资源或只是大体上正确的方向,那将非常有帮助。
========================== 更新:
好的,所以我发现子进程是我想在这种情况下使用的模块,我尝试根据文档实现一些简单的代码,但我得到了一个
Exception Type: OSError
Exception Value: [Errno 2] No such file or directory
Exception Location: /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py in _execute_child, line 1335.
我正在尝试做的简要概述:
这是我在视图中的代码。它的目的是从模型表单中获取文本输入,将其发布到数据库,然后将该输入传递到我的脚本中,该脚本会生成一个 XML 文件,该文件存储在数据库的另一列中。我对 django 很陌生,所以如果这是一个简单的修复,我很抱歉,但我找不到任何将 django 与子进程相关的文档,这是有帮助的。
def queries_create(request):
if not request.user.is_authenticated():
return render(request, 'login_error.html')
form = QueryForm(request.POST or None)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
p=subprocess.Popen([request.POST['post'], './path/to/run_pipeline.sh'])
p.save()
context = {
"title":"Create",
"form": form,
}
return render(request, "query_form.html", context)
型号代码片段:
class Query(models.Model):
problem/intervention = models.TextField()
updated = models.DateTimeField(auto_now=True, auto_now_add=False)
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
更新 2:好的,通过更改子流程代码,代码不再中断,如下所示
def queries_create(request):
if not request.user.is_authenticated():
return render(request, 'login_error.html')
form = QueryForm(request.POST or None)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
p = subprocess.Popen(['path/to/run_pipeline.sh'], stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
(stdoutdata, stderrdata) = p.communicate()
instance.processed_data = stdoutdata
instance.save()
context = {
"title":"Create",
"form": form,
}
return render(request, "query_form.html", context)
但是,我现在得到一个我不明白的“无法找到或加载主类 pipeline.CtakesPipeline”,因为脚本在这个工作目录中的 shell 中运行良好。这是我试图用子进程调用的脚本。
#!/bin/bash
INPUT=$1
OUTPUT=$2
CTAKES_HOME="full/path/to/CtakesClinicalPipeline/apache-ctakes-3.2.2"
UMLS_USER="####"
UMLS_PASS="####"
CLINICAL_PIPELINE_JAR="full/path/to/CtakesClinicalPipeline/target/
CtakesClinicalPipeline-0.0.1-SNAPSHOT.jar"
[[ $CTAKES_HOME == "" ]] && CTAKES_HOME=/usr/local/apache-ctakes-3.2.2
CTAKES_JARS=""
for jar in $(find ${CTAKES_HOME}/lib -iname "*.jar" -type f)
do
CTAKES_JARS+=$jar
CTAKES_JARS+=":"
done
current_dir=$PWD
cd $CTAKES_HOME
java -Dctakes.umlsuser=${UMLS_USER} -Dctakes.umlspw=${UMLS_PASS} -cp
${CTAKES_HOME}/desc/:${CTAKES_HOME}/resources/:${CTAKES_JARS%?}:
${current_dir}/${CLINICAL_PIPELINE_JAR} -
-Dlog4j.configuration=file:${CTAKES_HOME}/config/log4j.xml -Xms512M -Xmx3g
pipeline.CtakesPipeline $INPUT $OUTPUT
cd $current_dir
我不确定如何解决此错误,因此不胜感激。