当前位置: 首页 > 知识库问答 >
问题:

词与词之间的关联

乌俊健
2023-03-14

我有一个用法,我想纠正单词。我有一套正确和不正确的单词[拼写错误]。我用所有的话填充了trie。我对每个词都有正确和不正确的版本。

如果我得到一个“A”字来更正,

--我在trie中搜索它。如果trie有这个词,我想把这个词和这个词的正确版本联系起来。

解决方案:我可以在Trie中错误单词的最后一个节点设置单词的正确版本[“A1”]。并可将其解析为“A1”。

但是我必须在最后一个节点存储每个单词的正确版本,这将增加内存足印。因为我把所有的单词都加载到trie[正确/不正确]。是否有任何方法我可以使正确和不正确的单词之间的关联,而不是再次存储整个单词在最后一个节点作为值?有指针吗?

public class TrieNode<T> {

    private Map<Character, TrieNode<T>> childs;
    private boolean complete;
    private T value;

    ....
    }

共有1个答案

施弘壮
2023-03-14

你可以用一本字典来做这个。在C#中,这将是:

Dictionary<string, string> MisspellingsLookup = new Dictionary<string, int>();

关键是拼写错误,值是正确的拼写。

现在,一些单词通常有多种拼写错误。例如,“community”经常被错误地拼写为“ocassion”或“athysion”。如果您想减少多个拼写错误所使用的内存,可以在构造过程中使用临时字典。无论何时添加拼写错误,都要在好单词词典中查找正确的拼写,如果已经存在,则使用该值。因此,您所做的就是存储对现有单词的引用,而不是创建新字符串。这里有一个例子:

Dictionary<string, string> GoodWords = new Dictionary<string, int>();
Dictionary<string, string> Misspellings = new Dictionary<string, string>();

void AddMisspelling(string misspelled, string correct)
{
    string goodWord;
    if (!GoodWords.TryGetValue(correct, out goodWord))
    {
        goodWord = correct;
        GoodWords.Add(correct, correct);
    }

    // Always use goodWord here, so you're not creating duplicate strings.
    Misspellings.Add(misspelled, goodWord);
}

添加完单词后,可以清除goodwords字典以节省空间:

GoodWords = null;

我在这里推荐一个字典,因为它几乎肯定会使用更少的内存,而且查找是O(1)而不是O(单词长度)。

 类似资料:
  • 什么是关键词影响力? (暂时在移动端上线) 关键词影响力,是百度搜索资源平台针对站点对于关键词数据分析的需求,推出的全新概念。 站点关键词影响力:在具体关键词下,站点获得的收益对应的关键词影响力; 最大关键词影响力:在具体关键词下,获得收益最高的站点影响力; 整体关键词影响力:在具体关键词下,百度为全部站点带来的全部收益产生的影响力总值; 关键词影响力算法复杂,涵盖该关键词下百度搜索可以为站点带来

  • 关键词分为两部分: 时间/关键词筛选 和 关键词详情 1.时间/关键词筛选 1)便捷按钮有今日、昨日、前日、上周 X、近七天 2)能自定义选择时间段以及搜索出含有个别字眼的关键词来得出想要的结果报表 2.关键词详情 1)关键词报表中所指的关键词,是指访问者是通过搜索引擎搜索相应的关键词进入网站 2)如有需要,亦可点击下载当前报表及更多数据下载,将报表下载到个人电脑,以供存档及分析 3)关于

  • 下面的表格列出了 Dart 语言特殊对待的关键词。 abstract 2 dynamic 2 implements 2 show 1 as 2 else import 2 static 2 assert enum in super async 1 export 2 interface 2 switch await 3 extends is sync 1 break external 2 libra

  • 问题内容: 在Elasticsearch中是否可以在单个查询中获取所有包含短语1或短语2的文档?我知道要匹配一个短语,可以使用以下查询: 但是,如果有多个词组并且目标是检索包含这些词组之一的文档,情况如何? 问题答案: 您可以将两个查询包装在布尔查询的子句中:

  • Javascript 关键词 break case catch continue default delete do else finally for function if in instanceof new return switch this throw try typeof var void while with

  • 到目前为止,我们已经介绍了两个称为变量及其数据类型的重要概念。 我们讨论了如何使用int , long和float来指定不同的数据类型。 我们还学习了如何命名变量来存储不同的值。 虽然本章不是单独要求的,因为保留关键字是基本编程语法的一部分,我们将它分开,以便在数据类型和变量之后立即解释它以使其易于理解。 像int,long和float一样,C编程语言支持许多其他关键字,我们将用于不同的目的。 不