import type { NobjcObject } from "objc-js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSDictionary } from "../Foundation/NSDictionary.js";
import type { _NSError } from "../Foundation/NSError.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _NSOrthography } from "../Foundation/NSOrthography.js";
import type { _NSString } from "../Foundation/NSString.js";
import type { NSRange } from "../structs/NSRange.js";
import type { NLLanguage } from "./NLLanguage.js";
import type { NLTag } from "./NLTag.js";
import type { NLTagScheme } from "./NLTagScheme.js";
import type { NLTaggerAssetsResult } from "./NLTaggerAssetsResult.js";
import type { NLTaggerOptions } from "./NLTaggerOptions.js";
import type { NLTokenUnit } from "./NLTokenUnit.js";
export declare class _NLTagger extends _NSObject {
    static alloc(): _NLTagger;
    static new(): _NLTagger;
    init(): _NLTagger;
    /**
     * Not all combinations of scheme and unit are supported, and not all combinations of scheme and language are supported. Clients can use +availableTagSchemesForUnit:language: to determine which ones are supported on the current device.
     */
    static availableTagSchemesForUnit$language$(unit: NLTokenUnit, language: NLLanguage): _NSArray;
    static requestAssetsForLanguage$tagScheme$completionHandler$(language: NLLanguage, tagScheme: NLTagScheme, completionHandler: ((result: NLTaggerAssetsResult, error: _NSError) => void) | null): void;
    /**
     * An instance of NLTagger is created with an array of tag schemes. The tagger will be able to supply tags corresponding to any of the schemes in this array.
     */
    initWithTagSchemes$(tagSchemes: _NSArray): _NLTagger;
    /**
     * Returns the range corresponding to the token for the given unit that contains the given character index.
     */
    tokenRangeAtIndex$unit$(characterIndex: number, unit: NLTokenUnit): NSRange;
    /**
     * Returns the smallest range covering all tokens for the given unit intersecting the given range. If range.length == 0, this is equivalent to tokenRangeAtIndex:unit:.
     */
    tokenRangeForRange$unit$(range: NSRange, unit: NLTokenUnit): NSRange;
    /**
     * The tagger will segment the string as needed into tokens for the given unit, and return those ranges along with a tag for any scheme in its array of tag schemes. The fundamental tagging method on NLTagger is a block iterator, that iterates over all tokens intersecting a given range, supplying tags and ranges. There are additional convenience methods for obtaining information about a single token, or for obtaining information about all tokens intersecting a given range at once. In each case, the index or range passed in must not extend beyond the end of the tagger's string, or the methods will raise an exception. Note that a given instance of NLTagger should not be used from more than one thread simultaneously.
     */
    enumerateTagsInRange$unit$scheme$options$usingBlock$(range: NSRange, unit: NLTokenUnit, scheme: NLTagScheme, options: NLTaggerOptions, block: ((tag: NLTag, tokenRange: NSRange, stop: NobjcObject) => void) | null): void;
    tagAtIndex$unit$scheme$tokenRange$(characterIndex: number, unit: NLTokenUnit, scheme: NLTagScheme, tokenRange: NobjcObject | null): NLTag | null;
    tagsInRange$unit$scheme$options$tokenRanges$(range: NSRange, unit: NLTokenUnit, scheme: NLTagScheme, options: NLTaggerOptions, tokenRanges: NobjcObject | null): _NSArray;
    /**
     * In addition, it is possible to obtain multiple hypotheses for a given tag with associated probability scores. Not all tag schemes will produce more than one hypothesis.
     */
    tagHypothesesAtIndex$unit$scheme$maximumCount$tokenRange$(characterIndex: number, unit: NLTokenUnit, scheme: NLTagScheme, maximumCount: number, tokenRange: NobjcObject | null): _NSDictionary;
    /**
     * If clients know the language or orthography for a given portion of the string, they may supply it to the tagger (after setting the string itself via 'string' @property). Otherwise, the tagger will infer the language from the contents of the text. In each case, the range passed in must not extend beyond the end of the tagger's string, or the methods will raise an exception. When a new string is set, it resets any language or orthography settings.
     */
    setLanguage$range$(language: NLLanguage, range: NSRange): void;
    setOrthography$range$(orthography: _NSOrthography, range: NSRange): void;
    /**
     * In addition to the built-in models for predefined tag schemes, clients can set custom models that they have trained, either for existing tag schemes or for custom tag schemes. If multiple models are specified, they will be matched to text based on the language that they specify.
     */
    setModels$forTagScheme$(models: _NSArray, tagScheme: NLTagScheme): void;
    modelsForTagScheme$(tagScheme: NLTagScheme): _NSArray;
    /**
     * In addition to the model for a given tag scheme, clients can add a custom gazetteer that will override the tags for that scheme, for terms that are included in the gazetteer. If multiple gazetteers are specified, they will be matched to text based on the language that they specify.
     */
    setGazetteers$forTagScheme$(gazetteers: _NSArray, tagScheme: NLTagScheme): void;
    gazetteersForTagScheme$(tagScheme: NLTagScheme): _NSArray;
    tagSchemes(): _NSArray;
    /**
     * An NLTagger instance must be assigned a string to tag, and clients can then obtain tags and ranges for tokens in that string appropriate to a given tag scheme and unit.
     */
    string(): _NSString | null;
    setString$(value: _NSString | null): void;
    /**
     * Returns the top identified language (if any) for the entire string. Convenience for tagAtIndex: with NLTagSchemeLanguage and NLTaggerUnitDocument.
     */
    dominantLanguage(): NLLanguage | null;
}
