检查字典是不是存在于字符串中
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
是一个很好的解决方案。调查时间处理似乎比我的解决方案更快
【讨论】:
以上是关于检查字典是不是存在于字符串中的主要内容,如果未能解决你的问题,请参考以下文章