国際セグメンタ API

導入

Intl.Segmenter は、テキスト セグメンテーション用のブラウザーの組み込み API です。

使用する場合は、まず「Intl.Segmenter()」を使用して新しいセグメンタオブジェクトを作成します。

constセグメンター = new Intl.Segmenter(
  「えん」、
  {粒度: '単語' }
);

Intl.Segmenter() は 2 つのパラメータを受け取ります。1 つ目はセグメント化する言語の略語 (上の例は en) で、2 つ目のパラメータは次の 2 つのプロパティを持つ構成オブジェクトです。

  • localeMatcher: 単語分割アルゴリズムを指定します。可能な値は 2 つあります。1 つは特定のアルゴリズム (BCP 47) を使用することを意味する lookup、もう 1 つは特定のアルゴリズム (BCP 47) を使用することを意味する best Fit (デフォルト値) です。オペレーティング システムまたはブラウザ プロセッサの既存のアルゴリズムを可能な限り適用する必要があります。
  • granularity: 単語の分割の粒度を示します。書記素 (文字、これがデフォルト値)、単語 (単語)、文 (文) の 3 つの値があります。

単語セグメンテーション オブジェクトを取得したら、単語セグメンテーションを実行できます。

constセグメンター = new Intl.Segmenter(
  「えん」、
  {粒度: '単語' }
);

constセグメント =segmenter.segment('これには4つの単語があります!');

Array.from(セグメント).map((セグメント) => セグメント.セグメント);
// ['This', ' ', 'has', ' ', 'four', ' ', 'words', '!']

上記の例では、変数 segmenter は英語の単語を分割できる単語セグメンター オブジェクトであり、粒度は単語です。したがって、「これには 4 つの単語があります!」は 4 つの単語、3 つのスペース、1 つの句読点を含む 8 つの部分に分かれています。

単語セグメンタ オブジェクトの segment() メソッドは、実際の単語セグメンテーション メソッドであり、そのパラメータはセグメント化する必要があるテキストであり、戻り値はイテレータ インターフェイスを持つセグメンテーション結果オブジェクトです。 Array.from() は、この単語分割結果オブジェクトを配列に変換するか、[...segments] を使用して書き込むことができます。

以下の例では、単語以外の文字を除外します。

constセグメント =segmenter.segment('これには4つの単語があります!');

Array.from(セグメント)
  .filter((セグメント) => セグメント.isWordLike)
  .map((セグメント) => セグメント.セグメント);
// ['This', 'has', 'four', 'words']

上記の例では、Array.from() は単語分割結果オブジェクトを配列に変換します。変数 segment は配列の各メンバーであり、これもオブジェクトです。オブジェクトの isWordLike プロパティはブール値で、現在の値が実際の単語であるかどうかを示します。オブジェクトの segment プロパティ (上の例では segment.segment) は実際の単語のセグメンテーション結果です。

Intl Segmenter はさまざまな言語をサポートしています。以下は日本語のセグメンテーションの例です。

constセグメンター = new Intl.Segmenter('ja', {粒度: '単語' });
constセグメント =segmenter.segment('これは日本の语のテキストです');

Array.from(セグメント).map((セグメント) => セグメント.セグメント);
// ['これ', 'は', '日本语', 'の', 'テキスト', 'です']

以下はフランス語での例です。

constsegmenterFr = new Intl.Segmenter('fr', {粒度: 'word' });
const string1 = 'Que ma joie demeure';

const iterator1 =segmenterFr.segment(string1)[Symbol.iterator]();

iterator1.next().value.segment // 'キュー'
iterator1.next().value.segment // ' '

静的メソッド

Intl.Segmenter.supportedLocalesOf()

Intl.Segmenter.supportedLocalesOf() は、現在の環境が指定された言語でのセグメンテーションをサポートしているかどうかを検出するために使用される配列を返します。

const locales1 = ['ban', 'id-u-co-pinyin', 'de-ID'];
const options1 = { localeMatcher: 'lookup'、粒度: 'string' };

Intl.Segmenter.supportedLocalesOf(locales1, options1)
// ["id-u-co-pinyin", "de-ID"]

最初のパラメーターは配列であり、2 番目のパラメーターは、コンストラクターの 2 番目のパラメーターと一致する構成オブジェクトであり、省略できます。

上記の例では、検出する必要がある 3 つの言語は、バリ語 (禁止)、インドネシア語 (id-u-co-pinyin)、およびドイツ語 (de-ID) です。結果は、最初の 2 つだけがサポートされており、バリ語はサポートされていないことを示しています。

##インスタンスメソッド

###resolvedOptions()

インスタンスの構築時にパラメータを取得するには、インスタンス オブジェクトの resolvedOptions() メソッドを使用します。

constsegmenter1 = new Intl.Segmenter('fr-FR');
const options1 =segmenter1.resolvedOptions();

options1.locale // "fr-FR"
options1.granularity // "書記素"

上記の例では、resolveOptions() メソッドは、locale プロパティがコンストラクターの最初のパラメーターに対応し、granularity プロパティがコンストラクターの 2 番目のパラメーター オブジェクトの granularity プロパティに対応するオブジェクトを返します。

セグメント()

インスタンス オブジェクトの segment() メソッドが実際のセグメンテーションを実行します。

constsegmenterFr = new Intl.Segmenter('fr', {粒度: 'word' });
const string1 = 'Que ma joie demeure';

const セグメント =segmenterFr.segment(string1);

セグメントを含む(5)
// {セグメント: 'ma'、インデックス: 4、入力: 'Que ma joie demeure'、isWordLike: true}

segment() メソッドの戻り結果は、反復子インターフェイスを備えた単語分割結果オブジェクトであり、処理には 3 つのメソッドがあります。

(1) Array.from() またはスプレッド演算子 (...) を使用して、単語分割結果オブジェクトを配列に変換します。

constsegmenterFr = new Intl.Segmenter('fr', {粒度: 'word' });
const string1 = 'Que ma joie demeure';

const iterator1 =segmenterFr.segment(string1);

Array.from(iterator1).map(segment => {
  if (segment.segment.length > 4) {
    console.log(セグメント.セグメント);
  }
})
// 控えめな

上記の例では、segmenterFr.segment() は、反復子インターフェイスを持つ string1 のセグメンテーション結果オブジェクトを返します。 Array.from() はそれを配列に変換します。配列の各メンバーは単語分割パーティクル オブジェクトであり、このオブジェクトの segment 属性は単語分割結果です。単語セグメンテーション パーティクル オブジェクトの概要については、以下の詳細を参照してください。

(2) for...of ループを使用して単語分割結果オブジェクトを走査します。

constsegmenterFr = new Intl.Segmenter('fr', {粒度: 'word' });
const string1 = 'Que ma joie demeure';

const iterator1 =segmenterFr.segment(string1);

for (iterator1 の const セグメント) {
  if (segment.segment.length > 4) {
    console.log(セグメント.セグメント);
  }
}
// 控えめな

上記の例では、「for...of」はデフォルトで単語分割結果オブジェクトの反復子インターフェイスを呼び出し、各ラウンドの単語分割粒子オブジェクトを取得します。

イテレータインターフェースは「Symbol.iterator」プロパティ上にあるので、実際に実行されるコードは以下のようになります。

constsegmenterFr = new Intl.Segmenter('fr', {粒度: 'word' });
const string1 = 'Que ma joie demeure';

const iterator1 =segmenterFr.segment(string1)[Symbol.iterator]();

for (iterator1 の const セグメント) {
  if (segment.segment.length > 4) {
    console.log(セグメント.セグメント);
  }
}
// 「節度」

for...of ループの各ラウンドは、単語分割パーティクル オブジェクトを取得します。このオブジェクトの segment 属性は、現在の単語分割結果です。詳細については、以下を参照してください。

(3) containing() メソッドを使用して、特定の位置の単語分割粒子オブジェクトを取得します。

constsegmenterFr = new Intl.Segmenter('fr', {粒度: 'word' });
const string1 = 'Que ma joie demeure';

const セグメント =segmenterFr.segment(string1);

セグメントを含む(5)
// {セグメント: 'ma'、インデックス: 4、入力: 'Que ma joie demeure'、isWordLike: true}

containing() メソッドのパラメータは、元の文字列の指定された位置を表す整数です (0 から数えます)。このパラメータを省略した場合、デフォルトは 0 になります。

containing() の戻り値は、この位置の単語分割パーティクル オブジェクトです。 パラメータの位置が元の文字列を超える場合は、unknown が返されます。単語セグメンテーション パーティクル オブジェクトには次のプロパティがあります。

  • セグメント: 指定された位置に対応する単語の分割結果。
  • インデックス: この単語の分割は、元の文字列の先頭にあります (0 から始まります)。
  • 入力: 単語分割の元の文字列。
  • isWordLike: 単語の分割粒度が「word」の場合、この属性は現在の値が実際の単語であるかどうかを示すブール値を返します。単語分割粒度が「単語」でない場合は、「未定義」が返されます。
const input = "Allons-y!";

constセグメンター = new Intl.Segmenter("fr", {粒度: "単語" });
const セグメント = セグメンター.セグメント(入力);

let current = セグメント.containing();
// { インデックス: 0、セグメント: "Allons"、isWordLike: true }

現在 = セグメント.containing(4);
// { インデックス: 0、セグメント: "Allons"、isWordLike: true }

現在 = セグメント.containing(6);
// { インデックス: 6、セグメント: "-"、isWordLike: false }

current = セグメントを含む(現在のインデックス + 現在のセグメントの長さ);
// { インデックス: 7、セグメント: "y"、isWordLike: true }

current = セグメントを含む(現在のインデックス + 現在のセグメントの長さ);
// { インデックス: 8、セグメント: "!"、isWordLike: false }

current = セグメントを含む(現在のインデックス + 現在のセグメントの長さ);
// 未定義

上記の例では、単語分割結果にスペースと句読点が含まれている場合を除き、それ以外の場合は「isWordLike」は「false」を返します。


作者: wangdoc

アドレス: https://wangdoc.com/

ライセンス: クリエイティブ・コモンズ 3.0