[英]Data structure for storing keywords and synonyms in C#?
我正在使用C#开发一个项目,该项目需要存储10到15个关键字及其同义词。
我想到的第一种存储方式是使用2d列表,例如List>,这样看起来像:
关键字1同义词1同义词2
keyword2同义词1
关键字3同义词1同义词2等。
我开始考虑的是,如果我得到一个输入字符串并将其拆分以搜索每个单词,以查看其列表中的关键字或关键字的同义词是否适合此二维列表或将其搜索为二维列表。太慢了?
希望我的问题有意义,如果不清楚,我可以澄清任何问题。 谢谢!
搜索[列表]会太慢吗?
当您谈论10..15关键字时,很难提出一种效率低至足以使最终用户注意到速度缓慢的算法。 根本没有足够的数据来减慢现代CPU的速度。
一种方法是构建一个Dictionary<string,string>
,将每个同义词映射到其“规范”关键字。 这将包括规范版本本身:
var keywords = new Dictionary<string,string> {
["keyword1"] = "keyword1"
, ["synonym1"] = "keyword1"
, ["synonym2"] = "keyword1"
, ["keyword2"] = "keyword2"
, ["synonym3"] = "keyword2"
, ["keyword3"] = "keyword3"
};
请注意,关键字和同义词都如何显示为键,而只有关键字显示为值。 这使您可以查找关键字或同义词,并取回保证关键字。
我可能会使用字典。 关键字是您的同义词,值是您的关键字。 因此,您可以在字典中查找任何单词,并获取所需的实际关键字。 例如:
private Dictionary<string, string> synonymKeywordDict = new Dictionary<string, string>();
public SearchResult Search(IEnumerable<string> searchTerms)
{
var keywords = searchTerms.Select(x => synonymKeywordDict[x]).Distinct().ToList();
//keywords now contains your key words after being translated from any synonyms
}
以防万一我不太清楚字典会像这样加载。
private void LoadDictionary()
{
//So our lookup doesn't fail on the key word itself.
synonymKeywordDict.Add("computer", "computer");
//Then all our synonyms
synonymKeywordDict.Add("desktop", "computer");
synonymKeywordDict.Add("PC", "computer");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.