2008-12-02 17 views
16

¿Alguien sabe una buena API de .NET dictionary? No me interesan los significados, más bien necesito poder consultar palabras de diferentes maneras: devolver palabras de longitud x, devolver coincidencias parciales, etc.Diccionario API (léxico)

Respuesta

21

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"); }); 
+0

Creo que el código requiere C# 3.0, y, o bien .NET 3.5 o. NET 2.0 con LINQBridge. .NET 3.0 no proporciona nada útil sobre .NET 2.0 a este respecto. –

+0

Cierto, he estado trabajando en 3.0 desde hace un tiempo, así que supongo que me estoy acostumbrando bastante a tener LINQ a mano cuando lo necesito. Editado para contener muestras que no sean 3.0. –

+2

¿Por qué solo puedo votar una vez? ;) – GalacticCowboy

4

Es posible que desee buscar un Trie implementación. 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 estructuras de datos múltiples, cada una ajustada para la tarea en particular, p. uno para anagramas, uno para "por longitud", etc. Los diccionarios de lenguaje natural son relativamente pequeños en comparación con la RAM en estos días, por lo que si realmente desea una búsqueda rápida, ese es probablemente el camino a seguir.

2

Dependiendo de cómo está implicado sus consultas van a ser, 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.

2

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 podría utilizar.

2

Estoy con Barry Fandango en este caso, pero puede 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 va a poner todos los elementos de la lista a través del método de predicados y devolver la lista de palabras que volver 'verdadero'. Por lo tanto, cargue sus palabras como se sugiere desde un diccionario de código abierto en una Lista (Cadena). Para buscar 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 empiezan con 'abc' ...

List(String) words = LoadFromDictionary(); 
List(String) abcWords = words.FindAll(delegate(String word) 
    { 
     return word.StartsWith('abc'); 
    }); 
+0

oh snap, escribió el código C# 2.0 también ... oooops. (Nota para mí: leer las respuestas completamente) –

Cuestiones relacionadas