{"id":204037,"date":"2025-05-29T12:48:16","date_gmt":"2025-05-29T04:48:16","guid":{"rendered":"https:\/\/server.hk\/cnblog\/204037\/"},"modified":"2025-05-29T12:48:16","modified_gmt":"2025-05-29T04:48:16","slug":"%e5%ae%9e%e6%96%bd%e7%9b%b8%e4%bc%bc%e6%80%a7%e6%90%9c%e7%b4%a2%e7%ae%97%e6%b3%95","status":"publish","type":"post","link":"https:\/\/server.hk\/cnblog\/204037\/","title":{"rendered":"\u5b9e\u65bd\u76f8\u4f3c\u6027\u641c\u7d22\u7b97\u6cd5"},"content":{"rendered":"<p><b><\/b>     <\/p>\n<h1>\u5b9e\u65bd\u76f8\u4f3c\u6027\u641c\u7d22\u7b97\u6cd5<\/h1>\n<p>\u54c8\u55bd\uff01\u5927\u5bb6\u597d\uff0c\u5f88\u9ad8\u5174\u53c8\u89c1\u9762\u4e86\uff0c\u6211\u662f\u7684\u4e00\u540d\u4f5c\u8005\uff0c\u4eca\u5929\u7531\u6211\u7ed9\u5927\u5bb6\u5e26\u6765\u4e00\u7bc7<span style=\"color: #FF6600;, Helvetica, Arial, sans-serif;font-size: 14px;background-color: #FFFFFF\">\u300a\u5b9e\u65bd\u76f8\u4f3c\u6027\u641c\u7d22\u7b97\u6cd5\u300b<\/span>\uff0c\u672c\u6587\u4e3b\u8981\u4f1a\u8bb2\u5230<span style=\"color: #FF6600;, Helvetica, Arial, sans-serif;font-size: 14px;background-color: #FFFFFF\"><\/span>\u7b49\u7b49\u77e5\u8bc6\u70b9\uff0c\u5e0c\u671b\u5927\u5bb6\u4e00\u8d77\u5b66\u4e60\u8fdb\u6b65\uff0c\u4e5f\u6b22\u8fce\u5927\u5bb6\u5173\u6ce8\u3001\u70b9\u8d5e\u3001\u6536\u85cf\u3001\u8f6c\u53d1! \u4e0b\u9762\u5c31\u4e00\u8d77\u6765\u770b\u770b\u5427\uff01<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.17golang.com\/uploads\/20241024\/17297512386719e8c6b47bd.jpg\" class=\"aligncenter\"><\/p>\n<pre>import pandas as pd\n\n\ndescripciones = [\n        'all users must reset passwords every 90 days.',\n        'passwords need to be reset by all users every 90 days.',\n        'admin access should be restricted.',\n        'passwords must change for users every 90 days.',\n        'passwords must change for users every 80 days.'\n    ]\n\n# cargar el dataset\ndata = pd.dataframe({\n    'rule_id': range(1, len(descripciones) + 1),\n    'description': descripciones\n})\n\n<\/pre>\n<pre>from sklearn.feature_extraction.text import tfidfvectorizer\nfrom sklearn.metrics.pairwise import cosine_similarity\n\n!\n# vectorizaci\u00f3n de las descripciones con tf-idf\nvectorizer = tfidfvectorizer().fit_transform(data['description'])\n\n# calcular la matriz de similitud de coseno\ncosine_sim_matrix = cosine_similarity(vectorizer)\n\n# crear un diccionario para almacenar las relaciones sin duplicados\ndef find_related_rules(matrix, rule_ids, threshold=0.8):\n    related_rules = {}\n    seen_pairs = set()  # para evitar duplicados de la forma (a, b) = (b, a)\n\n    for i in range(len(matrix)):\n        related = []\n        for j in range(i + 1, len(matrix)):  # j comienza en i + 1 para evitar duplicados\n            if matrix[i, j] &gt;= threshold:\n                pair = (rule_ids[i], rule_ids[j])\n                if pair not in seen_pairs:\n                    seen_pairs.add(pair)\n                    related.append((rule_ids[j], round(matrix[i, j], 2)))\n        if related:\n            related_rules[rule_ids[i]] = related\n\n    return related_rules\n\n# aplicar la funci\u00f3n para encontrar reglas relacionadas\nrelated_rules = find_related_rules(cosine_sim_matrix, data['rule_id'].tolist(), threshold=0.8)\n\n# mostrar las reglas relacionadas\nprint(\"reglas relacionadas por similitud:\")\nfor rule, relations in related_rules.items():\n    print(f\"rule {rule} es similar a:\")\n    for related_rule, score in relations:\n        print(f\"  - rule {related_rule} con similitud de {score}\")\n<\/pre>\n<pre>!pip install sentence-transformers\nfrom sentence_transformers import SentenceTransformer, util\n\n\n# Load the pre-trained model for generating embeddings\nmodel = SentenceTransformer('all-MiniLM-L6-v2')\n\n# Generate sentence embeddings for each rule description\nembeddings = model.encode(data['Description'], convert_to_tensor=True)\n\n# Compute the semantic similarity matrix\ncosine_sim_matrix = util.cos_sim(embeddings, embeddings).cpu().numpy()\n\n# Function to find related rules based on semantic similarity\ndef find_related_rules(matrix, rule_ids, threshold=0.8):\n    related_rules = {}\n    seen_pairs = set()  # To avoid duplicates of the form (A, B) = (B, A)\n\n    for i in range(len(matrix)):\n        related = []\n        for j in range(i + 1, len(matrix)):  # Only consider upper triangular matrix\n            if matrix[i, j] &gt;= threshold:\n                pair = (rule_ids[i], rule_ids[j])\n                if pair not in seen_pairs:\n                    seen_pairs.add(pair)\n                    related.append((rule_ids[j], round(matrix[i, j], 2)))\n        if related:\n            related_rules[rule_ids[i]] = related\n\n    return related_rules\n\n# Apply the function to find related rules\nrelated_rules = find_related_rules(cosine_sim_matrix, data['Rule_ID'].tolist(), threshold=0.8)\n\n# Display the related rules\nprint(\"Reglas relacionadas por similitud sem\u00e1ntica:\")\nfor rule, relations in related_rules.items():\n    print(f\"Rule {rule} es similar a:\")\n    for related_rule, score in relations:\n        print(f\"  - Rule {related_rule} con similitud de {score}\")\n\n<\/pre>\n<p>\u5230\u8fd9\u91cc\uff0c\u6211\u4eec\u4e5f\u5c31\u8bb2\u5b8c\u4e86\u300a\u5b9e\u65bd\u76f8\u4f3c\u6027\u641c\u7d22\u7b97\u6cd5\u300b\u7684\u5185\u5bb9\u4e86\u3002\u4e2a\u4eba\u8ba4\u4e3a\uff0c\u57fa\u7840\u77e5\u8bc6\u7684\u5b66\u4e60\u548c\u5de9\u56fa\uff0c\u662f\u4e3a\u4e86\u66f4\u597d\u7684\u5c06\u5176\u8fd0\u7528\u5230\u9879\u76ee\u4e2d\uff0c\u6b22\u8fce\u5173\u6ce8\u516c\u4f17\u53f7\uff0c\u5e26\u4f60\u4e86\u89e3\u66f4\u591a\u5173\u4e8e\u7684\u77e5\u8bc6\u70b9\uff01<\/p>\n<p>      \u7248\u672c\u58f0\u660e \u672c\u6587\u8f6c\u8f7d\u4e8e\uff1adev.to \u5982\u6709\u4fb5\u72af\uff0c\u8bf7\u8054\u7cfb\u5220\u9664<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5b9e\u65bd\u76f8\u4f3c\u6027\u641c\u7d22\u7b97\u6cd5 \u54c8\u55bd\uff01\u5927\u5bb6\u597d&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4925],"tags":[],"class_list":["post-204037","post","type-post","status-publish","format-standard","hentry","category-4925"],"_links":{"self":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/posts\/204037","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/comments?post=204037"}],"version-history":[{"count":0,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/posts\/204037\/revisions"}],"wp:attachment":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/media?parent=204037"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/categories?post=204037"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/tags?post=204037"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}