ComprehendController.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import boto3
  2. from boto3 import Session
  3. from django.views import View
  4. from model.models import EmailSortModel, EmailConfigModel
  5. from Utils.NeteaseMail import NeteaseMail
  6. from django.views.generic import TemplateView
  7. from object.ResponseObject import ResponseObject
  8. class ComprehendView(TemplateView):
  9. def get(self, request, *args, **kwargs):
  10. request.encoding = 'utf-8'
  11. operation = kwargs.get('operation')
  12. return self.validation(request.GET, request, operation)
  13. def post(self, request, *args, **kwargs):
  14. request.encoding = 'utf-8'
  15. operation = kwargs.get('operation')
  16. return self.validation(request.POST, request, operation)
  17. def validation(self, request_dict, request, operation):
  18. response = ResponseObject()
  19. if operation is None:
  20. return response.json(444, 'error path')
  21. else:
  22. if operation == 'createSort':
  23. return self.createSort(request_dict, response)
  24. elif operation == 'doStartSortWord':
  25. return self.doStartSortWord(request_dict, response)
  26. elif operation == 'getDocumentClassifier':
  27. return self.get_document_classifier(request_dict, response)
  28. def createSort(self,request_dict, response):
  29. client = boto3.client('comprehend', region_name='region')
  30. # Create a document classifier
  31. create_response = client.create_document_classifier(
  32. InputDataConfig={
  33. 'S3Uri': 's3://S3Bucket/docclass/file name'
  34. },
  35. DataAccessRoleArn='arn:aws:iam::account number:role/resource name',
  36. DocumentClassifierName='SampleCodeClassifier1',
  37. LanguageCode='en'
  38. )
  39. print("Create response: %s\n", create_response)
  40. # Check the status of the classifier
  41. describe_response = client.describe_document_classifier(
  42. DocumentClassifierArn=create_response['DocumentClassifierArn'])
  43. print("Describe response: %s\n", describe_response)
  44. # List all classifiers in account
  45. list_response = client.list_document_classifiers()
  46. print("List response: %s\n", list_response)
  47. def doStartSortWord(self,request_dict, response):
  48. client = boto3.client('comprehend', region_name='region')
  49. start_response = client.start_document_classification_job(
  50. InputDataConfig={
  51. 'S3Uri': 's3://srikad-us-west-2-input/docclass/file name',
  52. 'InputFormat': 'ONE_DOC_PER_LINE'
  53. },
  54. OutputDataConfig={
  55. 'S3Uri': 's3://S3Bucket/output'
  56. },
  57. DataAccessRoleArn='arn:aws:iam::account number:role/resource name',
  58. DocumentClassifierArn=
  59. 'arn:aws:comprehend:region:account number:document-classifier/SampleCodeClassifier1'
  60. )
  61. print("Start response: %s\n", start_response)
  62. # Check the status of the job
  63. describe_response = client.describe_document_classification_job(JobId=start_response['JobId'])
  64. print("Describe response: %s\n", describe_response)
  65. # List all classification jobs in account
  66. list_response = client.list_document_classification_jobs()
  67. print("List response: %s\n", list_response)
  68. def get_document_classifier(self,request_dict, response):
  69. # aws_key = "AKIA2E67UIMD45Y3HL53" # 【你的 aws_access_key】
  70. # aws_secret = "ckYLg4Lo9ZXJIcJEAKkzf2rWvs8Xth1FCjqiAqUw" # 【你的 aws_secret_key】
  71. # session = Session(aws_access_key_id=aws_key,
  72. # aws_secret_access_key=aws_secret,
  73. # region_name="us-east-1") # 此处根据自己的 s3 地区位置改变
  74. # client = session.client("asj-amazon-comprehend")
  75. # client = boto3.client(
  76. # 'asj-amazon-comprehend',
  77. # aws_access_key_id='AKIA2E67UIMD45Y3HL53',
  78. # aws_secret_access_key='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',
  79. # region_name='us-east-1'
  80. # )
  81. #client = boto3.client(service_name='comprehend',region_name='us-east-1',aws_access_key_id='AKIA2E67UIMD45Y3HL53',aws_secret_access_key='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')
  82. # response = client.describe_document_classifier(
  83. # DocumentClassifierArn='arn:aws:comprehend:us-east-1:697864307463:document-classifier/txttwo'
  84. # )
  85. # print(response)
  86. ec_qs =EmailConfigModel.objects.filter(emailtag=1) #获取总邮件
  87. for ec in ec_qs:
  88. email_server = NeteaseMail().loginEmail(ec['emailserver'], ec['fromaddr'], ec['password'], ec['emailserverport'])
  89. subject_list, from_list, bodydata_list = NeteaseMail().getEmailContext(email_server)
  90. NeteaseMail().closeEmail(email_server)
  91. for i ,v in enumerate(subject_list):
  92. client = boto3.client('comprehend')
  93. response = client.classify_document(
  94. Text=bodydata_list[i],
  95. EndpointArn='arn:aws:comprehend:us-east-1:697864307463:document-classifier-endpoint/test'
  96. )
  97. #print(response.index(max(response['Classes']['Score'])))
  98. nums = []
  99. for cls in response['Classes']:
  100. print(cls['Name'])
  101. nums.append(cls['Score'])
  102. print(response['Classes'][nums.index(max(nums))])
  103. es_qs = EmailSortModel.objects.filter(sort=response['Classes'][nums.index(max(nums))]['Name'])
  104. if es_qs.exists():
  105. uemail_qs = EmailConfigModel.objects.filter(userid=es_qs[0]['userid'], langconfig__langcode='en')
  106. if uemail_qs.exists():
  107. for uem in uemail_qs:
  108. NeteaseMail().sentemail(bodydata_list[i], subject_list[i], from_list[i], uem.fromaddr)
  109. return response.json(0)
  110. #print(response)
  111. # if __name__ == '__main__':
  112. # ComprehendAction().get_document_classifier()