2013-07-26 3 views
1

Привет Я делаю настольное приложение (C#), которое проверяет правописание введенного слова. Я использую Hunspell, который я добавил в свой проект с помощью NuGet. У меня есть 2 файла файла aff и файла dic.Как проверить правописание в Hunspell с нечувствительным регистром

using (Hunspell english = new Hunspell("en_US.aff", "en_US.dic")) 
{ 
    bool isExist = english.Spell("THesis"); 
} 

isExist равно false, потому что в моем .dic-файле правильная орфография - это «тезис». Даже я использую tolower() и вводя собственные имена, isExist становится ложным.

Помогите мне решить это?

+0

Просто, чтобы все было ясно - вы пробовали 'bool isExist = english.Spell (« THesis ».ToLower());'? – dash

+0

Да. но если я буду вводить правильное имя, например «Канада», оно все равно станет ложным. потому что в файле словаря правильная есть Канада – MMakati

ответ

2

Учитывая, что NHunspell не отображается для поддержки регистронезависимых проверки орфографии, вы можете рассмотреть немного адаптировать свой алгоритм:

Учитывая THesis, вы можете попробовать:

bool isExist = false; 

using (Hunspell english = new Hunspell("en_US.aff", "en_US.dic")) 
{ 
    TextInfo textInfo = new CultureInfo("en-US",false).TextInfo; 
    isExist =  english.Spell("THesis") 
       | english.Spell(textInfo.ToLower("THesis") 
       | english.Spell(textInfo.ToUpper("THesis")) 
       | english.Spell(textInfo.ToTitleCase("THesis")) 
} 

Это, в свою очередь, логически проверить «THESES», «тезис», «THESIS» и «Thesis» и вернуть истинное значение любого из этих описаний, любезно предоставлено logical OR operator.

Аналогичным образом для canada это будет работать, поскольку метод ToTitleCase() по крайней мере гарантирует соответствие.

Это должно работать для большинства отдельных слов (включая аббревиатуры всех шапок).

+0

Я думаю, что это решит проблему. – MMakati

+0

Это слишком непрактично. Что делать за 1000 слов? –

1

Если вы хотите TOLOWER() вызов игнорировать первый символ, сделать это таким образом:

var textToCheck = "THesis".Substring(0, 1) + "THesis".Substring(1).ToLower(); 
bool isExist = english.Spell(textToCheck); 

Если это не то, что вы ищете, смотрите ниже:


Я не совсем уверен, что вы хотите, чтобы реализация выглядела, но это тоже может помочь. Использование «ToTitleCase» займет строку и заглавные буквы первого символа. Кроме того, вызывая toLower() внутри вызова ToTitleCase, убедитесь, что только первый символ заглавны.

bool isExist = english.Spell(System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase("THesis".toLower()); 

Вам может понадобиться какое-то, если заявление, а указать, является ли вызов ToTitleCase должен быть вызван на текущей строке или нет. Это то, что вы ищете?

 Смежные вопросы

  • Нет связанных вопросов^_^