2017-09-17 21 views
1

私のボットがドイツ語の言語をサポートします。ですから、英語モデルと同じ意図とエンティティで、ドイツ語用の別個のモデルを作成しました。ユーザー言語に基づいて実行時に特定のモデルを選択する方法どうやら、ユーザーに言語設定を選択させ、Bot Databagに保存してから、それに基づいて "en"または "de"と設定することができます。しかし、どのようにランタイムにドイツ語/英語モデルを選択できますか?私はドイツ語と英語の両方のモデルキーを持つLuisモデルを属性として使用しています。 P.P.私は他の関連記事を読んでおり、彼らは異なる意図と実体を持つ約2つのモデルです。私はロケールの異なる2つのモデルを持っています。複数のLuis langugeモデルをBot Framework(C#SDK)の単一のLuis Dialogに統合する方法

[LuisModel("LuisID", "English Model-Key")] 
[LuisModel("LuisID", "German Model-Key")] 
[Serializable] 
public class LUISDialogClass : LuisDialog<object> 
{ 
    public LUISDialogClass(params ILuisService[] services) : base(services) 
     { 

     } 
    [LuisIntent("A")] 
    public async Task A(IDialogContext context, LuisResult result) 
    { 

    } 
    [LuisIntent("B")] 
    public async Task B(IDialogContext context, LuisResult result) 
    { 

    } 
} 
+0

をが、各ルイス・アプリの発話が異なる言語の右にある次のよう

[Serializable] [LuisModel("key_US", "programmatic_key_US")] public class LUISDialogClassUs : LUISDialogClass { } 

D)あなたのコードでそれを使用しますか?だから、それは自動的に処理されるべきですか、それはあなたが見ているものではありませんか? LUISモデルは特定の意図を返します。そしてそれはスコアリングの問題になります。英語での発話はドイツ語よりもスコアが高くなります –

+0

@EzequielJadib、はいutterencesは異なる言語です。だから、Luisのダイアログは両方のアプリにリクエストを送信して応答を得て、そのうちの1つは無関係に課金されますか?私は、ロケールに基づいて1つのアプリケーションだけにリクエストを送信したいと思います。また、私は自分のコードで各言語の複数のルイスダイアログを追加したくありません。 –

+0

@EhsanUlHaqあなたはすべてのロジックが存在する抽象スーパークラスを作成し、各サブクラスはそれを拡張し、Luis Annotationに目的のLuis credを追加します。今忙しい。しかし、私は後で答えを完成させます。 – rinormaloku

答えて

2

2つの解決策があります

  1. コントロール残りはLUISに自分自身を呼び出します。
  2. 2つのダイアログLUISDialogClassDeとLUISDialogClassUsを作成します。 a)は、抽象クラス内のすべてのロジックを実装

    [Serializable] 
    public abstract class LUISDialogClass : LuisDialog<object> 
    { 
        public LUISDialogClass(params ILuisService[] services) : base(services) 
        { 
    
        } 
    
        [LuisIntent("A")] 
        public async Task A(IDialogContext context, LuisResult result) 
        { 
    
        } 
    
        [LuisIntent("B")] 
        public async Task B(IDialogContext context, LuisResult result) 
        { 
    
        } 
    } 
    

    b)は唯一と抽象クラスを拡張する具象クラスを作成します。第二の溶液をエラボレーション

ルイスの資格情報を提供する目的。

[Serializable] 
[LuisModel("key_DE", "programmatic_key_DE")] 
public class LUISDialogClassDe : LUISDialogClass 
{ 
} 

c)として、多くの場合、あなたが必要と繰り返します。

var state = activity.GetStateClient(); 
var userdata = state.BotState.GetUserData(activity.ChannelId, activity.From.Id); 
var cultureInfo = userdata.GetProperty<CultureInfo>("lang"); 

if (cultureInfo.Equals(new CultureInfo("de-DE"))) 
{ 
    await Conversation.SendAsync(activity,() => new LUISDialogClassDe()); 
} 
else 
{ 
    await Conversation.SendAsync(activity,() => new LUISDialogClassUs()); 
} 
+0

@rinomaloku、ありがとうalot :) –

関連する問題