gpt4 book ai didi

c# - C# 和 Python 之间的通信

转载 作者:行者123 更新时间:2023-11-28 19:02:43 25 4
gpt4 key购买 nike

我在 C# 和 Python 之间的通信上遇到了一些问题。

我使用以下 hacky 代码将一些参数从 C# 传递给 Python:

    string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase).Substring(6);
string pyUnintelligibilityPath = "\\unintelligibility.py";
string pyNeuralPredictorPath = "\\predict.py";
string clf = "\\clf.pkl";

public double unintelligibleProbability(string pyLocation, string msg)
{
FileStream tempMessage = new FileStream(path + "\\tempMessage.txt", FileMode.Create);
StreamWriter writer = new StreamWriter(tempMessage);
writer.WriteLine(msg);
writer.Close();

string args = path + pyUnintelligibilityPath + " " + path + clf + " " + path + "\\tempMessage.txt" + " " + path + "\\tempCoefficient.txt";
ProcessStartInfo start = new ProcessStartInfo();
start.FileName = pyLocation;
start.Arguments = args;
start.UseShellExecute = false;
start.RedirectStandardOutput = false;
start.RedirectStandardError = false;
Process process = Process.Start(start);
Thread.Sleep(5000);
double unintelligibility = Convert.ToDouble(File.ReadAllText(path + "\\tempCoefficient.txt").Replace('.', ','));

return unintelligibility;
}

不幸的是,这个解决方案在我的情况下效率很低(甚至不是因为我没有任何代码来检查文件是否更改,因为稍后会添加它,这并不是我遇到的问题).

问题是,Python 代码需要很长时间才能加载 .pkl 文件,然后才能真正执行任何有用的操作(不要介意不必要的导入,我只是从其他文件中重用了这个东西):

from sklearn.feature_extraction.text import TfidfTransformer, CountVectorizer, TfidfVectorizer
from sklearn.linear_model import LogisticRegression, SGDClassifier
from sklearn.svm import LinearSVC
from sklearn.cross_validation import cross_val_score
from sklearn.pipeline import Pipeline
from sklearn.decomposition import NMF, TruncatedSVD
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.pipeline import FeatureUnion
from sklearn.externals import joblib
import numpy as np
import pandas as pd
import codecs
import sys

clf = joblib.load(sys.argv[1])

data = codecs.open(sys.argv[2], encoding='utf-8', mode='r')
text = data.readlines()
data.close()
text = [x.strip() for x in text]

f = open(sys.argv[3], mode='w')

proba = clf.predict_proba(text)
for i in range(0, len(text)):
meme = proba[i,:]
memeNum = meme[1]/(meme[0]+meme[1])
f.write(str(memeNum.round(4)) + "\n")
f.close()

我的问题是,是否有可能以一种允许我在后台运行 Python 脚本而 C# 仅向其传递命令的方式重新编写代码,因为每次我需要处理一个脚本时都会重新初始化脚本单个消息花费的时间太长。

请记住,我真的不想使用任何基于网络协议(protocol)的解决方案,因为这会使事情变得过于复杂,以至于对我来说真的不值得,我真的不关心远程执行此操作或类似的事情那,一切都在本地发生。但是,如果这是唯一的选择,那么我想我别无选择。

最佳答案

试试 IronPython,它是 .Net - Python 的桥梁。或者基本上您可以从 python 访问 .net 内容或从 c# 解释 python。

关于c# - C# 和 Python 之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50786727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com