假新闻识别应用
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

220 lines
11 KiB

  1. #coding:utf8
  2. import re
  3. import pymysql
  4. import pandas as pd
  5. import numpy as np
  6. import networkx as nx
  7. import traceback
  8. import json
  9. from jsonpath_ng import jsonpath, parse
  10. def get_taskId(raw_data):
  11. taskid = raw_data["metadata"]["admin"]["taskId"]
  12. all_result = raw_data['data']
  13. param_split = taskid.split(":")
  14. datasourcestr = all_result[param_split[0]]
  15. datasource = json.loads(datasourcestr)
  16. # 创建 JsonPath 表达式对象
  17. expr = parse(param_split[1])
  18. # 使用表达式来选择 JSON 元素
  19. match = [match.value for match in expr.find(datasource)]
  20. val = match[0]
  21. return val
  22. def mysqlData(raw_data,logging,dataTag):
  23. result=''
  24. taskId = get_taskId(raw_data)
  25. if dataTag=='1':
  26. table="tw_account"
  27. else:
  28. table="tw_deep"
  29. inputdata=raw_data["metadata"]["admin"]
  30. try:
  31. db = pymysql.connect(host=inputdata["Host"], user=inputdata["User"], passwd=inputdata["Password"],
  32. db=inputdata["Database"], port=inputdata["Port"], charset='utf8',cursorclass=pymysql.cursors.DictCursor, connect_timeout=30)
  33. db.ping(reconnect=True)
  34. cursor = db.cursor()
  35. sql="SELECT * FROM {} WHERE taskId={}".format(table,taskId)
  36. cursor.execute(sql)
  37. result = cursor.fetchall()
  38. db.commit()
  39. cursor.close()
  40. db.close()
  41. except:
  42. logging.info("专题关系数据查询失败!")
  43. logging.info(traceback.format_exc())
  44. return result
  45. def get_replyData(data):
  46. reply=pd.DataFrame(data)
  47. reply = reply.drop_duplicates().reset_index(drop=True) # 去重
  48. reply=reply[['ReviewerAccountId', 'PostAccountId']]
  49. # reply.columns = ['ReviewerAccountId', 'ReviewerAccountName', 'PostAccountId', 'PostAccountName',
  50. # 'ShareCount', 'LikeCount', 'CommentCount', 'CommentTime']
  51. reply = reply[['ReviewerAccountId', 'PostAccountId']]
  52. reply['ReviewerAccountId'] = reply['ReviewerAccountId'].astype(str)
  53. reply['PostAccountId'] = reply['PostAccountId'].astype(str)
  54. reply = reply.groupby(['ReviewerAccountId', 'PostAccountId']).size().reset_index()
  55. # user_net_df = user_net(reply) ##SNA数据清洗
  56. edgeweightset = reply.fillna(0)
  57. edgeweightset.columns = ['source', 'target', 'count']
  58. edgeweightset_l = [[] for _ in range(edgeweightset.shape[0])]
  59. for i in range(len(edgeweightset_l)):
  60. for j in range(edgeweightset.shape[1]):
  61. edgeweightset_l[i].append(edgeweightset.iloc[i, j])
  62. g = nx.DiGraph()
  63. g.add_weighted_edges_from(edgeweightset_l)
  64. degree = [g.degree(),
  65. g.in_degree(),
  66. g.out_degree()]
  67. centrality = [nx.degree_centrality(g), # 计算图 g 中每个节点的度中心性。度中心性是指节点的度(与其他节点相连的边的数量)与图中节点总数的比值。
  68. nx.closeness_centrality(g), # 计算图 g 中每个节点的接近中心性。接近中心性是指节点到其他节点的平均最短路径长度的倒数。
  69. nx.pagerank(g), # 计算图 g 中每个节点的 PageRank 值。PageRank 是一种用于评估网页重要性的算法,也可以应用于其他网络中的节点重要性评估。
  70. nx.clustering(g)] # 计算图 g 中每个节点的聚集系数。聚集系数是指节点的邻居之间存在连接的概率。
  71. #把主贴相关信息拿出来
  72. tmp=edgeweightset["target"].values
  73. node_list = []
  74. nodes = g.nodes() # 提取网络中节点列表
  75. for node in nodes:
  76. if node not in tmp:
  77. continue
  78. node_list.append([node,
  79. degree[0][node],
  80. degree[1][node],
  81. degree[2][node],
  82. centrality[0][node],
  83. centrality[1][node],
  84. centrality[2][node],
  85. centrality[3][node]])
  86. node_list = pd.DataFrame(node_list)
  87. node_list.columns = ['Id', 'degree', 'in_degree', 'out_degree',
  88. 'degree_centrality', 'closeness_centrality', 'pagerank', 'clustering']
  89. node_list['user_flag_infl'] = 0
  90. node_list['user_flag_act'] = 0
  91. node_list.user_flag_infl[node_list['out_degree'] > np.percentile(node_list['out_degree'], 95)] = 1
  92. node_list.user_flag_act[(node_list['in_degree'] > np.percentile(node_list['in_degree'], 90)) &
  93. (node_list['closeness_centrality'] > np.percentile(node_list['closeness_centrality'],
  94. 50))] = 1
  95. node_dic=node_list.set_index('Id')[['degree', 'in_degree','out_degree','degree_centrality','closeness_centrality','pagerank','clustering']].T.to_dict()
  96. return node_dic
  97. def get_content(inputdata,logging):
  98. """
  99. :param inputdata:json数据
  100. :return: prompt及其他参数
  101. """
  102. res={}
  103. admin=inputdata["metadata"]["admin"]
  104. data=inputdata["data"]
  105. prompt=admin["prompt"]
  106. if_user=re.findall("{{(.*)}}",prompt)
  107. if_data=re.findall("@@(.*)@@",prompt)
  108. if if_user != []:
  109. user_data=inputdata["metadata"]["user"]
  110. if if_user[0] in user_data.keys():
  111. tmp=user_data[if_user[0]]
  112. prompt=re.sub("{{(.*)}}",tmp,prompt)
  113. if if_data!=[] and if_data[0] in data.keys():
  114. tmp1=data[if_data[0]]
  115. prompt=re.sub("@@(.*)@@",tmp1,prompt)
  116. res["prompt"]=prompt
  117. res["authorization"]=admin["authorization"]
  118. res["model"]=admin["model"]
  119. res["temperature"]=admin["temperature"]
  120. res["authorization"]=admin["authorization"]
  121. res["top_p"]=admin["top_p"]
  122. res["n"]=admin["n"]
  123. return res
  124. if __name__=="__main__":
  125. inputdata={
  126. "metadata":{
  127. "output":{
  128. "output_type":"table",
  129. "label_col":[
  130. "软件著作抽取结果"
  131. ]
  132. },
  133. "input":{
  134. "input_type":"text",
  135. "label":[
  136. "7_软件著作过滤器"
  137. ]
  138. },
  139. "address":"http://172.18.1.181:9011/chatGpt/",
  140. "admin":{
  141. "authorization":"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",
  142. "top_p":"1",
  143. "user_input":[
  144. {
  145. "keyname":"tag",
  146. "keydesc":""
  147. }
  148. ],
  149. "temperature":"0.2",
  150. "model":"gpt-3.5-turbo-16k",
  151. "prompt":"请在下面这句话中提取出:证书号、软件名称、著作权人,以json格式输出,找不到的字段赋值为空字符串,不要有多余的文字输出,只输出json结构。@@7_软件著作过滤器@@",
  152. "n":"1"
  153. },
  154. "index":1
  155. },
  156. "data":{
  157. "1_项目文件上传":"[{ \"fileUrl\":\"http://172.18.1.130:9985/group33/default/20230816/16/05/1/1-基于时间序列遥感 影像洪涝检测系统.jpg\",\"fileType\":\"jpg\", \"filePath\":\"/软件著作/1-基于时间序列遥感 影像洪涝检测系统.jpg\",\"fileId\":\"cd6592f0389bb1da25afbb44901f9cde\",\"fileName\":\"1-基于时间序列遥感 影像洪涝检测系统.jpg\" },{ \"fileUrl\":\"http://172.18.1.130:9985/group33/default/20230816/16/06/1/2-基于遥感影像的快速变化检测系统.jpg\",\"fileType\":\"jpg\", \"filePath\":\"/软件著作/2-基于遥感影像的快速变化检测系统.jpg\",\"fileId\":\"338847e34904fa96e8834cb220667db8\",\"fileName\":\"2-基于遥感影像的快速变化检测系统.jpg\" },{ \"fileUrl\":\"http://172.18.1.130:9985/group33/default/20230816/16/08/1/3-基于时空模型的遥感时间序列森林火灾检测系统.jpg\",\"fileType\":\"jpg\", \"filePath\":\"/软件著作/1/3-基于时空模型的遥感时间序列森林火灾检测系统.jpg\",\"fileId\":\"944eec1cf98f216ea953459dac4dd505\",\"fileName\":\"3-基于时空模型的遥感时间序列森林火灾检测系统.jpg\" },{ \"fileUrl\":\"http://172.18.1.130:9985/group33/default/20230816/16/09/1/4-基于隐马尔可夫模型的遥感时间序列分类系统.jpg\",\"fileType\":\"jpg\", \"filePath\":\"/软件著作/4-基于隐马尔可夫模型的遥感时间序列分类系统.jpg\",\"fileId\":\"eb378cb9ee914323f601500378dfad76\",\"fileName\":\"4-基于隐马尔可夫模型的遥感时间序列分类系统.jpg\" }]",
  158. "2_文件分类信息":"{\"软件著作\":4}",
  159. "3_OCR识别内容":"{\"content\":\" 22222222222222222222222222222222222222222222222222\\n中华人民共和国国家版权局\\n计算机软件著作权登记证书\\n证书号:软著登字第1623261号\\n软件名称:\\n基于遥感影像的快速变化检测系统\\nV1.0\\n著作权人:中国科学院遥感与数字地球研究所\\n开发完成日期:2016年08月01日\\n首次发表日期:未发表\\n权利取得方式:原始取得\\n权利范围:全部权利\\n登记号:2017SR037977\\n根据《计算机软件保护条例》和《计算机软件著作权登记办法》的\\n规定,经中国版权保护中心审核,对以上事项予以登记\\n计算机软件著作权\\n登记专用章\\n2017年02月10日\\nNo.01433672\",\"fileId\":\"338847e34904fa96e8834cb220667db8\",\"fileName\":\"2-基于遥感影像的快速变化检测系统.jpg\",\"filePath\":\"/软件著作/2-基于遥感影像的快速变化检测系统.jpg\",\"fileType\":\"jpg\",\"fileUrl\":\"http://172.18.1.130:9985/group33/default/20230816/16/06/1/2-基于遥感影像的快速变化检测系统.jpg\",\"pageNum\":1}",
  160. "businessKey":"185aef3b1c810799a6be8314abf6512c",
  161. "7_软件著作过滤器":"{\"content\":\" 22222222222222222222222222222222222222222222222222\\n中华人民共和国国家版权局\\n计算机软件著作权登记证书\\n证书号:软著登字第1623261号\\n软件名称:\\n基于遥感影像的快速变化检测系统\\nV1.0\\n著作权人:中国科学院遥感与数字地球研究所\\n开发完成日期:2016年08月01日\\n首次发表日期:未发表\\n权利取得方式:原始取得\\n权利范围:全部权利\\n登记号:2017SR037977\\n根据《计算机软件保护条例》和《计算机软件著作权登记办法》的\\n规定,经中国版权保护中心审核,对以上事项予以登记\\n计算机软件著作权\\n登记专用章\\n2017年02月10日\\nNo.01433672\",\"fileId\":\"338847e34904fa96e8834cb220667db8\",\"fileName\":\"2-基于遥感影像的快速变化检测系统.jpg\",\"filePath\":\"/软件著作/2-基于遥感影像的快速变化检测系统.jpg\",\"fileType\":\"jpg\",\"fileUrl\":\"http://172.18.1.130:9985/group33/default/20230816/16/06/1/2-基于遥感影像的快速变化检测系统.jpg\",\"pageNum\":1}"
  162. },
  163. "created":1691004265000,
  164. "module":"OCR",
  165. "start_tag":"false",
  166. "last_edit":1692464331000,
  167. "next_app_id":[
  168. {
  169. "start_id":86,
  170. "edge_id":49,
  171. "end_id":90
  172. }
  173. ],
  174. "transfer_id":11,
  175. "blueprint_id":3,
  176. "scenes_id":3,
  177. "scenario":{
  178. "dataloss":1,
  179. "autoCommitTriggerLast":1,
  180. "maxErrors":3,
  181. "autoCommit":1,
  182. "freshVariables":1
  183. },
  184. "wait_condition":[
  185. ],
  186. "scheduling":{
  187. "interval":-1,
  188. "type":"single"
  189. },
  190. "name":"软件著作抽取",
  191. "businessKey":"185aef3b1c810799a6be8314abf6512c",
  192. "id":86,
  193. "describe":"软件著作抽取"
  194. }
  195. a=get_content(inputdata,"")
  196. print(a)