Я создал дерево суффиксов из этого удивительного ответа. Работает как часы!
На данный момент, если я ищу «кошку» в «Этот кот - красивая кошка», он вернет 5 как первое появление «кошки», как для начального индекса 5.
Но я не могу найти способ отслеживать все суффиксы в алгоритме для создания. Так что в основном я могу найти индекс первого совпадения, но не всех разных вхождений.
На данный момент у меня есть:
class Edge
{
int textIndexFrom;
Node* nodefrom;
Node* nodeTo;
int textIndexTo;
}
class Node
{
std::map<char,Edge*> m_childEdges;
Edge* m_pParentEdge;
Node* m_pLinkedNode;
}
Я просто поместил соответствующие переменные в код выше. Я предполагаю, что для хранения различных начальных позиций в Edge требуется std::vector, но я не вижу, когда добавлять новый индекс. Мы могли бы использовать активную точку, но с суффиксными ссылками это становится сложнее.
Может ли кто-нибудь объяснить?