async void Start() { // テキストデータセット string[] sentences = new[] { "私はラーメンが好きです。", "私は餃子が好きです。", "私はラーメンが嫌いです。" }; // 1. まずは単語辞書を作る必要があります Vocabulary vocabulary = await Vocabulary.Create(sentences); // 2. 先程生成した単語辞書を使ったBoWベクトル変換器を作ります BagOfWordsConverter converter = new BagOfWordsConverter(vocabulary); // 3. 好きな文章をBoW変換します int[] bowVec = await converter.ConvertAsync("私はラーメンが嫌いです。"); // BoWベクトル(テキスト中に単語が出現した回数を並べたもの) // 1,1,1,1,0,1,1,0,1 Debug.Log(string.Join(",", bowVec)); // 単語辞書の単語と順番 // 私,は,ラーメン,が,好き,です,。,餃子,嫌い Debug.Log(string.Join(",", vocabulary.Words)); }
private async void Start() { // テキストデータセット string[] sentences = new[] { "私はラーメンが好きです。", "私は餃子が好きです。", "私はラーメンが嫌いです。" }; // Vocabulary.Create もしくは BagOfWordsConverter もくしは MorphAnalyzerClient.AnalyzeAsync を初回時別スレッドで呼ぶ場合 // メインスレッドにてMirphAnalyzerClient.Initを呼んでください (静的コンストラクタで設定ファイルをResources.Loadするため) MorphAnalyzerClient.Init(); int[] bowVec = await Task.Run(async() => { // 自身で形態素解析を行い,その結果を用いてVacabularyを生成することもできます。 Morpheme[] morphemes = await MorphAnalyzerClient.AnalyzeAsync(string.Join("", sentences)); Vocabulary vocabulary = new Vocabulary(morphemes); BagOfWordsConverter converter = new BagOfWordsConverter(vocabulary); return(await converter.ConvertAsync("私はラーメンが嫌いです。")); }); // 1,1,1,1,0,1,1,0,1 Debug.Log(string.Join(",", bowVec)); }
public void BagOfWordsConverterConvertErrorCase() { var cts = new CancellationTokenSource(TimeSpan.FromSeconds(1)); var sentences = new[] { "私はラーメンが好きです。", "私は餃子が好きです。", "私はラーメンが嫌いです。" }; MorphAnalyzerClient.Init(); var vocabulary = Task.Run(async() => await Vocabulary.Create(sentences, cts.Token)).Result; var converter = new BagOfWordsConverter(vocabulary); try { var bowVec = Task.Run(async() => await converter.ConvertAsync(null, cts.Token)).Result; Assert.Fail(); } catch (AggregateException) { Assert.Pass(); } }
public void BagOfWordsConverterTestSimplePasses() { var cts = new CancellationTokenSource(TimeSpan.FromSeconds(1)); var sentences = new[] { "私はラーメンが好きです。", "私は餃子が好きです。", "私はラーメンが嫌いです。" }; MorphAnalyzerClient.Init(); var vocabulary = Task.Run(async() => await Vocabulary.Create(sentences, cts.Token)).Result; var expectedWords = new[] { "私", "は", "ラーメン", "が", "好き", "です", "。", "餃子", "嫌い" }; Assert.AreEqual(vocabulary.Count, 9); CollectionAssert.AreEqual(vocabulary.Words, expectedWords); var converter = new BagOfWordsConverter(vocabulary); var sentence = "私は餃子が好きです。私は。"; var bowVec = Task.Run(async() => await converter.ConvertAsync(sentence, cts.Token)).Result; var expectedVec = new int[] { 2, 2, 0, 1, 1, 1, 2, 1, 0 }; CollectionAssert.AreEqual(bowVec, expectedVec); }
public void BagOfWordsConverterCreateErrorCase() { var cts = new CancellationTokenSource(TimeSpan.FromSeconds(1)); try { var converter = new BagOfWordsConverter(null); Assert.Fail(); } catch (ArgumentException) { Assert.Pass(); } }
private async void Start() { // テキストデータセット string[] sentences = new[] { "私はラーメンが好きです。", "私は餃子が好きです。", "私はラーメンが嫌いです。" }; // 1. 単語辞書を作成 Vocabulary vocabraryu = await Vocabulary.Create(sentences); // 2. 生成した単語辞書を使ったBoWベクトル変換器を作成 _converter = new BagOfWordsConverter(vocabraryu); }