Google Cloud Platform

Node.js+GAE: 日本語自然文を形態素解析してネガポジ判定をする

こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。

今回は、これまた需要がないであろうというプログラミングネタです。
日本語文章をネガポジ判定するプログラムをGoogle AppEngineスタンダード環境で動かすという小技です。

世の中は便利なもので、Node.jsで形態素解析するライブラリも、ネガポジ判定するライブラリも存在するので、これらを使います。

形態素解析: kuromojin
ネガポジ判定: negaposi-analyzer-ja

いずれもnpmでインストール出来ます。
これらのライブラリを使うことで、東京工業大学 奥村・高村研究室が公開している単語感情極性対応表に記載されてる単語別のスコアを使ったネガポジ判定が可能になります。
今回はWebフォームから入力された文字列を、この仕組みでネガポジ判定するWebアプリを作ります。

バックエンド部分

まずは実際に処理を行うバックエンドをNode.jsで作ります。
フォームからPOSTされて来たJSONを受け取って、negaposi-analyzer-jaの結果をこれまたJSONで戻すだけです。
GETに対してはダミーのレスポンスを返してます。

const express = require('express');
const bodyParser = require('body-parser');
const kuromojin = require('kuromojin');
const analyze = require('negaposi-analyzer-ja');
const app = express();

app.use('/static', express.static('public'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.post('/api', function(req, res) {
    let input = req.body.source;
    kuromojin(input).then(tokens => {
        const score = analyze(tokens);
        res.json({
            message:score
        });
    });
});
app.get('/', (req, res) => {
    res.json({
        message:"/"
    });
});

const server = app.listen(8080, () => {
  const host = server.address().address;
  const port = server.address().port;
  console.log(`app listening at port: ${port}`);
});

expressとbody-parserというパッケージも使うので、これらもnpmでインストールしておきます。

Web入力フォーム

publicというフォルダを作り、その中にform.htmlを作成します。
AjaxでJSONデータをPOSTして、結果を取得するだけです。
Javascript部分のみ抜粋するとこうなってます。

$('#analyze').click(function(){
  let button = $(this);
  button.attr('disabled', true);
  let data = {
      source: $('#source').val()
  };
  $.ajax({
      url: "/api",
      type: "post",
      data: JSON.stringify(data),
      contentType: "application/json",
      dataType: "json",
      success: function(json_data) {
          $('#result').val(json_data.message);
      },
      error: function() {
          $('#result').val('Server error. Try again.');
      },
      complete: function() {
          button.attr('disabled', false);
      }
  });
});

app.yaml

GAEの設定ファイルであるapp.yamlはこうです。
メモリをやや食うので、インスタンスタイプはF4を使います。
GAEスタンダードのインスタンスタイプ一覧はこちらに記載されてます

runtime: nodejs8
instance_class: F4

デモ環境

さて、出来上がったネガポジ判定フォームがこれです。

日本語自然文 ネガポジ判定 | Exture

デザインは一切考慮してません、てのは置いときます。
上のボックスに適当な日本語自然文を入力して、[判定する]ボタンをクリックすると下のボックスに結果が表示されます。

試しに以下のような一文を入れて判定します。
私の大好きな「鬼平犯科帳」の中の一文です。

「人間というやつ、遊びながらはたらく生きものさ。善事をおこないつつ、知らぬうちに悪事をやってのける。悪事をはたらきつつ、知らず識らず善事をたのしむ。これが人間だわさ。」

判定結果は 0.03413231966246302 点でした。
つまりポジティブです。

では、もう一文。これまた鬼平。

「人というものは、はじめから悪の道を知っているわけではない。何かの拍子で、小さな悪事を起こしてしまい、それを世間の目にふれさせぬため、また、つぎの悪事をする。そして、これを隠そうとして、さらに大きな悪の道へ踏み込んで行くものなのだ。」

結果は -0.010137118057947923 点。
ネガティブです。

まとめ

今回は、Node.jsとGAEを使って、日本語自然文ネガポジ判定Webアプリを作成する方法について説明しました。
既存のライブラリをそのまま流用しましたが、我こそはという言う方は任意の形態素解析・構文解析を行った上で、独自の辞書と採点ロジックでネガポジ判定してみましょう。

弊社はGoogle Cloud Platformのサービスパートナーです。
たまにこうやってWebアプリを作ってGAEで動かしてます。
お問い合わせはこちらからどうぞ。

ブログへの記事リクエストはこちらまで

ピックアップ記事

  1. 最速で理解したい人のためのIT用語集

関連記事

  1. Adobe Analytics

    Adobe AEP SDKでReactNativeアプリを計測する (Android編)

    こんにちは、エクスチュアの権泳東(コン・ヨンドン)です。今回は…

  2. Cloud Dataproc

    BigQueryテーブルをAVRO形式でエクスポートしてHiveで扱う

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  3. Adobe Analytics

    Adobe Analytics: SegmentsAPIを使って大量のセグメント設定を作成・更新する…

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  4. Firebase Analytics

    Firebase AnalyticsのデータをフラットなCSVに変換するETL処理

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  5. Google Analytics

    Server-side GTMのGAビーコンログをBigQueryにエクスポートして分解する

    こんにちは、エクスチュアの権泳東(權泳東/コン・ヨンドン)です。…

  6. Google Cloud Platform

    Google Compute Engine のLinuxVMにVNC接続する

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

カテゴリ

最近の記事

  1. #ai-datacloud勉強会でマルチモーダルに触れた日
  2. Matillion ETLを安全に使いたい人へ送る、SSL対…
  3. LangGraphのソースコードから見る今更聞けないAIエー…
  4. Canva×生成AIで“映える”ダッシュボー…
  5. ベイズとかいうすごいやつ
  1. Adobe Analytics

    BigQuery: テーブルに格納されたURL文字列をKey-ValueのSTR…
  2. ブログ

    ②DMPについてーAdobe Audience Manager
  3. Google Apps Script(GAS)

    文字列置換アプリを作成しました
  4. Mouseflow

    Mouseflow: MouseflowタグをWebサイトに導入する
  5. ブログ

    データ視覚化ツール「Power BI」
PAGE TOP