Если бы я писал часть программного обеспечения, которое пыталось предсказать, какое слово пользователь собирается ввести следующий, используя два предыдущих слова, которые пользователь набрал, я бы создать две таблицы.Хранение n-граммов в базе данных в <n числе таблиц
Как так:
== 1-gram table ==
Token | NextWord | Frequency
------+----------+-----------
"I" | "like" | 15
"I" | "hate" | 20
== 2-gram table ==
Token | NextWord | Frequency
---------+------------+-----------
"I like" | "apples" | 8
"I like" | "tomatoes" | 12
"I hate" | "tomatoes" | 20
"I hate" | "apples" | 2
После этого примера implimentation типов пользователей «Я» и программное обеспечение, используя вышеуказанную базу данных, предсказывает, что следующее слово пользователя будет набираться «ненавидеть». Если пользователь вводит «ненависть», тогда программное обеспечение предсказывает, что следующее слово, которое пользователь набирает, это «помидоры».
Однако для этой импликации потребуется таблица для каждого дополнительного n-грамма, который я хочу принять во внимание. Если бы я решил, что я должен учитывать 5 или 6 предыдущих слов при прогнозировании следующего слова, тогда мне понадобятся 5-6 таблиц и экспоненциальное увеличение пространства на n-грамм.
Что было бы лучшим способом представить это только в одной или двух таблицах, у которых нет верхнего предела количества n-граммов, которые я могу поддерживать?
+1 для хэш. Если вы используете большой корпус или длинные строки, использование хеша будет * существенным * для адекватной производительности. Увы, все равно нужно сохранить исходную строку из-за неизбежных столкновений, увы. – egrunin