更新:python 作为服务端 java调用
python:
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #@Time : 2020/5/3 18:44 4 #@Author: hdq 5 #@File : server.py 6 #将接口以服务器的方式暴露以提供给Java调用缩短调用时间 7 import socket 8 import 获取幂律数据.semantic_事件抽取 as Event_extra 9 import 获取幂律数据.semantic_关系抽取 as relation_extraction 10 import 存储Mysql.制造json.Create_json_guan as Guan_json 11 12 13 14 15 End='end send' 16 17 18 def recv_end(the_socket): 19 total_data=[] 20 while True: 21 data=the_socket.recv(8192).decode('gbk') 22 if End in data: 23 total_data.append(data[:data.find(End)]) 24 break 25 total_data.append(data) 26 if len(total_data)>1: 27 #check if end_of_data was split 28 last_pair=total_data[-2]+total_data[-1] 29 if End in last_pair: 30 total_data[-2]=last_pair[:last_pair.find(End)] 31 total_data.pop() 32 break 33 return ''.join(total_data) 34 35 HOST = '' # Symbolic name meaning all available interfaces 36 PORT = 50007 # Arbitrary non-privileged port 37 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 38 s.bind((HOST, PORT)) 39 s.listen(1) 40 while 1: 41 conn, addr = s.accept() 42 print('Connected by', addr) 43 44 data=recv_end(conn) 45 method = data[0] 46 subdata = data[1:] 47 params = subdata.split("|") 48 print(params) 49 result=None 50 '''测试''' 51 if (method == "1"): 52 result=(params[0],params[1]) 53 '''事件抽取''' 54 elif(method == "2"): 55 result=str(Event_extra.Get_final_event(params[0])) 56 '''关系图构建——单个''' 57 elif (method == "3"): 58 result = str(Guan_json.Create_one(params[0])) 59 print(result) 60 '''关系抽取''' 61 elif (method == "4"): 62 result = str(relation_extraction.Got_guan_ding_merge(params[0])) 63 print(result) 64 elif(method == "6"): 65 pass 66 conn.sendall((str( 67 result 68 )).encode()) 69 # update plot 70 conn.close()
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #@Time : 2020/5/3 18:47 4 #@Author: hdq 5 #@File : client.py 6 #调用服务端接口客户端,以缩短调用时间 7 8 import socket 9 10 11 12 HOST = '127.0.0.1' # The remote host 13 PORT = 50007 # The same port as used by the server 14 15 End='end send' 16 17 def cl_send(method,*input): 18 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 19 s.connect((HOST, PORT)) 20 strinput='' 21 for i in range(len(input)): 22 strinput+=input[i] 23 if(i!=len(input)-1): 24 strinput+="|" 25 s.sendall((str(method)+ strinput + End).encode()) 26 27 data = [] 28 while True: 29 subdata = s.recv(20480) 30 if not subdata: break 31 data.append(str(subdata, encoding='utf-8')) 32 data = ''.join(data) 33 34 s.close() 35 return data 36 37 if __name__ == "__main__": 38 '''事例推理 39 # 预测训练文件 40 # 将训练文件的预测结果以csv文件的形式存放到result中 41 # query = "筠连县人民检察院指控,2015年3月6日,被告人李1某与被害人杨某在筠连县巡司镇一环路棋牌室打牌时发生口角。2015年3月10日,被告人李1某持刀在筠连县巡司镇一环路棋牌室门口将杨某砍伤,经鉴定:被鉴定人杨某外伤致右眼盲目4级评定为重伤二级,外伤致右面部损伤评定为轻伤一级,外伤致右前臂皮肤裂伤评定为轻微伤。2015年3月21日,被告人李1某主动到公安机关投案并如实供述了犯罪事实。被告人李1某的行为构成××罪,有自首情节,提请本院依照《中华人民共和国刑法》××、××之规定判处。" 42 query = "2015年3月6日,被告人李1某与被害人杨某在筠连县巡司镇一环路棋牌室打牌时发生口角。2015年3月10日,被告人李1某持刀在筠连县巡司镇一环路棋牌室门口将杨某砍伤" 43 value =cl_send(2,query) 44 print(value) 45 ''' 46 '''创建json——关系图单个 47 json_str = '-孙希福与密山市和平乡新建村民委员会土地承包合同纠纷一案二审民事判决书' 48 value = cl_send(3, json_str) 49 print(value) 50 ''' 51 '''关系抽取''' 52 json_str = '福建省建宁县人民法院 民事判决书 (2013)建民初字第1334号 原告戴XX,女,28岁。 被告邱XX,男,34岁。 原告戴XX与被告邱XX离婚纠纷一案,本院于2013年10月21日受理后,依法由审判员钟庆阳于2013年11月12日公开开庭进行了审理,原告戴XX到庭参加诉讼,被告邱XX经本院传票传唤未到庭参加诉讼。本案现已审理终结。 原告戴XX诉称,2004年原、被告在南安务工时认识,2006年10月20日登记结婚,2007年5月13日婚生男孩邱杰成。由于婚前缺乏了解,婚姻基础薄弱,婚后被告好吃懒做,未尽到家庭责任,导致夫妻感情产生裂痕,为此,原告于2013年2月26日向建宁县人民法院起诉要求离婚。在法院工作人员主持调解下,原告同意给被告一次改过自新的机会,但被告毫无珍惜这次机会,继续我行我素,毫无家庭责任心,导致夫妻感情彻底破裂。现请求:1、判决原、被告离婚;2、婚生男孩邱杰成由被告抚养,原告承担每月500元的抚养费;3、诉讼费用由被告承担。 被告邱XX未作答辩,亦未提交证据。 原告戴XX提交:《结婚证》一份,以证明原、被告登记结婚的事实;《常住人口登记卡》三份,以证明原、被告及子女的身份关系。 本院认为,经本院合法传唤被告邱XX未到庭参加诉讼,视为放弃诉讼权利,原告提供的上述证据来源合法、内容真实,且与本案相关联,本院予以采信。原告提供的《结婚证》,可以证实原、被告于2006年10月20日登记结婚,系合法婚姻关系;《常住人口登记卡》可以证实婚生男孩邱杰成于2007年5月13日出生的事实。 根据原告提供的证据结合其庭审陈述,本院确认本案事实:2004年原、被告在南安务工时认识,2006年10月20日登记结婚,2007年5月13日婚生男孩邱杰成。婚后因家庭琐事发生争吵导致夫妻感情产生裂痕。为此,原告于2013年2月26日向建宁县人民法院起诉要求离婚,经本院调解双方和好,但嗣后原、被告夫妻关系并未得到改善。 另:庭审中原告陈述婚生男孩邱杰成一直跟随其奶奶李喜凤生活。 综上事实,本院认为,原、被告于2004年务工时认识,系自由恋爱。相识两年后登记结婚,婚姻基础尚好,但婚后常因琐事发生争吵,夫妻感情一般。婚后因家庭琐事发生争吵导致夫妻感情产生裂痕,原告于2013年2月向本院起诉要求离婚。经本院调解和好,但之后原、被告一直处于分居状态,夫妻关系未能得到改善,导致夫妻感情彻底破裂。原告要求离婚,符合法律规定,应予支持。婚生男孩邱杰成一直跟随其奶奶李喜凤一起生活,从有利于小孩子身心健康成长出发,结合原告在庭审中表示同意婚生男孩邱杰成由被告抚养,本院认为原、被告婚生男孩邱杰成由被告抚养为宜。被告邱XX经本院传票传唤,无正当理由拒不到庭,本院依法缺席审理和判决。依照《中华人民共和国婚姻法》第三十二条第一款、第二款、第三款第(五)项和《中华人民共和国民事诉讼法》第一百四十四条的规定,判决如下: 一、准予原告戴XX与被告邱XX离婚。 二、原、被告婚生男孩邱杰成由被告邱XX抚养,原告戴XX支付抚养费每月500元直至邱杰成十八周岁止。 案件受理费245元,减半收取122.50元,由原告负担。 如不服本判决,可在判决书送达之日起十五内,向本院递交上诉状,并按对方当事人的人数提出副本,上诉于福建省三明市中级人民法院。 审判员钟庆阳 二〇一三年十一月十九日 书记员何瑜 附:法律条文和执行申请提示 《中华人民共和国婚姻法》 第三十二条男女一方要求离婚的,可由有关部门进行调解或直接向人民法院提出离婚诉讼。 人民法院审理离婚案件,应当进行调解;如感情确已破裂,调解无效,应准予离婚。 有下列情形之一,调解无效的,应准予离婚: (一)重婚或有配偶者与他人同居的; (二)实施家庭暴力或虐待、遗弃家庭成员的; (三)有赌博、吸毒等恶习屡教不改的; (四)因感情不和分居满二年的; (五)其他导致夫妻感情破裂的情形。 一方被宣告失踪,另一方提出离婚诉讼的,应准予离婚。 《中华人民共和国民事诉讼法》 第一百四十四条被告经传票传唤,无正当理由拒不到庭的,或者未经法庭许可中途退庭的,可以缺席判决。' 53 value = cl_send(4, json_str) 54 print(value)
JAVA:
1 package com.util; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.net.Socket; 7 import java.net.UnknownHostException; 8 9 10 11 12 13 public class SocketPy extends Thread { 14 15 //定义一个Socket对象 16 Socket socket = null; 17 static StringHandle sh=new StringHandle(); 18 public SocketPy(String host, int port) { 19 try { 20 //需要服务器的IP地址和端口号,才能获得正确的Socket对象 21 socket = new Socket(host, port); 22 } catch (UnknownHostException e) { 23 e.printStackTrace(); 24 } catch (IOException e) { 25 e.printStackTrace(); 26 } 27 28 } 29 String result=null; 30 public String command=null; 31 @Override 32 public void run() { 33 34 //客户端一连接就可以写数据给服务器了 35 Thread t=new sendMessThread(); 36 t.start(); 37 try { 38 t.join(); 39 } catch (InterruptedException e) { 40 // TODO Auto-generated catch block 41 e.printStackTrace(); 42 } 43 super.run(); 44 } 45 46 public String execCommand(String cmd) 47 { 48 command=cmd; 49 start(); 50 try { 51 join(); 52 } catch (InterruptedException e) { 53 // TODO Auto-generated catch block 54 e.printStackTrace(); 55 } 56 return result; 57 } 58 59 //往Socket里面写数据,需要新开一个线程 60 class sendMessThread extends Thread{ 61 62 63 @Override 64 public void run() { 65 super.run(); 66 //写操作 67 68 OutputStream os= null; 69 try { 70 os= socket.getOutputStream(); 71 os.write((command).getBytes()); 72 os.flush(); 73 try { 74 // 读Sock里面的数据 75 InputStream s = socket.getInputStream(); 76 byte[] buf = new byte[1024]; 77 int len = 0; 78 result=""; 79 while ((len = s.read(buf)) != -1) { 80 result+=new String(buf, 0, len,"utf-8"); 81 } 82 } catch (IOException e) { 83 e.printStackTrace(); 84 } 85 86 } catch (IOException e) { 87 e.printStackTrace(); 88 } 89 90 try { 91 os.close(); 92 } catch (IOException e) { 93 e.printStackTrace(); 94 } 95 } 96 97 } 98 99 100 101 102 // //函数入口 103 // public static void main(String[] args) { 104 // //需要服务器的正确的IP地址和端口号 105 // Long t1 = System.currentTimeMillis(); 106 // SocketPy clientTest=new SocketPy("127.0.0.1", 50007); 107 // System.out.println(clientTest.execCommand("1./test/1.csv|0")); 108 // System.out.println(System.currentTimeMillis()-t1); 109 // } 110 }
1 package com.util; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import com.alibaba.fastjson.JSON; 7 import com.alibaba.fastjson.JSONArray; 8 import com.alibaba.fastjson.JSONObject; 9 10 11 12 13 public class PySocketRun { 14 static final String socket_url="127.0.0.1"; 15 static final int socket_port=50007; 16 static final String endStr="end send"; 17 18 static StringHandle sh =new StringHandle(); 19 20 public static void main(String args[]) 21 { 22 // //解析双层 23 // List<List<String>> test=pyStringToListListInfo(cl_sendinfo(1,"111","222")); 24 // for(List<String> i:test) 25 // { 26 // for(String j:i) 27 // { 28 // System.out.print(j+"|"); 29 // } 30 // System.out.println(); 31 // } 32 // 33 // //解析单层 34 // for(String j:pyStringToListInfo(cl_sendinfo(2,"111","222","333"))){ 35 // System.out.println(j); 36 // } 37 String nn=cl_sendinfo(4, "福建省建宁县人民法院 民事判决书 (2013)建民初字第1334号 原告戴XX,女,28岁。 被告邱XX,男,34岁。 原告戴XX与被告邱XX离婚纠纷一案,本院于2013年10月21日受理后,依法由审判员钟庆阳于2013年11月12日公开开庭进行了审理,原告戴XX到庭参加诉讼,被告邱XX经本院传票传唤未到庭参加诉讼。本案现已审理终结。 原告戴XX诉称,2004年原、被告在南安务工时认识,2006年10月20日登记结婚,2007年5月13日婚生男孩邱杰成。由于婚前缺乏了解,婚姻基础薄弱,婚后被告好吃懒做,未尽到家庭责任,导致夫妻感情产生裂痕,为此,原告于2013年2月26日向建宁县人民法院起诉要求离婚。在法院工作人员主持调解下,原告同意给被告一次改过自新的机会,但被告毫无珍惜这次机会,继续我行我素,毫无家庭责任心,导致夫妻感情彻底破裂。现请求:1、判决原、被告离婚;2、婚生男孩邱杰成由被告抚养,原告承担每月500元的抚养费;3、诉讼费用由被告承担。 被告邱XX未作答辩,亦未提交证据。 原告戴XX提交:《结婚证》一份,以证明原、被告登记结婚的事实;《常住人口登记卡》三份,以证明原、被告及子女的身份关系。 本院认为,经本院合法传唤被告邱XX未到庭参加诉讼,视为放弃诉讼权利,原告提供的上述证据来源合法、内容真实,且与本案相关联,本院予以采信。原告提供的《结婚证》,可以证实原、被告于2006年10月20日登记结婚,系合法婚姻关系;《常住人口登记卡》可以证实婚生男孩邱杰成于2007年5月13日出生的事实。 根据原告提供的证据结合其庭审陈述,本院确认本案事实:2004年原、被告在南安务工时认识,2006年10月20日登记结婚,2007年5月13日婚生男孩邱杰成。婚后因家庭琐事发生争吵导致夫妻感情产生裂痕。为此,原告于2013年2月26日向建宁县人民法院起诉要求离婚,经本院调解双方和好,但嗣后原、被告夫妻关系并未得到改善。 另:庭审中原告陈述婚生男孩邱杰成一直跟随其奶奶李喜凤生活。 综上事实,本院认为,原、被告于2004年务工时认识,系自由恋爱。相识两年后登记结婚,婚姻基础尚好,但婚后常因琐事发生争吵,夫妻感情一般。婚后因家庭琐事发生争吵导致夫妻感情产生裂痕,原告于2013年2月向本院起诉要求离婚。经本院调解和好,但之后原、被告一直处于分居状态,夫妻关系未能得到改善,导致夫妻感情彻底破裂。原告要求离婚,符合法律规定,应予支持。婚生男孩邱杰成一直跟随其奶奶李喜凤一起生活,从有利于小孩子身心健康成长出发,结合原告在庭审中表示同意婚生男孩邱杰成由被告抚养,本院认为原、被告婚生男孩邱杰成由被告抚养为宜。被告邱XX经本院传票传唤,无正当理由拒不到庭,本院依法缺席审理和判决。依照《中华人民共和国婚姻法》第三十二条第一款、第二款、第三款第(五)项和《中华人民共和国民事诉讼法》第一百四十四条的规定,判决如下: 一、准予原告戴XX与被告邱XX离婚。 二、原、被告婚生男孩邱杰成由被告邱XX抚养,原告戴XX支付抚养费每月500元直至邱杰成十八周岁止。 案件受理费245元,减半收取122.50元,由原告负担。 如不服本判决,可在判决书送达之日起十五内,向本院递交上诉状,并按对方当事人的人数提出副本,上诉于福建省三明市中级人民法院。 审判员钟庆阳 二〇一三年十一月十九日 书记员何瑜 附:法律条文和执行申请提示 《中华人民共和国婚姻法》 第三十二条男女一方要求离婚的,可由有关部门进行调解或直接向人民法院提出离婚诉讼。 人民法院审理离婚案件,应当进行调解;如感情确已破裂,调解无效,应准予离婚。 有下列情形之一,调解无效的,应准予离婚: (一)重婚或有配偶者与他人同居的; (二)实施家庭暴力或虐待、遗弃家庭成员的; (三)有赌博、吸毒等恶习屡教不改的; (四)因感情不和分居满二年的; (五)其他导致夫妻感情破裂的情形。 一方被宣告失踪,另一方提出离婚诉讼的,应准予离婚。 《中华人民共和国民事诉讼法》 第一百四十四条被告经传票传唤,无正当理由拒不到庭的,或者未经法庭许可中途退庭的,可以缺席判决。"); 38 System.out.println(nn); 39 } 40 41 public static String cl_sendinfo(int method,String ... args) 42 { 43 SocketPy clientTest=new SocketPy(socket_url, socket_port); 44 String send_info=""+method; 45 for(int i=0;i<args.length;i++) 46 { 47 send_info+=args[i]; 48 if(i!=args.length-1) 49 send_info+="|"; 50 } 51 send_info+=endStr; 52 String predict_result=clientTest.execCommand(send_info); 53 return predict_result; 54 } 55 56 57 58 //解析双层字符串 59 public static List<List<String>> pyStringToListListInfo(String pyString) 60 { 61 List<List<String>> outputlist=null; 62 String []spilt_result=pyString.split("\\], \\["); 63 if(spilt_result[0].length()>=2) 64 spilt_result[0]=spilt_result[0].substring(2); 65 if(spilt_result[spilt_result.length-1].length()>=3) 66 spilt_result[spilt_result.length-1]=spilt_result[spilt_result.length-1].substring(0,spilt_result[spilt_result.length-1].length()-2); 67 else{ 68 outputlist=new ArrayList<List<String>>(); 69 //spilt_result[spilt_result.length-1]=spilt_result[spilt_result.length-1].substring(0,spilt_result[spilt_result.length-1].length()-1); 70 } 71 if(outputlist==null) { 72 outputlist=sh.StringSplitByExpToStringList(sh.StringNlistToStringList(spilt_result), ", "); 73 int len=outputlist.size(); 74 for(int i=0;i<len;i++) 75 { 76 List<String> nowlist=outputlist.get(i); 77 int sublen=nowlist.size(); 78 79 for(int j=0;j<sublen;j++) 80 { 81 String nowstr=nowlist.get(j); 82 if(nowstr!=null&&nowstr.length()>1) 83 { 84 if(nowstr.startsWith("'")&&nowstr.endsWith("'")) 85 { 86 nowstr=nowstr.substring(1,nowstr.length()-1); 87 nowlist.set(j, nowstr); 88 outputlist.set(i, nowlist); 89 } 90 } 91 } 92 } 93 } 94 return outputlist; 95 } 96 //解析单层字符串 97 public static List<String> pyStringToListInfo(String pyString) 98 { 99 List<List<String>> outputlist=null; 100 String []spilt_result=pyString.split("\\], \\["); 101 if(spilt_result[0].length()>=2) 102 spilt_result[0]=spilt_result[0].substring(1); 103 if(spilt_result[spilt_result.length-1].length()>=3) 104 spilt_result[spilt_result.length-1]=spilt_result[spilt_result.length-1].substring(0,spilt_result[spilt_result.length-1].length()-1); 105 else{ 106 outputlist=new ArrayList<List<String>>(); 107 //spilt_result[spilt_result.length-1]=spilt_result[spilt_result.length-1].substring(0,spilt_result[spilt_result.length-1].length()-1); 108 } 109 if(outputlist==null) { 110 outputlist=sh.StringSplitByExpToStringList(sh.StringNlistToStringList(spilt_result), ", "); 111 int len=outputlist.size(); 112 for(int i=0;i<len;i++) 113 { 114 List<String> nowlist=outputlist.get(i); 115 int sublen=nowlist.size(); 116 117 for(int j=0;j<sublen;j++) 118 { 119 String nowstr=nowlist.get(j); 120 if(nowstr!=null&&nowstr.length()>1) 121 { 122 if(nowstr.startsWith("'")&&nowstr.endsWith("'")) 123 { 124 nowstr=nowstr.substring(1,nowstr.length()-1); 125 nowlist.set(j, nowstr); 126 outputlist.set(i, nowlist); 127 } 128 } 129 } 130 } 131 } 132 return outputlist.get(0); 133 } 134 135 }