Я хочу, чтобы хранить большое количество ngrams на диске таким образом, что я могу выполнить следующие запросы на него:Схема базы данных для хранения ngrams с многократным поиска элемента
- Fetch все ngrams
- Fetch все ngrams определенного размера
- Fetch все ngrams, которые содержат все эти данные элементы в любом положении (подмножества)
- извлечь все ngrams определенного размера, которые имеют эти данные элементы в этих положениях (шаблон)
Примером для третьего пункта будут все ngrams, содержащие «a», «b» и «c», что приводит к такимграммам, как (a, b, c), (b, c, a), (x, a, z, b, c) и т. д.
Примером для четвертого пункта будут все ngrams, следующие за шаблоном (a, *, *, b), что приводит к появлению таких nграмм, как (a, x, y, b), (a, a, a, b) и т. д.
В настоящее время я храню их в таблице базы данных с отдельным полем для каждого элемента ngram, но это не кажется лучшим вариант для поиска nграмм, содержащих заданные элементы в любом порядке и в позиции. Для того, чтобы найти 3grams, содержащих «а», «б» и «в» Я использую следующий SQL «где» раздел:
WHERE
(ele0 = 'a' OR ele1 = 'a' OR ele2 = 'a') AND
(ele0 = 'b' OR ele1 = 'b' OR ele2 = 'b') AND
(ele0 = 'c' OR ele1 = 'c' OR ele2 = 'c')
Это не масштабироваться до хорошо на всех. Есть ли лучший способ структурировать данные и запросить его?
Сколько стоит «большое количество»? Существует ли максимальная длина nграмм? –
Я бы хотел, чтобы это было универсальным, чтобы позволить эксперименты. Количество ngrams может быть в миллионах, и длина может быть до 20, возможно. – mtanti
Элементы являются символами или (индексы в) словами? – wildplasser