Filter
- полезная функция для такого рода вещей
' build a test string
dim a(4), i
for i = 0 to 4
if i mod 2 = 1 then
a(i) = "Subtot " & (i + 1)
else
a(i) = "Something else"
end if
next
WScript.Echo Join(a, vbNewLine)
'reduce the array to a subset that just contains "subtot"
dim b: b = Filter(a, "subtot", true, vbTextCompare)
' use the last item in the array
i = UBound(b)
WScript.Echo b(i)
Выходы
Что-то еще
Подтотон 2
Что-то еще
Подраздел 4
Что-то ещеПодтотон 4
blockquote>
Использовать TermDocs
получить частотность термина для данного документа. Как частота документа, Вы получаете термин документы от IndexReader
, использование условия начисления процентов.
Вы не найдете более быстрый метод, чем TermDocs
не теряя некоторую общность. TermDocs
чтения непосредственно из ".frq" файла в индексном сегменте, где каждая частотность термина перечислена в порядке документа.
Если это "слишком медленно", удостоверяются, что Вы оптимизировали свой индекс для слияния нескольких сегментов в единственный сегмент. Выполните итерации по документам в порядке (пропуски в порядке, но Вы не можете перейти назад и вперед в списке документов эффективно).
Ваш следующий шаг мог бы быть дополнительной обработкой для создания еще более специализированной файловой структуры, которая не учитывает SkipData
. Лично я искал бы лучший алгоритм, чтобы достигнуть моей цели или обеспечить лучшие аппаратные средства — большая память, любой для содержания a RAMDirectory
, или дать ОС для использования в ее собственной системе кэширования файлов.
TermDocs дает TF данного термина в каждом документе, который содержит термин. Можно получить DF путем итерации через каждого <документа, частота> пара и подсчета количества пар, хотя TermEnums должен быть быстрее. IndexReader имеет termDocs (Термин) метод, который возвращает TermDocs для данного Термина и индекса.