UNPKG

ts-content-based-recommender

Version:

A TypeScript-based content-based recommender with multilingual support (Japanese & English). Forked from content-based-recommender.

82 lines 4.89 kB
import { expect } from 'chai'; import { ProcessingPipelineFactory } from '../../src/lib/factories/ProcessingPipelineFactory.js'; import { EnglishTokenizer } from '../../src/lib/tokenizers/EnglishTokenizer.js'; import { JapaneseTokenizer } from '../../src/lib/tokenizers/JapaneseTokenizer.js'; import { EnglishTokenFilter } from '../../src/lib/filters/EnglishTokenFilter.js'; import { JapaneseTokenFilter } from '../../src/lib/filters/JapaneseTokenFilter.js'; describe('ProcessingPipelineFactory', () => { describe('createPipeline', () => { it('英語用パイプラインが正しく作成される', () => { const pipeline = ProcessingPipelineFactory.createPipeline('en'); expect(pipeline.tokenizer).to.be.instanceOf(EnglishTokenizer); expect(pipeline.filter).to.be.instanceOf(EnglishTokenFilter); }); it('日本語用パイプラインが正しく作成される', () => { const pipeline = ProcessingPipelineFactory.createPipeline('ja'); expect(pipeline.tokenizer).to.be.instanceOf(JapaneseTokenizer); expect(pipeline.filter).to.be.instanceOf(JapaneseTokenFilter); }); it('デフォルトは英語パイプラインが作成される', () => { const pipeline = ProcessingPipelineFactory.createPipeline(); expect(pipeline.tokenizer).to.be.instanceOf(EnglishTokenizer); expect(pipeline.filter).to.be.instanceOf(EnglishTokenFilter); }); it('フィルターオプションが正しく渡される', () => { const options = { minTokenLength: 3, removeStopwords: false }; const pipeline = ProcessingPipelineFactory.createPipeline('en', options); expect(pipeline.tokenizer).to.be.instanceOf(EnglishTokenizer); expect(pipeline.filter).to.be.instanceOf(EnglishTokenFilter); // フィルターオプションがフィルターに正しく渡されているかテスト const tokens = ['a', 'cat', 'the', 'programming']; const filtered = pipeline.filter.filter(tokens); // minTokenLength: 3なので'a'は除去される expect(filtered).to.not.include('a'); // removeStopwords: falseなので'the'は残る expect(filtered).to.include('the'); expect(filtered).to.include('cat'); expect(filtered).to.include('programming'); }); }); describe('createTokenizer', () => { it('英語トークナイザーを正しく生成すること', () => { const tokenizer = ProcessingPipelineFactory.createTokenizer('en'); expect(tokenizer).to.be.instanceOf(EnglishTokenizer); }); it('日本語トークナイザーを正しく生成すること', () => { const tokenizer = ProcessingPipelineFactory.createTokenizer('ja'); expect(tokenizer).to.be.instanceOf(JapaneseTokenizer); }); it('サポートされていない言語でエラーが発生すること', () => { expect(() => { // @ts-ignore - テスト用に型チェックを無視 ProcessingPipelineFactory.createTokenizer('fr'); }).to.throw('Unsupported language: fr'); }); it('生成されたトークナイザーが正しく動作すること', async () => { const englishTokenizer = ProcessingPipelineFactory.createTokenizer('en'); const japaneseTokenizer = ProcessingPipelineFactory.createTokenizer('ja'); // 英語トークナイザーのテスト const englishTokens = await englishTokenizer.tokenize('programming language'); expect(englishTokens).to.be.an('array'); expect(englishTokens.length).to.be.greaterThan(0); // 日本語トークナイザーのテスト const japaneseTokens = await japaneseTokenizer.tokenize('プログラミング言語'); expect(japaneseTokens).to.be.an('array'); expect(japaneseTokens.length).to.be.greaterThan(0); }); it('各言語で異なるインスタンスが生成されること', () => { const tokenizer1 = ProcessingPipelineFactory.createTokenizer('en'); const tokenizer2 = ProcessingPipelineFactory.createTokenizer('en'); const japaneseTokenizer = ProcessingPipelineFactory.createTokenizer('ja'); // 同じ言語でも異なるインスタンス expect(tokenizer1).to.not.equal(tokenizer2); // 異なる言語では異なるタイプ expect(tokenizer1).to.not.be.instanceOf(JapaneseTokenizer); expect(japaneseTokenizer).to.not.be.instanceOf(EnglishTokenizer); }); }); }); //# sourceMappingURL=ProcessingPipelineFactory.js.map