そこで、宇宙のエントロピーを減らすための小さな関数を作成しました。これは、単語が書かれている言語を決定し(可能な場合)、それを通常の言語に置き換えます。 次に、この単語をストップワードのリストと照合し、禁止されているかどうかを判断します:)
![](http://img36.imageshack.us/img36/1198/corrector.png)
(キリル文字は赤、青、ラテンまたは数字でマークされています)
C#コードの詳細には触れません。すべてが明確になると思います。
建設的な提案とコメントが嬉しいです:)
public string CheckWord( string word, out string lang, out bool Changes)
{
lang = "?" ;
string newword = word;
string OnlyRu = "" ;<br>
string OnlyEn = "DdFfGghIiJjLlNQqRrSstUVvWwYZz" ;
string Rus = "1@" ;
string Eng = "AaBEeKkMHOoPpCcTyXx30imu@anb" ;
bool IsRu100percent = false ;
foreach ( char c1 in word)
foreach ( char c2 in OnlyRu)
IsRu100percent = IsRu100percent || (c1 == c2);
if (IsRu100percent)
{
lang = "ru" ;
//
for ( int i = 0; i < word.Length; i++)
if (Eng.IndexOf(word[i]) >= 0)
{
// word[i] ""
}
for ( int i = 0; i < Rus.Length; i++)
newword = newword.Replace(Eng[i], Rus[i]);
}
else
{
bool IsEn100percent = false ;
foreach ( char c1 in word)
foreach ( char c2 in OnlyEn)
IsEn100percent = IsEn100percent || (c1 == c2);
if (IsEn100percent)
{
lang = "en" ;
//
for ( int i = 0; i < word.Length; i++)
if (Rus.IndexOf(word[i]) >= 0)
{
// word[i] ""
}
for ( int i = 0; i < Eng.Length; i++)
newword = newword.Replace(Rus[i], Eng[i]);
}
}
// ?
Changes = newword != word;
newword = newword.ToLower();
_SelectionColor = lang == "ru" ? Color.Red : lang == "en" ? Color.Blue : Color.Black;
return newword;
}
* This source code was highlighted with Source Code Highlighter .
public string CheckWord( string word, out string lang, out bool Changes)
{
lang = "?" ;
string newword = word;
string OnlyRu = "" ;<br>
string OnlyEn = "DdFfGghIiJjLlNQqRrSstUVvWwYZz" ;
string Rus = "1@" ;
string Eng = "AaBEeKkMHOoPpCcTyXx30imu@anb" ;
bool IsRu100percent = false ;
foreach ( char c1 in word)
foreach ( char c2 in OnlyRu)
IsRu100percent = IsRu100percent || (c1 == c2);
if (IsRu100percent)
{
lang = "ru" ;
//
for ( int i = 0; i < word.Length; i++)
if (Eng.IndexOf(word[i]) >= 0)
{
// word[i] ""
}
for ( int i = 0; i < Rus.Length; i++)
newword = newword.Replace(Eng[i], Rus[i]);
}
else
{
bool IsEn100percent = false ;
foreach ( char c1 in word)
foreach ( char c2 in OnlyEn)
IsEn100percent = IsEn100percent || (c1 == c2);
if (IsEn100percent)
{
lang = "en" ;
//
for ( int i = 0; i < word.Length; i++)
if (Rus.IndexOf(word[i]) >= 0)
{
// word[i] ""
}
for ( int i = 0; i < Eng.Length; i++)
newword = newword.Replace(Rus[i], Eng[i]);
}
}
// ?
Changes = newword != word;
newword = newword.ToLower();
_SelectionColor = lang == "ru" ? Color.Red : lang == "en" ? Color.Blue : Color.Black;
return newword;
}
* This source code was highlighted with Source Code Highlighter .
public string CheckWord( string word, out string lang, out bool Changes)
{
lang = "?" ;
string newword = word;
string OnlyRu = "" ;<br>
string OnlyEn = "DdFfGghIiJjLlNQqRrSstUVvWwYZz" ;
string Rus = "1@" ;
string Eng = "AaBEeKkMHOoPpCcTyXx30imu@anb" ;
bool IsRu100percent = false ;
foreach ( char c1 in word)
foreach ( char c2 in OnlyRu)
IsRu100percent = IsRu100percent || (c1 == c2);
if (IsRu100percent)
{
lang = "ru" ;
//
for ( int i = 0; i < word.Length; i++)
if (Eng.IndexOf(word[i]) >= 0)
{
// word[i] ""
}
for ( int i = 0; i < Rus.Length; i++)
newword = newword.Replace(Eng[i], Rus[i]);
}
else
{
bool IsEn100percent = false ;
foreach ( char c1 in word)
foreach ( char c2 in OnlyEn)
IsEn100percent = IsEn100percent || (c1 == c2);
if (IsEn100percent)
{
lang = "en" ;
//
for ( int i = 0; i < word.Length; i++)
if (Rus.IndexOf(word[i]) >= 0)
{
// word[i] ""
}
for ( int i = 0; i < Eng.Length; i++)
newword = newword.Replace(Rus[i], Eng[i]);
}
}
// ?
Changes = newword != word;
newword = newword.ToLower();
_SelectionColor = lang == "ru" ? Color.Red : lang == "en" ? Color.Blue : Color.Black;
return newword;
}
* This source code was highlighted with Source Code Highlighter .
呼び出しは簡単です。
string lang;
bool changes;
string re = "[\\w\\@]+" ;
Regex rx = new Regex(re, RegexOptions.IgnoreCase | RegexOptions.Singleline);
Match m = rx.Match( "poae eo" );
while (m.Success)
{
string newWord = CheckWord(m.ToString(), out lang, out changes);
m = m.NextMatch();
}
* This source code was highlighted with Source Code Highlighter .
string lang;
bool changes;
string re = "[\\w\\@]+" ;
Regex rx = new Regex(re, RegexOptions.IgnoreCase | RegexOptions.Singleline);
Match m = rx.Match( "poae eo" );
while (m.Success)
{
string newWord = CheckWord(m.ToString(), out lang, out changes);
m = m.NextMatch();
}
* This source code was highlighted with Source Code Highlighter .