|
1 | 1 | import networkx as nx
|
2 |
| - |
| 2 | +nltk.download('wordnet') |
3 | 3 | def add_acronym_node_to_graph(graph, acronym, possible_meanings, context=None, relevance=0.5, related_nodes_weights=None):
|
4 | 4 | """
|
5 | 5 | Adds an ambiguous acronym node to the graph with attributes and probabilistic edges.
|
@@ -27,7 +27,95 @@ def add_acronym_node_to_graph(graph, acronym, possible_meanings, context=None, r
|
27 | 27 | # Initialize graph
|
28 | 28 | graph = nx.Graph()
|
29 | 29 | graph.add_nodes_from(["temperature", "humidity", "cloudy"])
|
| 30 | +import networkx as nx |
| 31 | +import matplotlib.pyplot as plt |
| 32 | +import nltk |
| 33 | +from nltk.corpus import wordnet as wn |
| 34 | + |
| 35 | +# Make sure to download WordNet if not already done |
| 36 | +nltk.download('wordnet') |
| 37 | + |
| 38 | +def get_contextual_meaning(letter, surrounding_words): |
| 39 | + """ |
| 40 | + Generate a contextual meaning for a letter based on surrounding words. |
| 41 | + |
| 42 | + Args: |
| 43 | + - letter (str): The letter whose meaning needs to be generated. |
| 44 | + - surrounding_words (list): A list of words surrounding the target word. |
| 45 | + |
| 46 | + Returns: |
| 47 | + - str: A contextual meaning of the letter. |
| 48 | + """ |
| 49 | + meanings = [] |
| 50 | + |
| 51 | + # Iterate through the surrounding words to understand the context |
| 52 | + for word in surrounding_words: |
| 53 | + synsets = wn.synsets(word) |
| 54 | + if synsets: |
| 55 | + # Use the first synset's lemma names as potential meanings |
| 56 | + meanings.extend([lemma.name() for lemma in synsets[0].lemmas()]) |
| 57 | + |
| 58 | + # Here, we're simply returning the first meaning related to the letter |
| 59 | + # This could be expanded with domain-specific knowledge |
| 60 | + return meanings[0] if meanings else "unknown" |
| 61 | + |
| 62 | +def encode_word_with_context(word, surrounding_words): |
| 63 | + """ |
| 64 | + Encodes a word into a numeric vector based on the alphabet-to-number mapping, |
| 65 | + but modifies each letter's encoding based on surrounding context. |
| 66 | + |
| 67 | + Args: |
| 68 | + - word (str): The word to encode. |
| 69 | + - surrounding_words (list): List of surrounding words for contextual analysis. |
| 70 | + |
| 71 | + Returns: |
| 72 | + - List[int]: A list of integers representing the word with contextual adjustments. |
| 73 | + """ |
| 74 | + encoded_word = [] |
| 75 | + |
| 76 | + for char in word.upper(): |
| 77 | + if char.isalpha(): |
| 78 | + # Get the contextual meaning of the letter based on surrounding words |
| 79 | + meaning = get_contextual_meaning(char, surrounding_words) |
| 80 | + |
| 81 | + # Adjust the letter encoding based on the contextual meaning |
| 82 | + letter_encoding = (ord(char) - ord('A') + 1) # Basic encoding (1-26) |
| 83 | + |
| 84 | + # Here, we could adjust encoding based on the meaning, for now, we use the length of meaning |
| 85 | + # As a simple proxy, we modify the encoding based on the length of the meaning |
| 86 | + contextual_encoding = letter_encoding + len(meaning) |
| 87 | + encoded_word.append(contextual_encoding) |
| 88 | + else: |
| 89 | + encoded_word.append(0) # For non-alphabetic characters (e.g., spaces) |
| 90 | + |
| 91 | + return encoded_word |
| 92 | + |
| 93 | +def add_to_graph(graph, word, relationships, surrounding_words): |
| 94 | + """ |
| 95 | + Adds a new word (acronym) to the graph and updates relationships. |
| 96 | + |
| 97 | + Args: |
| 98 | + - graph (networkx.Graph): The existing graph. |
| 99 | + - word (str): The new word (acronym) to add. |
| 100 | + - relationships (list): A list of relationships (edges) with other words. |
| 101 | + - surrounding_words (list): List of surrounding words for contextual analysis. |
| 102 | + """ |
| 103 | + # Add the new word as a node with context-aware encoding |
| 104 | + graph.add_node(word, encoded=encode_word_with_context(word, surrounding_words)) |
| 105 | + |
| 106 | + # Add relationships (edges) with other words |
| 107 | + for related_word in relationships: |
| 108 | + graph.add_edge(word, related_word) |
30 | 109 |
|
| 110 | +# Create an empty graph |
| 111 | +graph = nx.Graph() |
| 112 | + |
| 113 | +# Example of adding a new word and relationships |
| 114 | +add_to_graph(graph, "cloudy", ["weather", "humidity"], ["temperature", "rain", "storm"]) |
| 115 | + |
| 116 | +# Visualize the updated graph |
| 117 | +nx.draw(graph, with_labels=True, node_size=2000, node_color="skyblue", font_size=12, font_weight="bold") |
| 118 | +plt.show() |
31 | 119 | # Define OSA possible meanings
|
32 | 120 | osa_meanings = [
|
33 | 121 | "Optical Spectrum Analyzer",
|
|
0 commit comments