我想使用Hunspell为词典添加一些自定义词:
我从构造函数中的字典加载:
private readonly Hunspell _hunspell;
public NhunspellHelper()
{
_hunspell = new Hunspell(
HttpContext.Current.Server.MapPath("~/App_Data/en_US.aff"),
HttpContext.Current.Server.MapPath("~/App_Data/en_US.dic"));
}
此功能在字典中添加一个新单词:
public void AddToDictionary(string word)
{
_hunspell.Add(word); // or _hunspell.AddWithAffix(word, "aaa");
}
我在字典中添加一个单词后,如果我在同一个请求中拼写这个单词:
_hunspell.Spell(word)
它返回true
,但如果我在另一个请求中拼写此单词,则会返回false
我检查了文件.aff
和.dic
,我看到它在_hunspell.Add(word);
之后没有变化,所以当发送另一个请求时,构造函数会从原始字典创建一个新的Hunspell实例
我的问题是: Nhunspell是否将新单词添加到字典中并将其保存回物理文件(* .aff或* .dic),还是仅将其添加到内存中并对字典文件不执行任何操作?
我在字典中添加新单词时做错了吗?
答案 0 :(得分:1)
最后,在普雷斯科特的评论中,我在CodeProject中找到了作者(Thomas Maierhofer)提供的这些信息:
您可以使用Add()和AddWithAffix()将您的单词添加到已创建的Hunspell对象中。 字典文件不会被修改,因此每次创建Hunspell对象时都必须进行此添加。 您可以根据需要存储自己的字典,并在创建Hunspell对象后添加字典中的单词。 之后,您可以在字典中用自己的单词进行拼写检查。
这意味着什么都没有保存回字典文件,所以我将我的Nhunspell类改为单例以保留Hunspell对象。
public class NhunspellHelper
{
private readonly Hunspell _hunspell;
private NhunspellHelper()
{
_hunspell = new Hunspell(
HttpContext.Current.Server.MapPath("~/App_Data/en_US.aff"),
HttpContext.Current.Server.MapPath("~/App_Data/en_US.dic"));
}
private static NhunspellHelper _instance;
public static NhunspellHelper Instance
{
get { return _instance ?? (_instance = new NhunspellHelper()); }
}
public bool Spell(string word)
{
return _hunspell.Spell(word);
}
}
我可以用这一行拼写单词:
var isCorrect = NhunspellHelper.Instance.Spell("word");