【问题标题】: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-最近邻匹配?难怪这既慢又不准确。

标签: c++ dictionary opencv


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-10-04
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    相关资源
    最近更新 更多