检查字典是不是存在于字符串中

Posted

技术标签:

【中文标题】检查字典是不是存在于字符串中【英文标题】:Check dictionary exist in string检查字典是否存在于字符串中 【发布时间】:2021-07-20 08:22:49 【问题描述】:

我的字典是向量字符串,长字符串可能包含或不包含字典中的文本。我的工作是查找字典中的哪些文本以长文本存在。但问题是必须快。这意味着我无法检查字典中的每个文本。

cv::Mat query_descs = extract_features(inputText, listKeyWrongChar);
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create(DescriptorMatcher::FLANNBASED);
std::vector< std::vector<DMatch> > knn_matches;
matcher->knnMatch(query_descs, dataWrongWords, knn_matches, 50);
for (size_t k = 0; k < knn_matches.size(); k++)

    for (int j = 0; j < 50; j++) 
        string prefecture_ = wrongWords[knn_matches[k][j].trainIdx];
        listResult.push_back(prefecture_);
    

我使用的解决方案是 DescriptorMatcher:

首先我用索引标记字典中的字符 然后我创建矩阵,其中行是字典中的每个文本,列是字符 我用长文本创建这样的矩阵 然后我使用 DescriptorMatcher 来查找最接近长文本的文本。

错字多的问题。有时我需要 50 个单词。

谁能帮我解决这个问题?

【问题讨论】:

Trie 可能会有所帮助。 看起来 trie 需要很多时间,因为我必须检查长文本中的每个字符 我不明白如何避免检查长文本的每个字符...使用Trie,您应该只将复杂性乘以O(1)。 (构建 Trie 的复杂性与字典的字符总数成线性关系)。在我看来,这是关于复杂性的最佳解决方案。 这个问题可能需要改进,或者我完全误解了它。你是否认真地在字典上使用FLANNBASED K-最近邻匹配?难怪这既慢又不准确。 【参考方案1】:

似乎Trie 是一个很好的解决方案。调查时间处理似乎比我的解决方案更快

【讨论】:

以上是关于检查字典是不是存在于字符串中的主要内容,如果未能解决你的问题,请参考以下文章

寻找一种优雅的方法来检查字典中是不是存在密钥[重复]

如何检查 NSDictionary 中的值是不是存在于字典数组中

检查给定键是不是已存在于字典中并将其递增

如何检查数组的元素是不是存在于字符串中

不区分大小写地检查字符串是不是存在于数组中

检查文件中是不是存在所有多个字符串或正则表达式