2011-01-26 9 views
0

英語の辞書がテキストファイルにある場合、指定された文字列が適切で正しい英単語であるかどうかを確認する最良の方法は何ですか?私の辞書には約10万の英単語が含まれており、1度に平均60000語をチェックしなければなりません。私はちょうど最も効率的な方法を探しています。また、すべての文字列を最初に格納するか、生成されたときに処理するだけです。あなただけHashset<string>のすべてを開くことができますので、文字列処理

ありがとう

答えて

6

100kのは、あまりにも偉大な番号ではありません。

ハッシュセットルックアップはキーベースなので、雷が激しくなります。これは、コードにどのように見えるか

例は次のとおりです。

string[] lines = File.ReadAllLines(@"C:\MyDictionary.txt"); 
HashSet<string> myDictionary = new HashSet<string>(); 
foreach (string line in lines) 
{ 
    myDictionary.Add(line); 
} 

string word = "aadvark"; 
if (myDictionary.Contains(word)) 
{ 
    Console.WriteLine("There is an aadvark"); 
} 
else 
{ 
    Console.WriteLine("The aadvark is a lie"); 
} 
+0

辞書の代わりにハッシュセットに応答するように編集し、質問を誤読しました。 – SWeko

1

は、.NET 3.5以降を使用している場合は、おそらくHashSet<string>を使用する必要があります。

有効な単語の辞書をHashSet<string>にロードしてから、各候補文字列にContainsを使用するか、または一部の演算子を使用して無効な単語をすべて検索してください。例えば

// There are loads of ways of loading words from a file, of course 
var valid = new HashSet<string>(File.ReadAllLines("dictionary.txt")); 
var candidates = new HashSet<string>(File.ReadAllLines("candidate.txt")); 

var validCandidates = candidates.Intersect(valid); 
var invalidCandidates = candidates.Except(valid); 

また、大文字と小文字を区別しない比較または類似のものを使用することを望むかもしれない - あなたはHashSetコンストラクタに渡すことができStringComparerの適切なインスタンスで取得するためにStringComparer静的プロパティを使用します。

.NET 2を使用している場合は、Dictionary<string, whatever>を貧困層のセットとして使用できます。基本的には、値として好きなものを使用して、キーをチェックするだけです。

関連する問題