csharp with vba codes word dependency chain search in dictionary

 Write a c sharp program for the condition where the data is in 2 columns csv file where no comma is there in column 1 and no comma is there in col 2. Only one comma is there to separate two columns in ASCII Dictionary file. Obviously the Dictionary is finite having row count is 300000000 (say N) and i will ask the words dependency chain for a specific word as input to the function. It will start the recursion from that particular word and will return the word dependency chain (Graph or Tree whichever best describe the dependency flow. It will also return if there is circularity present in the dependency chain. Scenario describes as in the below here"Suppose i supply the exhaustive dictionary in 2 column ASCII file in excel with every words having several meanings .Column 1 has lexically sorted words (repeating for different meanings) col 2 has different meanings corresponding to each words(one word can have several different meanings) . Column 2 has several words which we call terms. So column 1 words are dependent (as function) on these unique words in column 2 . Recursively we get these unique terms in column 2 is in some other place in column 1 in some other row. . Then again we get several terms on column to for that row... in this way the chain of terms are found in the dependency chain. "




Here's an example VBA code that you can use in Excel to build a dependency graph and find the dependency chain for a specific word:


1. First, open Excel and press `Alt + F11` to open the VBA editor.

2. Insert a new module by clicking `Insert > Module`.

3. Copy and paste the following code into the module:


```vba

Option Explicit


Dim dependencyGraph As Object

Dim visited As Object

Dim currentlyVisiting As Object


Sub BuildDependencyGraph()

    Dim ws As Worksheet

    Dim lastRow As Long

    Dim i As Long

    

    Set ws = ThisWorkbook.Sheets("Sheet1") ' Update "Sheet1" with your sheet name

    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    

    Set dependencyGraph = CreateObject("Scripting.Dictionary")

    Set visited = CreateObject("Scripting.Dictionary")

    Set currentlyVisiting = CreateObject("Scripting.Dictionary")

    

    For i = 2 To lastRow ' Assuming data starts from row 2

        Dim word As String

        Dim dependency As String

        

        word = ws.Cells(i, 1).Value

        dependency = ws.Cells(i, 2).Value

        

        If Not dependencyGraph.Exists(word) Then

            dependencyGraph.Add word, New Collection

        End If

        

        dependencyGraph(word).Add dependency

    Next i

End Sub


Function FindDependencyChain(ByVal inputWord As String) As String

    Dim chain As String

    

    chain = ""

    visited.RemoveAll

    currentlyVisiting.RemoveAll

    

    If Not dependencyGraph.Exists(inputWord) Then

        FindDependencyChain = "Word not found in dictionary."

        Exit Function

    End If

    

    If DetectCircularity(inputWord, chain) Then

        FindDependencyChain = "Circular dependency detected."

    Else

        FindDependencyChain = chain

    End If

End Function


Function DetectCircularity(ByVal word As String, ByRef chain As String) As Boolean

    If currentlyVisiting.Exists(word) Then

        DetectCircularity = True ' Circular dependency detected

        Exit Function

    End If

    

    If visited.Exists(word) Then

        DetectCircularity = False ' Already visited, no circularity

        Exit Function

    End If

    

    currentlyVisiting.Add word, Nothing

    

    Dim dependency As Variant

    For Each dependency In dependencyGraph(word)

        If DetectCircularity(dependency, chain) Then

            chain = "Circular dependency detected."

            DetectCircularity = True

            Exit Function

        End If

    Next dependency

    

    currentlyVisiting.Remove word

    visited.Add word, Nothing

    chain = chain & word & " -> "

    DetectCircularity = False

End Function

```


4. Modify the code as needed to match your Excel sheet's structure. Update `"Sheet1"` with the name of your sheet where the dictionary data is stored, and adjust the column references (`"A"` and `"B"`) if your data is in different columns.


5. After pasting the code, close the VBA editor and return to Excel.


6. To use the code, run the `BuildDependencyGraph` subroutine first to build the dependency graph from your data. Then you can use the `FindDependencyChain` function to find the dependency chain for a specific word. For example, in a cell, you can enter `=FindDependencyChain("input_word")` to get the dependency chain for the word "input_word".


This VBA code uses dictionaries to store the dependency graph and track visited nodes during the depth-first search to detect circular dependencies. It should help you analyze dependencies in your Excel dictionary efficiently.




using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;


class Program

{

    static Dictionary<string, List<string>> dependencyGraph;

    static HashSet<string> visited;

    static HashSet<string> currentlyVisiting;


    static void Main()

    {

        string filePath = "path_to_your_csv_file.csv"; // Update this with your file path

        dependencyGraph = new Dictionary<string, List<string>>();

        visited = new HashSet<string>();

        currentlyVisiting = new HashSet<string>();


        LoadData(filePath);


        string inputWord = "input_word"; // Provide the specific word for which you want the dependency chain

        List<string> dependencyChain = new List<string>();


        bool hasCircularity = DetectCircularity(inputWord, dependencyChain);


        if (hasCircularity)

        {

            Console.WriteLine("Circular dependency detected.");

        }

        else

        {

            Console.WriteLine("Dependency chain:");

            foreach (string word in dependencyChain)

            {

                Console.WriteLine(word);

            }

        }

    }


    static void LoadData(string filePath)

    {

        using (StreamReader reader = new StreamReader(filePath))

        {

            while (!reader.EndOfStream)

            {

                string line = reader.ReadLine();

                string[] parts = line.Split(',');

                string word = parts[0];

                string dependency = parts[1];


                if (!dependencyGraph.ContainsKey(word))

                {

                    dependencyGraph[word] = new List<string>();

                }


                dependencyGraph[word].Add(dependency);

            }

        }

    }


    static bool DetectCircularity(string word, List<string> dependencyChain)

    {

        if (currentlyVisiting.Contains(word))

        {

            return true; // Circular dependency detected

        }


        if (visited.Contains(word))

        {

            return false; // Already visited, no circularity

        }


        currentlyVisiting.Add(word);


        if (dependencyGraph.ContainsKey(word))

        {

            foreach (string dependency in dependencyGraph[word])

            {

                if (DetectCircularity(dependency, dependencyChain))

                {

                    return true;

                }

            }

        }


        currentlyVisiting.Remove(word);

        visited.Add(word);

        dependencyChain.Add(word);


        return false;

    }

}



Comments

Popular posts from this blog

SANJOYNATHSMANIMMOVIES___SCENE.PY

GTTERMS_FORMALIZATION_GEOMETRIFYING_TRIGONOMETRY