2013-07-26 119 views
1

嗨我正在製作一個桌面應用程序(C#),用於檢查輸入單詞的拼寫。我使用的是我使用NuGet添加到我的項目中的Hunspell。我有2個文件的aff文件和dic文件。如何在不區分大小寫的情況下檢查Hunspell中的拼寫

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

ISEXIST等於假的,因爲在我的.DIC文件的正確拼寫是「論文」。即使我使用.lower()並輸入專有名稱isExist變爲false。

你能幫我解決這個問題嗎?

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

這又會從邏輯上檢查「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」將採用一個字符串並大寫第一個字符。另外,通過在ToTitleCase調用中調用toLower()將確保只有第一個字符被大寫。

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

您可能需要某種形式的,如果還有語句來指定ToTitleCase呼叫是否不應該叫上當前字符串或沒有。這是你在找什麼?

相關問題