HarmonyOSラーニングパスの開発~AI機能開発(品詞タグ付け)

品詞タグ付けの概要

情報技術の発展に伴い、ネットワーク内の情報量が幾何級数的に増加し、徐々に今日の社会の主要な特徴となっています。テキストから重要な情報を正確に抽出することは検索エンジンなどの技術基盤であり、特に単語の分割はテキスト情報抽出の第一歩として重要です。

自然言語処理分野の基礎研究として、単語分割はさまざまなテキスト処理関連のアプリケーションを生み出してきました。

品詞タグ付けには、単語の分割と、単語分割結果内の各単語の正しい品詞のマーク付け (各単語を名詞、動詞、形容詞、またはその他の品詞としてマークする) が含まれます。開発者は単語の分割の粒度をカスタマイズできます。

動作の仕組み

品詞タグ付けは、自動テキスト分割と品詞のインターフェイスを提供します。入力テキストの一部は、品詞タグ付けインターフェイスを通じて自動的に分割され、単語分割結果の各単語に対して正しい品詞がマークされます。品詞タグ付けにより、さまざまな単語分割の粒度が提供され、開発者は必要に応じて単語分割の粒度をカスタマイズできます。

制約と制限

  • 現在、中国語のコンテキストのみがサポートされています。
  • 品詞タグ付けテキストは 500 文字に制限されています。文字数が超過すると、パラメータ エラーが返されます。テキストは UTF-8 形式である必要があります。形式が間違っている場合、エラーは報告されません。ただし、解析結果に誤差が生じます。
  • エンジンは複数のユーザーによる同時アクセスをサポートしますが、同じユーザーによる同じ機能の同時呼び出しはサポートしません。同じ機能が同じプロセスによって同時に複数回呼び出された場合は、システムビジーエラーが返されます。異なるプロセスが同じ機能を呼び出した場合、同時にビジネスを処理できるのは 1 つのプロセスのみであり、他のプロセスは処理を開始します。列。

POSタグ開発

シーン紹介

  • 検索エンジンの開発に応用されています。検索エンジンにとって、何百億もの Web ページからすべての結果を見つけることは無意味であり、最も関連性の高い結果を上位に表示することが重要であり、関連性ランキングとも呼ばれます。単語の分割が正確かどうかは、検索結果の関連性のランキングに直接影響します。
  • 意味解析関連ソフトウェアの開発に応用されます。意味解析では、単語分割によりテキストの正しい意味を理解し、品詞タグ付けにより品詞を取得し、単語が名詞、動詞、形容詞などのいずれであるかを正確に判断することで、意味解析が容易になります。拡大するために。

インターフェースの説明

品詞タグ付けは getWordPos() インターフェイスを提供します。これにより、セグメンテーション粒度に従って、単語セグメンテーション結果内の各単語の正しい品詞をマークできます。

メインインターフェース

インターフェース名

説明

ResponseResult getWordPos(String requestData, int requestType)

品詞のタグ付けは同期的に行われます。

ResponseResult getWordPos(final String requestData、final int requestType、final OnResultListener<ResponseResult> リスナー)

品詞のタグ付けは非同期的に行われます。

void init(Context コンテキスト、OnResultListener<Integer> リスナー、boolean isLoadModel)

NLU サービスを初期化します。NLU などの関数インターフェイスを呼び出す前に、まずこのインターフェイスを呼び出し、次に OnResultListener の onResult(T) メソッドでコールバック結果を取得した後に NLU 関数インターフェイスを呼び出す必要があります。開発者は、NLU 関数インターフェイスの呼び出しプロセスと結果を待つために、リスナー パラメーターをコールバックとして渡します。

void destroy(コンテキストコンテキスト)

すべての NLU タスクをキャンセルし、NLU エンジン サービスを破棄します。このメソッドを呼び出した後は、NLU サービスは使用できなくなります。NLU サービスを再利用する必要がある場合は、init(Context, OnResultListener<Integer>, boolean)} を再度呼び出して NLU サービスを初期化する必要があります。

インターフェース入力値の説明

  • requestType はリクエストのタイプを示し、NluRequestType クラスによって次のように定義されます。

    タイプ

    説明する

    静的整数

    REQUEST_TYPE_LOCAL = 0 ローカルリクエスト

  • requestData は、次の表に示すように、入力テキスト情報を JSON 形式で表します。

    パラメータ名

    必要ですか?

    タイプ

    説明する

    文章

    チュア

    分析されるテキストは UTF-8 でエンコードされ、500 文字に制限されます。

    タイプ

    間違い

    長さ

    単語の分割の粒度。デフォルトは 0 です。

    • 0: 基本的な単語、より細かい粒度。例: 「ワイルド・スピードを観たい」を、「/観たい/観たい/スピード/ワイルド・スピード」に分割します。
    • 1: 基本的な単語に基づいて、エンティティを結合します。たとえば、「ワイルド・スピードを観るために江寧万達広場に行きます」は、「私/行きたい/行きます/江寧万達広場/見る/スピード/そして/情熱」に分割されます。

      マージ可能なエンティティを持たないテキスト情報の場合、その単語分割効果はタイプ 0 の効果と同じです。例:「明日の午後3時に一緒に映画を見る」は、「明日/午後/3時/一緒に/見る/映画」に分かれます。

    • 9223372036854775807 (2の63乗マイナス1): タイプ1に基づいて、エンティティの時間、場所などの全体構造をマージし(記号が区切られている場合はマージしません)、いくつかの共通語句をマージします。

      例:「形容詞 + 」、「1 文字の動詞 + 1 文字の名詞」など、文の構成要素を簡略化します。上記の原則に従えば、「明日午後 3 時から午後 5 時まで江寧瑞都金義映画館で映画を観ます」は、「明日午後 3 時/~/午後 5 時/私は/で」に分割されます。 /江寧瑞都金儀シネマ/鑑賞/映画』。

    コールパッケージ

    間違い

    発信者の名前。

    コールタイプ

    間違い

    整数

    発信者のタイプ:

    • 0: 通常のアプリケーション (デフォルト)
    • 1: クイックアプリ

    呼び出しバージョン

    間違い

    呼び出し元のバージョン番号。

    呼び出し状態

    間違い

    整数

    呼び出し元の状態:

    • -1: 不明 (デフォルト)
    • 0: 前景
    • 1: 背景

    現在 NLU でサポートされているエンティティ カテゴリ:

    エンティティクラス

    述べる

    映画

    辞書に依存し、実際の使用例を必要とし、変更しないでください。

    テレビドラマ

    辞書に依存し、実際の使用例を必要とし、変更しないでください。

    バラエティーショー

    辞書に依存し、実際の使用例を必要とし、変更しないでください。

    アニメーション

    辞書に依存し、実際の使用例を必要とし、変更しないでください。

    列車番号

    実際の使用例が必要であり、変更は必要ありません。

    フライトナンバー

    実際の使用例が必要であり、変更は必要ありません。

    チーム

    辞書を信頼し、NBA、CBA、プレミア リーグ、ラ・リーガ、ブンデスリーガ、セリエ A、リーグ 1、中国スーパー リーグのチーム識別をサポートし、実際の使用例を必要とし、変更しないでください。

    人の名前

    実際の使用例が必要であり、変更は必要ありません。

    追跡番号

    実際の使用例が必要であり、変更は必要ありません。

    電話番号

    実際の使用例が必要であり、変更は必要ありません。

    URL

    実際の使用例が必要であり、変更は必要ありません。

    郵便

    実際の使用例が必要であり、変更は必要ありません。

    リーグ

    NBA、CBA、プレミア リーグ、ラ・リーガ、ブンデスリーガ、セリエ A、リーグ 1、中国スーパー リーグでは、実際の使用例が必要です。変更しないでください。

    時間

    実際の使用例が必要であり、変更は必要ありません。

    場所

    ホテル、レストラン、景勝地、学校、道路、州、市、郡、地区、町などが含まれており、部分的に辞書に依存しています。

    検証コード

    この使用例は実際のものなので、変更しないでください。

インターフェースの戻り値の説明

戻り値 ResponseResult の responseResult は、品詞タグ付けの結果を反映する JSON 文字列です。

パラメータ名

必要ですか?

値の型

説明する

コード

はい

整数

品詞タグ付けの結果コード。値には次のものが含まれます。
  • 0: 成功
  • 1: システムは初期化中です
  • 2:パラメータエラー
  • 3: システムがビジー状態です
  • 4: システム例外
  • 5: タスクがタイムアウトしました
  • 6: その他のエラー

メッセージ

はい

エラーメッセージ。

位置

いいえ

JSON配列

セグメント化された単語配列。配列内の型は JSONObject です。

+単語

いいえ

細分化された単語。

+タグ

いいえ

词性,type为1或9223372036854775807时,人名实体的词性为nr,时间实体的词为t,地点实体的词性为ns,其他实体统一为ne。具体词性类型可参表1

表1 词性说明

词性

说明

词性

说明

词性

说明

n

名词

rr

人称代词

u

助词

nr

人名

rz

指示代词

uzhe

助词“着”

ns

地名

rzt

时间指示代词

ule

助词“了”“喽”

ne

只在实体合并时使用,除人名、时间、地点之前,其他实体统一返回ne

rzs

处所指示代词

uguo

助词“过”

t

时间词

rzv

谓词性指示代词

ude1

助词“的”

tg

时间词性语素

ry

疑问代词

ude2

助词“地”

s

处所词

ryt

时间疑问代词

ude3

助词”得”

f

方位词

rys

处所疑问代词

usuo

助词”所“

v

动词

ryv

谓词性疑问代词

udeng

助词“等”“等等”

vd

副动词

rg

代词性语素

uyy

助词”一样”“一般”“似的”“般”

vn

名动词

m

数词

udh

助词“的话”

vshi

动词“是”

mq

数量词

uls

助词“来讲”“来说”“而言”“说来”

vyou

动词“有”

q

量词

uzhi

助词“之“

vf

趋向动词

qv

动量词

ulian

助词“连”

a

形容词

qt

时量词

e

叹词

ad

副形词

d

副词

y

语气词

an

名形词

p

介词

o

拟声词

b

区别词

pba

介词“把”

h

前缀

bl

区别词性惯用语

pbei

介词“被”

k

后缀

z

状态词

c

连词

x

字符串

r

代词

cc

并列连词

idiom

成语

w

标点符号

-

-

-

-

开发步骤

在使用词性标注的接口时,将实现词性标注的相关类添加至工程。

import ohos.ai.nlu.NluRequestType;
import ohos.ai.nlu.NluClient;
import ohos.ai.nlu.OnResultListener;
import ohos.ai.nlu.ResponseResult;

使用NluClient静态类进行初始化,通过异步方式获取服务的连接。

  • context:应用上下文信息,应为ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的实例或子类实例。
  • listener:初始化结果的回调,可以传null。
  • isLoadModel:是否加载模型,如果传true,则在初始化时加载模型;如果传false,则在初始化时不加载模型。
NluClient.getInstance().init(context, new OnResultListener<Integer>(){
        @Override
        public void onResult(Integer result){
         // 初始化成功回调,在服务初始化成功调用该函数
        }
}, true);

调用词性标注的接口。

采用同步方式进行词性标注:

String requestData = "{\"text\":\"我要看速度与激情\",\"type\":0}";
ResponseResult responseResult = NluClient.getInstance().getWordPos(requestData, NluRequestType.REQUEST_TYPE_LOCAL);

采用异步方式进行词性标注:

NluClient.getInstance().getWordPos(requestData,
            NluRequestType.REQUEST_TYPE_LOCAL, new OnResultListener<ResponseResult>() {
                @Override
                public void onResult(ResponseResult result) {
                    //异步返回处理
                }
            });

销毁NLU服务。

NluClient.getInstance().destroy(context);

おすすめ

転載: blog.csdn.net/weixin_47094733/article/details/131402969