【发布时间】: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 的复杂性与字典的字符总数成线性关系)。在我看来,这是关于复杂性的最佳解决方案。 -
这个问题可能需要改进,或者我完全误解了它。你是否认真地在字典上使用
FLANNBASEDK-最近邻匹配?难怪这既慢又不准确。
标签: c++ dictionary opencv