首页 > 解决方案 > 使用从 Java 导入的自定义模块运行 Python 脚本

问题描述

我想从 Java 的 python 模块触发一些命令的执行。我的脚本执行时没有错误消息,但没有任何效果。我在 Java 中使用的代码如下:

ProcessBuilder pb = new ProcessBuilder("python", "nerDemoTP/python/spacy_test.py");
pb.redirectOutput(Redirect.INHERIT);
Process p;
try {
p = pb.start();
p.waitFor();
} catch (IOException e1) {
...     } 

如果我的 .py 文件只包含 print('hello world'),它就可以工作,然后我会在 Eclipse 控制台中看到它。但是我的python脚本应该做什么:

from SpacyNER import SpacyNERExtractor
ner_extractor = SpacyNERExtractor('medium', 'sentences_nyt_200.txt')
annotated_df, entities_dict = ner_extractor.generate_extractions()
ner_extractor.store_predictions('test.csv')
print('spacy extractions done!')

我的 SpacyNER 模块定义如下:

import pandas as pd
import numpy as np
import spacy
import en_core_web_md
import en_core_web_lg
import operator
import time
import re

class SpacyNERExtractor:

def __init__(self, model, text_file):
    if model == 'medium':
        self.spacy_model = en_core_web_md.load()
    else:
        self.spacy_model = en_core_web_lg.load()
    self.sent_df = pd.read_csv(text_file, sep='\n', header=None, error_bad_lines = False)
    self.sent_df.columns=['sentence']

def set_new_sent_df(self, df_new):
    self.sent_df = df_new


def store_predictions(self, file_name):
    self.df_predictions_spacy.to_csv(file_name,sep="#", index=False)
...

它必须与自定义模块的导入有关,但我不知道如何处理这个问题。此外,当我从命令行执行脚本时,即 python3.6 spacy_test.py,它可以工作。任何帮助表示赞赏!

标签: javapythoneclipsemodulespacy

解决方案


推荐阅读