2008-12-02 8 views
16

Herkes iyi bir .NET sözlüğü API'si biliyor mu? Anlamları ile ilgilenmiyorum, daha çok farklı yollarla sözcükleri sorgulayabilmem gerekir - x uzunluğunun geri dönüşü kelimeleri, kısmi eşleşmeleri döndür ve ...Dictionary API (lexical)

cevap

21

Düz metin dosyasını ASpell (http://aspell.net/) gibi bir açık kaynak kod yazıcısından alın ve bir Listeye veya istediğiniz herhangi bir yapıda yükleyin. sorgularınızın olacak nasıl dahil bağlı örneğin

,

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

uzunluğu 5 tüm kelimeleri bulmak için ben bu kod C# 3.0, ve ya .NET 3.5 veya gerektirir inanıyoruz. NET 2.0 LINQBridge ile. .NET 3.0, bu konuda .NET 2.0 üzerinde yararlı bir şey sağlamaz. –

+0

Doğru, şimdi bir süredir 3.0 çalışıyordum, bu yüzden ihtiyacım olduğunda LINQ kullanışlıdır. 3.0 olmayan örneklerini içerecek şekilde düzenlenmiştir. –

+2

Neden sadece bir kez tekrar yapabilirim? ;) – GalacticCowboy

4

Aramak isteyebilirsiniz Trie uygulaması. Bu kesinlikle "XYZ ile başlayan kelimeler" ile kesin eşleşmelerde yardımcı olacaktır. Tüm verilerinizin, her biri belirli bir görev için ayarlanmış birden çok veri yapısında olmasını isteyebilirsiniz - örn. Anagramlar için, biri "boyuta" vb. Doğal dil sözlükleri bu günlerde RAM ile karşılaştırıldığında nispeten küçüktür, bu yüzden gerçekten hızlı bir arama yapmak istiyorsanız, muhtemelen gidilecek yoldur.

2

, temelde bir semantik sözlüğü WordNet, araştırmaya değer olabilir. Konuşma parçaları, eş anlamlı sözcükler ve kelimeler arasındaki diğer ilişki türlerini içerir.

2

NetSpell (http://www.loresoft.com/netspell/), .NET'te yazabileceğiniz ve kullanabileceğiniz birkaç dilde sözcük listeleri bulunan bir yazım denetimi aracıdır.

2

Ben bu konuda Barry Fandango ile yaşıyorum, ancak LINQ olmadan yapabilirsiniz. .NET 2.0, List (T) türünde bazı güzel filtreleme yöntemlerine sahiptir. Önerim bir Bu yöntem yüklem yöntemiyle listedeki her eleman koymak ve 'gerçek' dönmek kelimelerin listesini döndürecektir

List(T).FindAll(Predicate(T)) : List(T) 

olduğunu. Yani, açık kaynak sözlükten önerildiği şekilde sözcüklerinizi bir Listeye (String) yükleyin. ...

List(String) words = LoadFromDictionary(); 
List(String) fiveLetterWords = words.FindAll(delegate(String word) 
    { 
     return word.Length == 5; 
    }); 

Veya 'abc' ile başlayan tüm kelimeleri

...

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

oh ek, C# 2.0 kodunu da yazdı ... Oooops. (Kendime not: Tamamen cevapları oku) –

İlgili konular