1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ユーザーの声を形態素解析する:C#で作った業務可視化ツール

Posted at

はじめに

ある時、別部署で「お客様からの意見・要望」を蓄積しているという話を聞きました。
それらはCSV形式でまとめられていたものの、上手く活用されていないように見えました。

せっかく蓄積されている貴重なフィードバックも、量が多くなると“読んで終わり”になってしまいがちです。
どうにかして傾向を客観的に見える形にできないか? ──そう思って、形態素解析ツールの作成を思い立ちました。

当時の僕はまだ新人で、業務量にも余裕がありました。
正式な依頼ではなかったものの、「こういうものがあったら便利だよな」と思い、空いた時間を使って試作を始めました。

ツールに求めたのは、以下のような要素です:

  • 指定列のフリーテキストを一括解析(CSV入力)
  • 名詞など指定した品詞だけを抽出
  • 除外語リストでノイズ語を除去
  • 単語ごとの出現回数をカウント・ソート
  • 出現回数の下限を指定してノイズを除外
  • CSVで出力できるようにする

こうしてできたのが、MeCabSharpとWinFormsを使った軽量な形態素解析ツールです。

この記事では、その設計方針や構成、簡単な工夫についてまとめてみます。

目次

  • 使用技術と方針
    • なぜこの構成にしたか
  • ツールの構成
  • 工夫と詰まった点
  • おわりに

使用技術と方針

このツールでは以下の技術スタックを採用しました:

  • C#(.NET Framework)+WinForms
    内製ツールとしての保守性・即時性を重視し、GUIも含めて単体で完結する構成にしました。

  • MeCabSharp(MeCabのC#ラッパー)
    高速な日本語形態素解析エンジン「MeCab」をC#から直接呼び出せるラッパーです。
    形態素解析とは、文章を単語単位に分解し、それぞれの品詞などを分析する技術です。

なぜこの構成にしたか

  • 業務端末で動作可能なGUI形式が必要だった
    実行者にとってPythonやCLI操作はハードルが高いため、GUI操作で完結させる必要がありました。

  • 除外語の調整や閾値設定をUIで柔軟に行いたかった
    頻出語の出現バランスはデータごとに大きく異なるため、ハードコーディングせず、UIから調整可能な仕組みにしました。

  • 辞書のカスタマイズに対応できるようにしたかった
    業界用語や社内用語など、一般辞書に存在しない単語の登録も考慮し、MeCabのユーザー辞書機能に対応させました。

ツールの構成

このツールは、以下のような処理ステップで構成されています。

1. CSVファイルの読み込み

  • 対象のCSVファイルをドラッグ&ドロップ、またはファイル選択ダイアログから読み込み
  • フィールドの中から「解析対象とする列」を選択(例:「要望内容」など)

2. 除外語リストの読み込み

  • .txt形式の除外語ファイルを読み込み
  • 1行1語形式(例:「する」「こと」「対応」など)で記述

3. 形態素解析の実行(MeCabSharp)

  • MeCabSharp経由で、指定列の各文章を形態素解析
  • 品詞フィルタ(名詞のみ、固有名詞を除外など)を適用
  • トークンごとに単語リストを構築

4. 頻出単語の集計・ソート

  • 全行を解析後、出現頻度を単語ごとにカウント
  • 除外語と品詞フィルタを適用済みの状態で、回数順にソート

5. 閾値によるフィルタ

  • 出現回数の下限をUIから設定可能(例:2回以上出現した語だけ残す)
  • 出現回数の上限はあえて設けていません
    (多く出現する語が何かは実行してみないと分からないため)

6. 結果のCSV出力

  • 集計された結果はCSV形式で保存可能
  • 他の資料作成や報告用途にそのまま活用できる

※ UI上でのプレビュー表示は未実装で、CSV出力のみに対応しています。

工夫と詰まった点

辞書の強化(ユーザー辞書の活用)

  • デフォルト辞書では業界用語や社内特有の表現が解析されないケースが多く、
    MeCabのユーザー辞書機能を導入しました。
  • .csv形式で専門用語を追加し、辞書再構築することで精度を改善。

品詞の取捨選択

  • 動詞や助詞はノイズが多いため、名詞中心に絞る設計に。
  • 固有名詞を除外するかどうかはオプションとして切り替え可能(チェックボックスで指定)

除外語の扱い

  • ストップワードの除去に加え、ドメイン固有の不要語も除外可能に。
  • 除外語リストは.txt形式で編集できるため、ノンエンジニアでも調整しやすい。

閾値設定と柔軟性

  • 単語の頻度に合わせて、出現回数の下限を指定できる
  • 上限フィルタは実装せず、「想定外に多い語」も可視化対象としています

おわりに

このツールは、「せっかく蓄積されたデータをもっと活用できるようにしたい」という思いから、
新人時代に手探りで作り始めたものでした。

形態素解析自体はすでに多くの言語処理ライブラリで扱える技術ですが、
実際の業務で“使いやすい形”に落とし込むには、
意外と多くの調整ポイントやユーザー目線の工夫が必要です。

特に以下のような学びがありました:

  • ノイズ語の排除と、意味のある語の抽出のバランスが難しい
  • 辞書のメンテナンスは地味だが、効果は大きい
  • 出力結果が“次の行動につながる形”であることが重要

地味ではありますが、こうしたツールは
「業務の中でなぜか誰も作っていなかったけど、あると確実に役に立つ」タイプのものです。

この記事が、

  • 形態素解析を実業務に取り入れてみたい方
  • C#やWinFormsで自然言語処理をやってみたい方
  • データの“読める形”への変換に関心がある方
    の参考になれば幸いです。
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?