<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Guillermo Alcántara</title>
    <description>The latest articles on DEV Community by Guillermo Alcántara (@echo9k).</description>
    <link>https://dev.to/echo9k</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1104592%2F688bc0ea-dc43-45a2-8f65-e7b639ad1994.jpeg</url>
      <title>DEV Community: Guillermo Alcántara</title>
      <link>https://dev.to/echo9k</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/echo9k"/>
    <language>en</language>
    <item>
      <title>Mastering Prompting for AI Agents: Insights and Best Practices</title>
      <dc:creator>Guillermo Alcántara</dc:creator>
      <pubDate>Sat, 09 Aug 2025 19:21:06 +0000</pubDate>
      <link>https://dev.to/echo9k/mastering-prompting-for-ai-agents-insights-and-best-practices-3iod</link>
      <guid>https://dev.to/echo9k/mastering-prompting-for-ai-agents-insights-and-best-practices-3iod</guid>
      <description>&lt;p&gt;In the rapidly evolving landscape of artificial intelligence, particularly in the development of intelligent agents, &lt;strong&gt;prompt engineering&lt;/strong&gt; has emerged as a crucial skill. In a recent presentation, AI experts Hannah and Jeremy from Anthropic delved into the nuances of crafting effective prompts for AI agents. This blog post distills their insights, providing clear guidelines and examples to help you leverage AI agents effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding AI Agents
&lt;/h2&gt;

&lt;p&gt;At the core of this discussion is the concept of &lt;strong&gt;AI agents&lt;/strong&gt;—systems that use tools to execute tasks continuously and autonomously. Unlike basic prompt interactions, AI agents integrate feedback from their environment, making decisions based on the information they gather. Here’s a simplified breakdown of what an agent encompasses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tasks with Autonomy&lt;/strong&gt;: Agents receive a task and, using various tools, work independently to complete it—much like a human solving a multifaceted problem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment &amp;amp; Tools&lt;/strong&gt;: An agent operates within a defined environment equipped with the tools necessary for task completion. The message you convey through prompts essentially acts as the guiding instruction, determining what the agent should accomplish.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When to Use AI Agents
&lt;/h2&gt;

&lt;p&gt;Not all tasks require the sophistication of agents. Here’s a quick checklist to determine if an agent is suitable for your scenario:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Task Complexity&lt;/strong&gt;: Is the task intricate enough that a step-by-step human approach isn't clear? If the process is straightforward, it might be better to stick with simpler workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Valuable Outcomes&lt;/strong&gt;: Is the task poised to provide significant value—like revenue generation or improving user experience? High-leverage tasks are candidates for agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feasibility&lt;/strong&gt;: Can you define and provide the necessary tools or information for the agent to execute the task? Without clarity in tool access, it may be better to limit the task scope.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error Impact&lt;/strong&gt;: What are the repercussions of errors? If a mistake is costly or hard to correct, it may be prudent to keep a human in the loop.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Examples of Effective Use Cases
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Coding Projects&lt;/strong&gt;: When turning a design document into a pull request (PR), agents can navigate the complexity of coding tasks autonomously, resulting in significant time savings for highly-skilled engineers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Search Processes&lt;/strong&gt;: In scenarios where searches can be rectified through citations or double-checking results, deploying an agent could streamline the task. For instance, when searching for information about various startups, an agent can autonomously adjust its searches based on gathered data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Analysis&lt;/strong&gt;: When delineating insights from varied data sets with unpredictable formats, agents can navigate the complexities without needing a perfectly defined pathway.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Best Practices for Prompting Agents
&lt;/h2&gt;

&lt;p&gt;Jeremy offered several guidelines on how to &lt;strong&gt;construct effective prompts&lt;/strong&gt; for agents, emphasizing a cognitive approach to tool selection:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Think Like Your Agent&lt;/strong&gt;: Develop a mental model of the agent’s environment and tasks. Understand from an agent’s perspective what tools and responses are necessary for successful execution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Define Reasonable Heuristics&lt;/strong&gt;: Guiding agents with clear, practical heuristics helps shape their decision-making processes. This could pertain to resource allocation, such as setting tool call limits based on query complexity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tool Selection Is Vital&lt;/strong&gt;: Specify which tools the agent should leverage for different tasks. For instance, if a company heavily relies on Slack for communication, the agent should prioritize this tool for relevant tasks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plan and Reflect&lt;/strong&gt;: Encourage agents to plan their actions prior to execution. Notably, using interleaved thinking, agents can reflect on their search results before proceeding, allowing for smarter decision-making.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Beware of Unintended Side Effects&lt;/strong&gt;: As agents function autonomously, changes in prompts may lead to unpredictable results. If an agent is directed to "keep searching," ensure to include contingencies for scenarios where desired outputs don’t exist.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Manage Context Windows&lt;/strong&gt;: With models that handle extensive context windows, strategies like &lt;strong&gt;compaction&lt;/strong&gt;—summarizing excessive context to maintain focus—can be beneficial.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Evaluating Agent Performance
&lt;/h2&gt;

&lt;p&gt;Performance evaluation is crucial for understanding effectiveness:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use Realistic Tasks&lt;/strong&gt;: Ensure evaluation tasks reflect real-world scenarios relevant to the agent's functions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leverage LLMs for Judging&lt;/strong&gt;: Using language models as judges can help in assessing outputs against established rubrics, allowing for a more nuanced evaluation of agent performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check Final States&lt;/strong&gt;: Confirm that your agent completes tasks correctly by checking if it reaches the desired end state, such as updating a database correctly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Building effective prompts for AI agents is an iterative process that demands clarity, strategy, and thoughtful evaluation. By understanding when to deploy agents and refining your prompting techniques, you can unlock the full potential of AI-driven solutions. Whether in coding, data analysis, or information retrieval, these best practices will help you streamline workflows and achieve more valuable outcomes. &lt;/p&gt;

&lt;p&gt;Feel free to explore these concepts further and adapt the insights shared here to meet your specific AI use cases and contexts.&lt;/p&gt;

&lt;p&gt;Summary from Prompting for Agents - Anthropic&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=XSZP9GhhuAc" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=XSZP9GhhuAc&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>bestpractices</category>
      <category>promptengineering</category>
      <category>ai</category>
    </item>
    <item>
      <title>Feature Engineering: A Practical Guide to Doing It Right</title>
      <dc:creator>Guillermo Alcántara</dc:creator>
      <pubDate>Wed, 16 Apr 2025 03:06:04 +0000</pubDate>
      <link>https://dev.to/echo9k/feature-engineering-a-practical-guide-to-doing-it-right-1f1j</link>
      <guid>https://dev.to/echo9k/feature-engineering-a-practical-guide-to-doing-it-right-1f1j</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You’ve probably heard it a hundred times: &lt;em&gt;feature engineering is the key to unlocking better model performance&lt;/em&gt;. But what does that actually mean? And more importantly—where do you start?&lt;/p&gt;

&lt;p&gt;If you’re staring at a dataset and feeling unsure what to do with it, you’re not alone. Maybe it’s a mix of numbers, categories, and even some free-form text. Maybe you’ve already thrown it into a model and gotten “meh” results. And now you’re wondering: &lt;em&gt;am I missing something obvious?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here’s the thing—most people jump straight into feature engineering without really understanding their data. That’s like trying to decorate a house before it’s even built. To do this well, you need a framework. One that helps you identify the type of data you’re working with, choose the right techniques, and measure whether what you’re doing is actually making a difference.&lt;/p&gt;

&lt;p&gt;This article breaks it all down for you. You’ll learn the core principles behind feature engineering, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The difference between structured and unstructured data—and why it matters
&lt;/li&gt;
&lt;li&gt;How to classify features into four key levels (and what you can actually &lt;em&gt;do&lt;/em&gt; with them)
&lt;/li&gt;
&lt;li&gt;A clear breakdown of the five main types of feature engineering
&lt;/li&gt;
&lt;li&gt;How to evaluate your work beyond just model accuracy
&lt;/li&gt;
&lt;li&gt;And finally, a repeatable, step-by-step process to do it all with confidence
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're ready to stop guessing and start engineering your features with purpose—this is your blueprint.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;1. Structured vs. Unstructured Data&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before you apply any feature engineering techniques, you need to understand what kind of data you're working with.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Structured data&lt;/strong&gt; lives in spreadsheets and databases—think rows and columns, like customer age, income, or product ratings. It's neat, easy to query, and easy for machine learning models to parse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unstructured data&lt;/strong&gt; includes things like text, images, audio, or video. There’s no predefined format. It makes up roughly 80% of enterprise data, but it’s harder to work with.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most machine learning models need structured input. So, if you’ve got unstructured data, your first task is to transform it—usually through &lt;strong&gt;feature extraction&lt;/strong&gt; or &lt;strong&gt;feature learning&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Sometimes, datasets are a mix of both. For example, a customer service dataset might include structured fields like time of call, and unstructured fields like call transcripts. The goal is always the same: get it into a structured format your model can understand.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;2. The Four Levels of Data&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Understanding the &lt;em&gt;type&lt;/em&gt; of each feature in your dataset is critical because it determines what you can (and can’t) do with it. Here are the four levels:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Nominal (Qualitative, No Order)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Examples: blood type, product category&lt;/li&gt;
&lt;li&gt;Only meaningful operations: mode, counts&lt;/li&gt;
&lt;li&gt;Common technique: convert to binary/dummy variables&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Ordinal (Qualitative, Ordered)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Examples: satisfaction rating, education level&lt;/li&gt;
&lt;li&gt;Has order, but gaps between values aren’t consistent&lt;/li&gt;
&lt;li&gt;Strategy: assign integers (e.g. 1–5), but avoid maths on them unless it makes sense&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Interval (Quantitative, No True Zero)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Examples: temperature in Celsius, dates&lt;/li&gt;
&lt;li&gt;Differences are meaningful, ratios aren’t&lt;/li&gt;
&lt;li&gt;OK to calculate: mean, standard deviation&lt;/li&gt;
&lt;li&gt;Avoid: saying “twice as much” (e.g. 100°C ≠ 2× 50°C)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Ratio (Quantitative, True Zero)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Examples: age, income, weight&lt;/li&gt;
&lt;li&gt;All arithmetic operations are valid, including ratios&lt;/li&gt;
&lt;li&gt;You can use arithmetic, geometric, or harmonic means&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Quick Tip:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Misclassifying interval vs. ratio isn’t the end of the world. But mixing up qualitative and quantitative types can break your model logic.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;3. The Five Types of Feature Engineering&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Once you understand your data and its levels, you can start applying the right techniques. Here’s a breakdown of the five main types of feature engineering:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Feature Improvement&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Goal: clean and refine existing features
&lt;/li&gt;
&lt;li&gt;Techniques: fill missing values, scale numbers, normalise distributions
&lt;/li&gt;
&lt;li&gt;When to use: features are noisy, incomplete, or skewed&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Feature Construction&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Goal: create new features from existing ones
&lt;/li&gt;
&lt;li&gt;Example: combine "day" and "hour" into "daypart", or map text categories to sentiment scores
&lt;/li&gt;
&lt;li&gt;Requires: domain knowledge and logic
&lt;/li&gt;
&lt;li&gt;When to use: original features lack signal or need transformation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Feature Selection&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Goal: keep only the most relevant features
&lt;/li&gt;
&lt;li&gt;Benefits: reduces overfitting, speeds up models, improves interpretability
&lt;/li&gt;
&lt;li&gt;Techniques: correlation filtering, mutual information, model-based selection
&lt;/li&gt;
&lt;li&gt;When to use: high dimensionality, multicollinearity, or slow training times&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. Feature Extraction&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Goal: reduce dimensionality or summarise unstructured data
&lt;/li&gt;
&lt;li&gt;Techniques: PCA, SVD, Bag-of-Words for text
&lt;/li&gt;
&lt;li&gt;When to use: assumptions about structure are valid, or when simplifying data&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5. Feature Learning&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Goal: let deep models create features from raw data
&lt;/li&gt;
&lt;li&gt;Techniques: autoencoders, CNNs, GANs
&lt;/li&gt;
&lt;li&gt;Powerful, but: needs lots of data, features may be hard to interpret
&lt;/li&gt;
&lt;li&gt;Best for: images, audio, text—when manual engineering isn’t feasible&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;4. How to Evaluate Feature Engineering&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Creating new features is one thing—knowing if they actually &lt;em&gt;help&lt;/em&gt; is another. Here’s how to assess their impact:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Machine Learning Metrics&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Compare model performance (accuracy, precision, recall) &lt;em&gt;before&lt;/em&gt; and &lt;em&gt;after&lt;/em&gt; applying techniques&lt;/li&gt;
&lt;li&gt;Look for real gains, not just tiny improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Interpretability&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Can you explain what a feature does?&lt;/li&gt;
&lt;li&gt;Human-friendly features help with debugging, stakeholder trust, and regulatory compliance&lt;/li&gt;
&lt;li&gt;Simpler models often win here (e.g. using decision trees instead of deep nets)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fairness and Bias&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Watch for features that encode bias (e.g. postcode might correlate with race or income)&lt;/li&gt;
&lt;li&gt;Good feature engineering can help reveal and reduce these risks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Speed and Complexity&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fewer, more informative features usually train faster&lt;/li&gt;
&lt;li&gt;High-dimensional data can slow things down and increase storage/memory needs&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;5. The Feature Engineering Process&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here’s a repeatable, 5-step process to follow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Structure Your Data&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Convert unstructured data to structured using extraction or learning&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Classify Feature Types&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assign each feature a level: nominal, ordinal, interval, or ratio&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Apply Engineering Techniques&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose from the five categories: improve, construct, select, extract, or learn—based on your feature types&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Evaluate Impact&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use model performance, interpretability, fairness, and speed as your criteria&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Iterate&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Based on results, repeat or adjust your techniques&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Final Thoughts&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Feature engineering isn’t about using every technique under the sun—it’s about using the right ones, for the right data, at the right time. Start by understanding your data. Know its structure. Know its level. And use that knowledge to apply logical, targeted transformations.&lt;/p&gt;

&lt;p&gt;When you follow this framework, you stop guessing and start building features that &lt;em&gt;actually move the needle&lt;/em&gt;. That’s how you make your models smarter—not just bigger.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Implementing similarity search algotithms</title>
      <dc:creator>Guillermo Alcántara</dc:creator>
      <pubDate>Wed, 16 Oct 2024 18:51:25 +0000</pubDate>
      <link>https://dev.to/echo9k/implementing-similarity-search-algotithms-4hh9</link>
      <guid>https://dev.to/echo9k/implementing-similarity-search-algotithms-4hh9</guid>
      <description>&lt;h1&gt;
  
  
  Get the data
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;


&lt;span class="n"&gt;descripciones&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;All users must reset passwords every 90 days.&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Passwords need to be reset by all users every 90 days.&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Admin access should be restricted.&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Passwords must change for users every 90 days.&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Passwords must change for users every 80 days.&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# Cargar el dataset
&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Rule_ID&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;descripciones&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Description&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;descripciones&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Lexical similarity
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sklearn.feature_extraction.text&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TfidfVectorizer&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sklearn.metrics.pairwise&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;cosine_similarity&lt;/span&gt;

&lt;span class="err"&gt;!&lt;/span&gt;
&lt;span class="c1"&gt;# Vectorización de las descripciones con TF-IDF
&lt;/span&gt;&lt;span class="n"&gt;vectorizer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;TfidfVectorizer&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;fit_transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Description&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# Calcular la matriz de similitud de coseno
&lt;/span&gt;&lt;span class="n"&gt;cosine_sim_matrix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;cosine_similarity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vectorizer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Crear un diccionario para almacenar las relaciones sin duplicados
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;find_related_rules&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rule_ids&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;related_rules&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
    &lt;span class="n"&gt;seen_pairs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# Para evitar duplicados de la forma (A, B) = (B, A)
&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
        &lt;span class="n"&gt;related&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;  &lt;span class="c1"&gt;# j comienza en i + 1 para evitar duplicados
&lt;/span&gt;            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;pair&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rule_ids&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;rule_ids&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;pair&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;seen_pairs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;seen_pairs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pair&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="n"&gt;related&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;rule_ids&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;related&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;related_rules&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rule_ids&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;related&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;related_rules&lt;/span&gt;

&lt;span class="c1"&gt;# Aplicar la función para encontrar reglas relacionadas
&lt;/span&gt;&lt;span class="n"&gt;related_rules&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;find_related_rules&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cosine_sim_matrix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Rule_ID&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;tolist&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Mostrar las reglas relacionadas
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Reglas relacionadas por similitud:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;rule&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;relations&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;related_rules&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Rule &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;rule&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; es similar a:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;related_rule&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;relations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  - Rule &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;related_rule&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; con similitud de &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Semantical similarity
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;sentence&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;transformers&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sentence_transformers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;SentenceTransformer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;util&lt;/span&gt;


&lt;span class="c1"&gt;# Load the pre-trained model for generating embeddings
&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SentenceTransformer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;all-MiniLM-L6-v2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Generate sentence embeddings for each rule description
&lt;/span&gt;&lt;span class="n"&gt;embeddings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Description&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;convert_to_tensor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Compute the semantic similarity matrix
&lt;/span&gt;&lt;span class="n"&gt;cosine_sim_matrix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;util&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cos_sim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embeddings&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;embeddings&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;numpy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Function to find related rules based on semantic similarity
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;find_related_rules&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rule_ids&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;related_rules&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
    &lt;span class="n"&gt;seen_pairs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# To avoid duplicates of the form (A, B) = (B, A)
&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
        &lt;span class="n"&gt;related&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;  &lt;span class="c1"&gt;# Only consider upper triangular matrix
&lt;/span&gt;            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;pair&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rule_ids&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;rule_ids&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;pair&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;seen_pairs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;seen_pairs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pair&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="n"&gt;related&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;rule_ids&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;related&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;related_rules&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rule_ids&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;related&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;related_rules&lt;/span&gt;

&lt;span class="c1"&gt;# Apply the function to find related rules
&lt;/span&gt;&lt;span class="n"&gt;related_rules&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;find_related_rules&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cosine_sim_matrix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Rule_ID&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;tolist&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Display the related rules
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Reglas relacionadas por similitud semántica:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;rule&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;relations&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;related_rules&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Rule &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;rule&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; es similar a:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;related_rule&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;relations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  - Rule &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;related_rule&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; con similitud de &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>similarity</category>
      <category>nlp</category>
      <category>tutorial</category>
      <category>python</category>
    </item>
  </channel>
</rss>
