{"id":20980110,"url":"https://github.com/mehrandvd/simila","last_synced_at":"2025-05-14T15:30:30.291Z","repository":{"id":27848814,"uuid":"31339101","full_name":"mehrandvd/Simila","owner":"mehrandvd","description":"A project for string similarities.","archived":false,"fork":false,"pushed_at":"2023-10-04T10:38:52.000Z","size":2310,"stargazers_count":13,"open_issues_count":1,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-02T19:47:00.631Z","etag":null,"topics":["c-sharp","string-distance","string-matching","string-similarity"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mehrandvd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-02-25T22:27:43.000Z","updated_at":"2023-11-22T17:41:36.000Z","dependencies_parsed_at":"2022-07-27T11:02:10.768Z","dependency_job_id":null,"html_url":"https://github.com/mehrandvd/Simila","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehrandvd%2FSimila","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehrandvd%2FSimila/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehrandvd%2FSimila/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mehrandvd%2FSimila/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mehrandvd","download_url":"https://codeload.github.com/mehrandvd/Simila/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254171518,"owners_count":22026456,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-sharp","string-distance","string-matching","string-similarity"],"created_at":"2024-11-19T05:16:30.417Z","updated_at":"2025-05-14T15:30:28.694Z","avatar_url":"https://github.com/mehrandvd.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![NuGet version](https://badge.fury.io/nu/Bit.Simila.svg)](https://badge.fury.io/nu/Bit.Simila)\n\n# Installing via NuGet\n```powershell\nInstall-Package Bit.Simila\n```\n\n# What is Simila?\nAre **Color** and **Colour** equal? No!\n\n```c#\nif (\"Color\" == \"Coluor\")\n   // Always false\n\nif (\"The Candy Shop\" == \"The Kandi Schap\")\n   // Always false\n```\n\nBut they **are Similar** in **Simila**!\n\n```c#\nif (simila.AreSimilar(\"Color\", \"Colour\"))\n   // It's true now!\n\nif (simila.AreSimilar(\"The Candy Shop\", \"The Kandi Schap\"));\n   // It's true now!\n```\n# How to use\n```c#\nvar simila = new Simila();\n\n// Comparing Words\nsimila.AreSimilar(\"Lamborghini\", \"Lanborgini\"); // True\n\n\n// Comparing Expressions\nsimila.AreSimilar(\"Lamborghini is some great car\", \"Lanborgini is some graet kar\"); // True\n```\n## Customizing Simila \n\n### **Treshold**\nYou set the sensivity of similarity by setting `Treshold`. If not set, default value is `0.6` which means it considers similar if they are `60%` similar\n\n```c#\n// Are similar if their at least 50% similar.\nvar similaEasy = new Simila()\n{\n    Treshold = 0.5 \n};\n\n// considered as similar.\nsimilaEasy.IsSimilar(\"Lamborghini\", \"Lanborgni\"); // True, They are 50% similar.\n\n// Are similar if their at least 80% similar.\nvar similaTough = new Simila() \n{ \n    Treshold = 0.8 \n};\n\n// considered as NOT similar!\nsimilaEasy.AreSimilar(\"Lamborghini\", \"Lanborgni\"); // False, Not 80% similar.\n```\n\n### Similarity Resolver\nSimilarity Resolvers are different **algorithms** which Simila can use for similarity checking. \nEach algorithm works fine it is being used in its proper scenario.\n\nThere are 3 types of similarity resolvers available in Simila:\n - **Levenshtein (Default)**: It works good if we need them to **look similar**. You can read more about Levenshtein here: [Levenshtein Algorithm](https://en.wikipedia.org/wiki/Levenshtein_distance)\n - **Soundex:** It works good if we need them to **sound similar**. You can read more about Soundex here: [Soundex Algorithm](https://en.wikipedia.org/wiki/Soundex)\n - **SharedPair:** It works good if we need them to **structured similar**.\n \n You can configure simila to use a specific algorithm. We call them Resolvers.\n \n #### Using Soudex Resolver\n ```c#\nvar similaSounedx = new Simila()\n{\n    Resolver = new SoundexSimilarityResolver()\n};\n```\n\n#### Using SharedPair Resolver\n```c#\nvar similaSharedPair = new Simila()\n{\n    Resolver = new SharedPairSimilarityResolver()\n};\n```\n\n#### Using Levenshtein Resolver\nLevenshtein is even more configurable. You can set the accepted mistakes both character level and word level.\nIn this example we told Simila to consider `color` and `colour` words similar.\n```c#\n var simila = new Simila()\n {\n     Resolver = new PhraseSimilarityResolver(\n                  new WordSimilarityResolver(\n                     new MistakeRepository\u003cWord\u003e(new Mistake\u003cWord\u003e[]\n                     {\n                         (\"color\", \"colour\", 1)\n                     })\n                 )\n    )\n};\n```\n\nAlso you can add some **character level accepted mistakes**.\nIn this example we told Simila to not only consider `color` and `colour` similar, but also consider `c` and `k` similar too.\n\n```c#\n var simila = new Simila()\n {\n     Resolver = new PhraseSimilarityResolver(\n                  new WordSimilarityResolver(\n                     new MistakeRepository\u003cWord\u003e(new Mistake\u003cWord\u003e[]\n                     {\n                         (\"color\", \"colour\", 1)\n                     }),\n                     new CharacterSimilarityResolver(\n                        new MistakeRepository\u003cchar\u003e(new Mistake\u003cchar\u003e[]\n                        {\n                           ('c', 'k', 1)\n                        })\n                     )\n                 )\n    )\n};\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmehrandvd%2Fsimila","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmehrandvd%2Fsimila","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmehrandvd%2Fsimila/lists"}