accountServer.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. """
  2. @author: luojunhui
  3. """
  4. import json
  5. import aiohttp
  6. from applications.articleTools import ArticleDBTools
  7. from applications.config import port
  8. class AccountServer(object):
  9. """
  10. 获取标题和公众号文章的相关性
  11. """
  12. def __init__(self, mysql_client, params):
  13. self.account_name_list = None
  14. self.sim_type = None
  15. self.interest_type = None
  16. self.min_time = None
  17. self.max_time = None
  18. self.rate = None
  19. self.title_list = None
  20. self.params = params
  21. self.AT = ArticleDBTools(mysql_client)
  22. async def request_for_nlp(self, title_list, account_interest, account_weight):
  23. """
  24. nlp process
  25. """
  26. headers = {"Content-Type": "application/json"}
  27. url = "http://localhost:{}/nlp".format(port)
  28. body = {
  29. "data": {
  30. "text_list_a": [i.replace("'", "") for i in title_list],
  31. "text_list_b": [i.replace("'", "") for i in account_interest],
  32. "score_list_b": account_weight,
  33. "symbol": 1,
  34. },
  35. "function": "similarities_cross_mean" if self.sim_type == "mean" else "similarities_cross_avg"
  36. }
  37. async with aiohttp.ClientSession() as session:
  38. async with session.post(url, headers=headers, json=body) as response:
  39. response_text = await response.text()
  40. print("结果:\t", response_text)
  41. if response_text:
  42. return await response.json()
  43. else:
  44. print("Received empty response")
  45. return {}
  46. def checkParams(self):
  47. """
  48. 校验传参
  49. :return:
  50. """
  51. try:
  52. self.title_list = self.params["text_list"]
  53. self.account_name_list = self.params.get("account_nickname_list", [])
  54. self.rate = self.params.get("rate", 0.1)
  55. self.max_time = self.params.get("max_time")
  56. self.min_time = self.params.get("min_time")
  57. self.interest_type = self.params.get("interest_type", "top")
  58. self.sim_type = self.params.get("sim_type", "mean")
  59. return None
  60. except Exception as e:
  61. response = {"error": "Params error", "detail": str(e)}
  62. return response
  63. async def getAccountInterest(
  64. self,
  65. account_name,
  66. method,
  67. rate=None,
  68. msg_type=None,
  69. index_list=None,
  70. min_time=None,
  71. max_time=None,
  72. ):
  73. """
  74. 获取账号的兴趣类型
  75. :param account_name:
  76. :param max_time:
  77. :param min_time:
  78. :param index_list:
  79. :param msg_type:
  80. :param keys_dict:
  81. :param rate:
  82. :param gh_id:
  83. :param method:
  84. :return:
  85. """
  86. good_df, bad_df = await self.AT.get_good_bad_articles(
  87. account_name=account_name,
  88. method=method,
  89. msg_type=msg_type,
  90. index_list=index_list,
  91. min_time=min_time,
  92. max_time=max_time,
  93. rate=rate,
  94. )
  95. view_count_list = good_df["show_view_count"].values.tolist()
  96. title_list = good_df["title"].values.tolist()
  97. print(view_count_list)
  98. print(title_list)
  99. return title_list, view_count_list
  100. async def getEachAccountScoreList(self, account_name):
  101. """
  102. 获取和单个账号的相关性分数
  103. :return:
  104. """
  105. try:
  106. account_interest, account_weight = await self.getAccountInterest(
  107. account_name=account_name,
  108. method=self.interest_type,
  109. rate=self.rate
  110. )
  111. sim_key = "score_list_mean" if self.sim_type == "mean" else "score_list_avg"
  112. response = await self.request_for_nlp(
  113. title_list=self.title_list,
  114. account_interest=account_interest,
  115. account_weight=account_weight
  116. )
  117. return {
  118. "score_list": response[sim_key],
  119. "text_list_max": response["text_list_max"],
  120. }
  121. except Exception as e:
  122. print(e)
  123. return {
  124. "score_list": [0] * len(self.title_list),
  125. "text_list_max": self.title_list,
  126. }
  127. async def getAccountListScoreList(self):
  128. """
  129. 获取AccountList中每一个账号的相关性分数
  130. :return:
  131. """
  132. response = {}
  133. for accountName in self.account_name_list:
  134. if response.get(accountName):
  135. continue
  136. else:
  137. response[accountName] = await self.getEachAccountScoreList(account_name=accountName)
  138. return response
  139. async def deal(self):
  140. """
  141. Deal Function
  142. :return:
  143. """
  144. return (
  145. self.checkParams() if self.checkParams() else await self.getAccountListScoreList()
  146. )