Проверка орфографии с использованием дерева троичного поиска

Я сделал проверку орфографии, используя троичное дерево поиска (TST). Кто-нибудь может сказать мне, как найти следующее возможное слово в TST?

например: если я хочу найти слово "мужественный" в средстве проверки правописания и если слово отсутствует в TST, чтобы оно выводило слова рядом со следующими:

ВЫ ЗНАЧИТЕ: "Человек", "Манго".

Вот код для реализации троичного дерева поиска. Может ли любое тело, пожалуйста, изменить, чтобы найти ближайшее возможное слово. http://www.geeksforgeeks.org/ternary-search-tree/

2 ответа

Решение

Средство проверки орфографии, вероятно, захочет найти ближайшие совпадения с целевым словом, а не слова, которые имеют одинаковый префикс. TST хороши в поиске префиксов, но они не сильно вам помогут, если вы хотите найти похожие слова.

В вашем примере (при условии, что "мужественного" нет в вашем словаре, хотя это слово), предложение "главным образом" гораздо более вероятно, чем "манго", но оно не будет найдено при сканировании, начиная с самого длинного соответствующий префикс.

Однако, если вы хотите, чтобы сканирование начиналось с самого длинного префикса соответствия:

1) Измените searchTST, чтобы он возвращал struct Node*и замените последнее предложение else на:

else if (*(word+1) == '\0')
  return root;
else {
  struct Node* child = searchTST(root->eq, word+1);
  return child ? child : root;
}

2) searchTST теперь вернет корень для самого длинного совпадающего префикса к цели. Вызывающий должен проверить, есть ли у возвращенного узла isEndOfString флаг установлен.

3) Вы можете использовать что-то вроде traverseTST на узле, возвращенном searchTST чтобы произвести все слова, начинающиеся с этого префикса.

Вы можете попробовать подстановочный знак. Например, замените где-нибудь в вашем поисковом слове букву подстановочным знаком, затем разбейте слово на две подстроки и вставьте их в TST. Затем найдите все шаблоны, а не только точное совпадение. Это работает, создавая все префиксы словарного слова. Но я рекомендую попробовать алгоритм aho-corasick с TST.

Другие вопросы по тегам