generate - ¿Una API de diccionario para C#?
generate documentation c# (5)
¿Alguien conoce una buena API de diccionario .NET? No me interesan los significados, más bien necesito poder consultar palabras de diferentes maneras: devolver palabras de x longitud, devolver coincidencias parciales, etc.
Gracias
Dependiendo de cuán involucradas estén sus consultas, podría valer la pena investigar WordNet , que es básicamente un diccionario semántico. Incluye partes del discurso, sinónimos y otros tipos de relaciones entre las palabras.
Es posible que desee buscar una implementación de Trie . Eso sin duda ayudará con las "palabras que comienzan con XYZ", así como con las coincidencias exactas. Es posible que desee tener todos sus datos en múltiples estructuras de datos, cada una ajustada para la tarea en particular, por ejemplo, una para anagramas, otra para "por longitud", etc. Los diccionarios de lenguaje natural son relativamente pequeños en comparación con la RAM actualmente, por lo que realmente quieres una búsqueda rápida, ese es probablemente el camino a seguir.
NetSpell ( http://www.loresoft.com/netspell/ ) es un corrector ortográfico que está escrito en .NET que tiene listados de palabras en varios idiomas que puede utilizar.
Tome el archivo de texto sin formato de un corrector ortográfico de código abierto como ASpell ( http://aspell.net/ ) y cárguelo en una lista o en la estructura que desee.
por ejemplo,
List<string> words = System.IO.File.ReadAllText("MyWords.txt").Split(new string[]{Environment.NewLine}).ToList();
// C# 3.0 (LINQ) example:
// get all words of length 5:
from word in words where word.length==5 select word
// get partial matches on "foo"
from word in words where word.Contains("foo") select word
// C# 2.0 example:
// get all words of length 5:
words.FindAll(delegate(string s) { return s.Length == 5; });
// get partial matches on "foo"
words.FindAll(delegate(string s) { return s.Contains("foo"); });
Estoy con Barry Fandango en este caso, pero puedes hacerlo sin LINQ. .NET 2.0 tiene algunos buenos métodos de filtrado en el tipo List (T). El que yo sugiero es
List(T).FindAll(Predicate(T)) : List(T)
Este método colocará cada elemento de la lista a través del método predicado y devolverá la lista de palabras que devuelven ''verdadero''. Por lo tanto, cargue sus palabras como se sugiere desde un diccionario de código abierto en una Lista (Cadena). Para encontrar todas las palabras de longitud 5 ...
List(String) words = LoadFromDictionary();
List(String) fiveLetterWords = words.FindAll(delegate(String word)
{
return word.Length == 5;
});
O para todas las palabras que comienzan con ''abc'' ...
List(String) words = LoadFromDictionary();
List(String) abcWords = words.FindAll(delegate(String word)
{
return word.StartsWith(''abc'');
});