npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@obot-ai/completion-generator

v1.1.4

Published

A completion generator for ObotAI InputCompletion.

Downloads

98

Readme

CI

利用方法

Obot-Completion-Generatorに GeneratorFetcher の二つのクラスがあり、 Fetcher は ObotAI InputCompletion サーバーなどから候補データ集を取得するクラスで、 Generator は予めデータを設定し、入力テキストを渡して補完データを取得するクラスです。

import { Generator, Fetcher, KeywordForwardMatcher } from '@obot-ai/completion-generator'

(async () => {
  const API_KEY = "your-api-key"

  /* Fetcher Constructor

    Args:
      - properties: object
        - apiKey: string: ObotAIが発行したAPIキーなど
        - apiKeyHeaderName?: string: キーをヘッダーに設定する際に使うキー名
        - getEndpoint?: (locale: string) => string: データ取得先を上書きするためのメソッド
          - Args: locale: 言語コード
          - Return: 有効なURL
        - handleResponse?: (data: any) => LocaleDataItem[]: 取得したJSONデータの処理を上書きするためのメソッド
          - Args: data: 任意のJSONレスポンス
          - Return: 有効な言語候補データ集
  */
  const fetcher = new Fetcher({
    apiKey: API_KEY,
    apiKeyHeaderName: "X-Secret-Key",
    getEndpoint: (locale) => {
      return `https://example.com/input_completion/${locale}/`
    },
    handleResponse: (data) => {
      return data.completions
    }
  })

  /* Generator Constructor

    Matchers:
      - ForwardMatcher:
        - 入力文全文を前方一致でマッチする
        - キーワードで判定された部分以外も比較対象テキストに含まれる必要がある
      - KeywordMatcher:
        - キーワードベースの正規表現を用いてマッチする
        - キーワードの全文マッチが優先、マッチがなければ部分マッチを行う
      - ConcatMatcher:
        - 複数のMatcherのマッチ結果を結合して出力する
        - addMatcherByClass, addMatcherで結合対象のMatcherを追加しないとマッチ成功結果が得られない
      - KeywordForwardMatcher:
        - KeywordMatcher, ForwardMatcherをConcatMatcherで結合したクラス
      - DefaultMatcher: ForwardMatcher
    Args:
      - properties: object
        - matcher?: Matcher?:
          - 指定すると他のオプション設定は無視される、していなければ他のオプション設定でDefaultMatcherを構成して使う
        - keywordSeparator?: string: キーワードの分割文字
        - minKeywordLength?: number: キーワードとして認定する最短長さ
        - strictMatchLocales?: string[]: 単語ごとにキーワードをマッチする言語(指定していない言語コードは文字ごとにマッチを行う)
        - comparator?: (itemA: LocaleDataItem, itemB: LocaleDataItem, input: string, locale: string) => number: ソート用メソッド
          - Args:
            - itemA, itemB: LocaleDataItem({text: string, keywords: string}): object: 比較対象
            - input: string: 入力テキスト
            - locale: string: 言語コード
          - Return: 数字で示した比較結果。0: = , >0: >, <0: <
        - filter?: (localeData: LocaleDataItem[], input: string, locale: string) => MatchedResultData[]: 既存のマッチルールを上書きするメソッド
          - KeywordMatcherでのみ有効。廃止予定、カスタマイズしたMatcherの指定を推奨
          - Args:
            - localeData: LocaleDataItem({text: string, keywords: string})[]: 該当言語の候補データ集
            - input: string: 入力テキスト
            - locale: string: 言語コード
          - Return: MachtedResultData[]
            - MatchedResultData: object
              - text: string: 補完テキスト本文
              - keywords: string: キーワード
              - machtedKeywords?: object[]: 比較テキストにあるキーワードとして認定された部分
                - text: string: キーワード本文
                - startAt: int: 位置情報
                - endAt: int: 位置情報
        - scorer?: (data: MatchedResultData, input: string, locale: string) => number: マッチ結果に含まれる情報を用いて点数を付けるメソッド
          - 含まれる情報
            - ForwardMatcherに通した場合、
              - machedKeywords: (text: string, startAt: number, endAt: number)[]: キーワードと判定された部分の情報
              - noKeywordMatchedLength: number: キーワードと判定されていないが、比較対象質問に含まれる部分の総長さ
            - KeywordMatcherに通した場合、
              - machedKeywords: (text: string, startAt: number, endAt: number)[]: キーワードと判定された部分の情報
          - デフォルト: 
            - + matchedKeywords.length * 10
            - matchedKeywords.forEach
              - if kw.text in data.text: + kw.text.length * 1
            - + noKeywordMatchedLength * 1
        - sort: (rsA: MatchedResultData, rsB: MatchedResultData, input: string, locale: string) => number: マッチ結果をソートするメソッド
          - デフォルト:
            - マッチ結果に付与されているスコアでソートする

  */

  const matcher = new KeywordForwardMatcher({
    keywordSeparator: ",",
    minKeywordLength: 2,
    strictMatchLocales: ["en"],
    comparator: (itemA, itemB, input, locale) => {
      return itemA.text.localeCompare(itemB.text)
    },
    scorer: (data, input, locale) => {
      let score = 0
      if (Array.isArray(data.matchedKeywords)) {
        for (const kw of data.matchedKeywords) {
          score += 10 * kw.text.length
        }
      }
      if (data.noKeywordMatchedLength) {
        score += 0.1 * data.noKeywordMatchedLength
      }
      return score
    },
    sort: (rsA, rsB, input, locale) => {
      return 0
    }
  })

  const generator = new Generator({
    matcher: matcher
  })

  /* Fetcher.fetch(locale)
  
    Args:
      - locale: string: 言語コード
    
    Return: Promise<LocaleDataItem[]>
      - LocaleDataItem
        - text: 補完テキスト本文
        - keywords: キーワード
  */
  const jaData = await fetcher.fetch("ja")
  
  /* Generator.loadData(locale, localeData)

    Args: 
      - locale: string: 言語コード
      - localeData: {text: string, keywords: string}[]: 言語データ
  */
  generator.loadData("ja", jaData)
  
  /* Generator.generateCompletions(input, locale)

    Args:
      - input: string: 比較テキスト
      - locale: string: 言語コード

    Return: MachtedResultData[]
      - MatchedResultData: object
        - text: string: 補完テキスト本文
        - keywords: string: キーワード
        - machtedKeywords?: object[]: 比較テキストにあるキーワードとして認定された部分
          - text: string: キーワード本文
          - startAt: int: 位置情報
          - endAt: int: 位置情報
  */
  const completions = generator.generateCompletions("Test", "ja")
  console.log(completions)
})()

IE11サポート

completion-generatorはデフォルトではIE11にサポートしておりません。IE11で利用したい場合は、 completion-generator.es5.js を指定してインポートする必要があります。

import { Generator, Fetcher } from '@obot-ai/completion-generator/dist/completion-generator.es5'

(以下略)