diff options
Diffstat (limited to 'src/tools/analysis/core.ts')
| -rw-r--r-- | src/tools/analysis/core.ts | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/tools/analysis/core.ts b/src/tools/analysis/core.ts new file mode 100644 index 0000000000..20e5fa6c51 --- /dev/null +++ b/src/tools/analysis/core.ts @@ -0,0 +1,49 @@ +const bayes = require('./naive-bayes.js'); + +const MeCab = require('./mecab'); +import Post from '../../api/models/post'; + +/** + * 投稿を学習したり与えられた投稿のカテゴリを予測します + */ +export default class Categorizer { + private classifier: any; + private mecab: any; + + constructor() { + this.mecab = new MeCab(); + + // BIND ----------------------------------- + this.tokenizer = this.tokenizer.bind(this); + } + + private tokenizer(text: string) { + const tokens = this.mecab.parseSync(text) + // 名詞だけに制限 + .filter(token => token[1] === '名詞') + // 取り出し + .map(token => token[0]); + + return tokens; + } + + public async init() { + this.classifier = bayes({ + tokenizer: this.tokenizer + }); + + // 訓練データ取得 + const verifiedPosts = await Post.find({ + is_category_verified: true + }); + + // 学習 + verifiedPosts.forEach(post => { + this.classifier.learn(post.text, post.category); + }); + } + + public async predict(text) { + return this.classifier.categorize(text); + } +} |