搜尋套件、儲存庫與 APP 分類

套件詳情v2.0.0

autotrie

一個基於優化 Trie 实現的 Dart/Flutter 自動補全引擎。

AndroidiOSmacOSWindowsLinux
近 30 天下載
3.4萬
喜歡數
42
Pub 分數
150

安裝套件

flutter pub add autotrie

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

AutoTrie 是一個為 Dart 和 Flutter 應用程式建構的高效率自動補全引擎,基於優化的 Trie 數據結構。它有效支援快速的前置搜尋,非常適合即時建議功能,如文字輸入、搜尋欄位與程式碼編輯器。此套件設計為低記憶體使用與快速查詢,確保即使在大型資料集中也能提供流暢的使用者體驗。AutoTrie 具備平台無關性,支援 Android、iOS、macOS、Windows 與 Linux。其輕量級特性與直覺的 API 讓整合至既有專案變得簡單。

適用情境

  • 即時搜尋建議
  • 程式碼自動補完功能
  • 自動完成文字欄位
  • 動態下拉選單
  • 輸入預測

主要特色

  • 優化的 Trie 实現
  • 快速前綴匹配
  • 低記憶體佔用
  • 跨平台支援
  • 簡單的 API 結合

適合對象

  • 開發自動補全UI的開發者
  • 需要快速文字過濾的應用程式
  • 搜尋密集型應用
  • 教育或編碼工具
  • 高性能輸入組件

使用建議

  • 最適合靜態或更新頻率較低的資料集
  • 可能需要對動態數據進行預處理
  • 不適合全文搜尋
  • 僅限前綴匹配
  • 記憶體使用量隨著資料集大小而變化

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

AutoTrie

A versatile library which solves autocompletion in Dart/Flutter. It is based around a space-efficient implementation of Trie which uses variable-length lists. With this, serving auto-suggestions is both fast and no-hassle. Suggestions are also sorted by how often they've been entered and subsorted by recency of entry, for search-engine-like results.

Read more about Trie here.

A Brief Note

It takes time, effort, and mental power to keep this package updated, useful, and improving. If you used or are using the package, I'd appreciate it if you could spare a few dollars to help me continue development.

PayPal

Usage

A usage example is provided below. Check the API Reference for detailed docs:

import 'package:autotrie/autotrie.dart';

void main() {
  // You are allowed to initialize with a starting databank by passing a `bank` parameter.
  var engine = AutoComplete(engine: SortEngine.configMulti(Duration(seconds: 1), 15, 0.5, 0.5));

  engine.enter('more'); // Enter more thrice.
  engine.enter('more');
  engine.enter('more');

  engine.enter('moody'); // Enter moody twice.
  engine.enter('moody');

  engine.enter('morose'); // Enter scattered words (with mo).
  engine.enter('morty');
  engine.enter('moment');
  engine.enter('momentum');

  engine.enter('sorose'); // Enter scattered words (without mo).
  engine.enter('sorty');

  engine.delete('morose'); // Delete morose.

  // Check if morose is deleted.
  print('Morose deletion check: ${!engine.contains('morose')}');

  // Check if engine is empty.
  print('Engine emptiness check: ${engine.isEmpty}');
 
  // They've been ranked by frequency and recency. Since they're all so similar
  // in recency, frequency takes priority.
  print("'mo' suggestions: ${engine.suggest('mo')}");
  // Result: [more, moody, momentum, moment, morty]

  // Get all entries.
  // They've *not* been sorted.
  // Use `engine.suggest('')` to get all entries sorted` 
  print('All entries: ${engine.allEntries}');
  // Result: [more, moody, sorty, sorose, momentum, moment, morty]
}

Sorting

The AutoComplete constructor takes a SortEngine, which it uses to sort the result of the autocompletion operation. There are a few different modes it can operate in:

  • SortEngine.entriesOnly() -> AutoComplete results are only sorted by number of entries in the engine (High to Low)
  • SortEngine.msOnly() -> AutoComplete results are only sorted by how much time has passed since their last entry (Low to High)
  • SortEngine.simpleMulti() ->
    • Sorted using two logistic curves, one for ms and one for entries
      • The ms curve is set to use 3 years (a LOT) as the upper end of how far back entries could have been entered
      • The entries curve is set to use 30 entries as the max amount of entries
      • These values are highly arbitrary and not likely to fit your project; this mode is not recommended unless you are just playing around.
    • Takes two weights (one for recency and one for entries) which can be used to balance how heavily each factor should affect the final sorting.
  • SortEngine.configMulti() ->
    • Sorted using two logistic curves, one for ms and one for entries
      • The ms curve is balanced using a parameter (a Duration) for the max time since entry in this engine.
      • The entries curve is balanced using a parameter (an int) for the max amount of entries in this engine.
      • If you know approximately how old and how big this AutoComplete engine is, it is highly recommended that you use this mode.
    • Takes two weights (one for recency and one for entries) which can be used to balance how heavily each factor should affect the final sorting.

Basic File Persistence

AutoComplete is natively capable of writing itself to and reading itself from a file. To do this, persist to a file using the persist method (it takes a File object): await engine.persist(myFile);

Then you can rebuild using AutoComplete.fromFile (it takes a File along with the mandatory SortEngine): var engine = AutoComplete.fromFile(file: myFile, engine: SortEngine.entriesOnly());

This persistence will preserve all the metadata (last insert, number of entries) in the table as well as the core data (the Strings themselves).

Hive Integration

  • Hive is a speedy, local, and key-value database for Dart/Flutter. Go check it out if you haven't already!
  • Hive integration is now available with autotrie:
    • Our way of integration uses extension methods.
    • Import Hive and AutoTrie, and create a normal Hive box using Hive.openBox('nameHere').
    • You can then call searchKeys(String prefix) and searchValues(String prefix) on that box to get auto-suggestions.
    • There is no sorting options: only entry-level sorting is available.

Features and bugs

Please file feature requests and bugs at the issue tracker.


This library and its contents are subject to the terms of the Mozilla Public License, v. 2.0.
© 2020 Aditya Kishore

所屬分類

依賴

依賴清單 1 項

原始碼儲存庫

使用此套件的專案